Canal

一、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进程

作者:http://cnblogs.com/lyc-code/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权力。

原文地址:https://www.cnblogs.com/lyc-code/p/15343593.html