一、canal介绍
1、canal主要用途是基于mysql数据库增量日志解析,提供增量数据订阅和消费。
早期阿里巴巴是因为杭州和美国双机房部署,存在跨机房同步的业务需求。
当前canal支持源端mysql版本包括5.1.x、5.5.x、5.6.x、5.7.x、8.0.x
2、canal没有独立的官网,可以在github上下载和查看canal文档,地址:https://github.com/alibaba/canal/wiki
3、canal工作原理:canal监听binlog日志
二、安装canal
1、开启binlog
①登录数据库:mysql -u root -p xxxxxx
②查看log_bin是否为ON:show variables like "log%";
③修改my.cnf文件:vim /etc/my.cnf
随机指定一个不能和其他集群中机器重名的字符串,不要和canal的slaveId重复:server-id=123
配置binlog日志目录,配置后会自动开启binlog日志,并写入该目录:log-bin=/var/lib/mysql/mysql-bin
选择row模式:binlog-format=ROW
mysql有三种模式:ROW:记录操作mysql的每一行
STATEMENT:记录sql语句,但是sql中涉及函数操作时,如now,uuid时会产生差异,导致数据不准确
MIXED:当sql中有函数时用ROW记录,当没有函数时用STATEMENT记录
④重启mysql:service mysqld restart
⑤再次查看binlog是否开启:show variables like "log%";
2、下载canal:https://github.com/alibaba/canal/releases canal.deployer-1.1.4.tar.gz
3、上传至node节点,创建一个新目录,用于放canal解压后文件:mkdir canal
解压至创建的文件夹中:tar -zxvf ./canal.deployer-1.1.4.tar.gz -C canal
三、canal同步mysql数据原理
1、先从Log Position中获取到上次解析成功的位置
2、向数据库发送命令同步binlog日志
3、mysql推送binlog,如果没有连接成功的话连接失败
4、解析日志并往后传递
四、数据配置
canal中需要配置两个文件和权限
1、配置mysql slave权限:canal的原理是模拟自己为mysql slave,所以这里需要canal作为mysql slave的相关权限
1 mysql> CREATE USER canal IDENTIFIED BY 'canal'; 2 mysql> GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%'; 3 mysql> FLUSH PRIVILEGES; 4 mysql> show grants for 'canal';
2、配置两个文件
第一个文件为canal的数据源,即数据从哪个mysql中节点来:instance.properties
将canal.instance.mysql.slaveId解开注释并设置为123456,及与之前my.cnf设置不一样即可
将canal.instance.master.address=127.0.0.1:3306改为数据库地址
将canal.instance.dbUsername=canal改为用户名,及前面复制权限的用户名
将canal.instance.dbPassword=canal改为密码,及前面复制权限的密码
将canal.mq.topic=canal_topic(如果你设置为将数据写到kafka中时配置这个)
第二个文件为canal的目标源,即这些数据要通过canal写到哪里去:/conf/canal.properties
可以查阅:https://github.com/alibaba/canal/wiki/AdminGuide
五、启动canal
1、cd /canal/bin/
2、./startup.sh
3、jps查看是否存在CanalLauncher进程