• 项目部署之安装和配置Canal


    1.Canal介绍

    Canal阿里巴巴的一个开源项目,基于java实现,整体已经在很多大型的互联网项目生产环境中使用,包括阿里、美团等都有广泛的应用,是一个非常成熟的数据库同步方案,基础的使用只需要进行简单的配置即可。

    Canal是通过模拟成为mysqlslave的方式,监听mysqlbinlog日志来获取数据,binlog设置为row 模式以后,不仅能获取到执行的每一个增删改的脚本,同时还能获取到修改前和修改后的数据,基于这个特性,Canal就能高性能的获取到mysql数据数据的变更。

    在这里插入图片描述

    Canal的工作原理就是把自己伪装成MySQL slave,模拟MySQL slave的交互协议向MySQL Mater发送 dump协议,MySQL mater收到Canal发送过来的dump请求,开始推送binary logCanal,然后Canal解析binary log,再发送到存储目的地,比如MySQLKafkaElasticSearch等等。

    2. 开启MySQL主从

    Canal是基于MySQL的主从同步功能,因此必须先开启MySQL的主从功能才可以。

    这里以之前用Docker运行的mysql为例:

    2.1. 开启binlog

    打开mysql容器挂载的日志文件,目录在/tmp/mysql/conf

    在这里插入图片描述

    修改文件:

    vi /tmp/mysql/conf/my.cnf
    
    • 1

    添加内容:

    log-bin=/var/lib/mysql/mysql-bin
    binlog-do-db=dcxuexi
    
    • 1
    • 2

    配置解读:

    • log-bin=/var/lib/mysql/mysql-bin:设置binary log文件的存放地址和文件名,叫做mysql-bin
    • binlog-do-db=dcxuexi:指定对哪个database记录binary log events,这里记录dcxuexi这个库

    最终效果:

    [mysqld]
    skip-name-resolve
    character_set_server=utf8
    datadir=/var/lib/mysql
    server-id=1000
    log-bin=/var/lib/mysql/mysql-bin
    binlog-do-db=dcxuexi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.2. 设置用户权限

    接下来添加一个仅用于数据同步的账户,出于安全考虑,这里仅提供对dcxuexi这个库的操作权限。

    create user canal@'%' IDENTIFIED by 'canal';
    GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT,SUPER ON *.* TO 'canal'@'%' identified by 'canal';
    FLUSH PRIVILEGES;
    
    • 1
    • 2
    • 3

    重启mysql容器即可

    docker restart mysql
    
    • 1

    测试设置是否成功:在mysql控制台,或者Navicat中,输入命令:

    show master status;
    
    • 1

    在这里插入图片描述

    3. 安装Canal

    3.1. 创建网络

    我们需要创建一个网络,将MySQLCanalMQ放到同一个Docker网络中:

    docker network create dcxuexi
    
    • 1

    mysql加入这个网络:

    docker network connect dcxuexi mysql
    
    • 1

    3.3. 安装Canal

    canal的镜像压缩包:

    在这里插入图片描述

    可以上传到虚拟机,然后通过命令导入:

    docker load -i canal.tar
    
    • 1

    然后运行命令创建Canal容器:

    docker run -p 11111:11111 --name canal \
    -e canal.destinations=dcxuexi \
    -e canal.instance.master.address=mysql:3306  \
    -e canal.instance.dbUsername=canal  \
    -e canal.instance.dbPassword=canal  \
    -e canal.instance.connectionCharset=UTF-8 \
    -e canal.instance.tsdb.enable=true \
    -e canal.instance.gtidon=false  \
    -e canal.instance.filter.regex=dcxuexi\\..* \
    --network dcxuexi \
    -d canal/canal-server:v1.1.5
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    说明:

    • -p 11111:11111:这是canal的默认监听端口
    • -e canal.instance.master.address=mysql:3306:数据库地址和端口,如果不知道mysql容器地址,可以通过docker inspect 容器id来查看
    • -e canal.instance.dbUsername=canal:数据库用户名
    • -e canal.instance.dbPassword=canal :数据库密码
    • -e canal.instance.filter.regex=:要监听的表名称

    表名称监听支持的语法:

    mysql 数据解析关注的表,Perl正则表达式.
    多个正则之间以逗号(,)分隔,转义符需要双斜杠(\\) 
    常见例子:
    1.  所有表:.*   or  .*\\..*
    2.  canal schema下所有表: canal\\..*
    3.  canal下的以canal打头的表:canal\\.canal.*
    4.  canal schema下的一张表:canal.test1
    5.  多个规则组合使用然后以逗号隔开:canal\\..*,mysql.test1,mysql.test2 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    Linux基础知识:认识一下内存
    QGIS安装与使用教程
    Centos7 开机时遇到initramfs-xxx.img not found错误导致虚拟机无法开启问题处理
    复习一下vuex
    选择程序员生涯发展方向
    计算机视觉与深度学习 | 视觉里程计理论
    Python(四十三)——下载PDF
    os.environ[CUDA_VISIBLE_DEVICES] 失效无法指定 GPU
    Net6.0项目发布到IIS 503
    软考·系统架构师——导学
  • 原文地址:https://blog.csdn.net/qq_37726813/article/details/134275959