1.cannal
1.1 canal简介
canal可以用来监控数据库数据的变化,从而获得新增数据,或者修改的数据。
canal是应阿里巴巴存在杭州和美国的双机房部署,存在跨机房同步的业务需求而提出的。
阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务。
原理相对比较简单:
- canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
- mysql master收到dump请求,开始推送binary log给slave(也就是canal)
- canal解析binary log对象(原始为byte流)
1.2 环境部署
1.2.1 mysql开启binlog模式
(1)查看当前mysql是否开启binlog模式
SHOW VARIABLES LIKE '%log_bin%'
如果log_bin的值为OFF是未开启,为ON是已开启。
(2)修改/etc/my.cnf 需要开启binlog模式。
binlog-format=ROW
server_id=1
修改完成之后,重启mysqld的服务
(3) 进入mysql
mysql -h localhost -u root -p
(4)创建账号 用于测试使用
使用root账号创建用户并授予权限
create user canal@'%' IDENTIFIED by 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT,SUPER ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;
1.2.2 canal服务端安装配置
(1)下载地址canal
https://github.com/alibaba/canal/releases/tag/canal-1.0.24
(2)下载之后 上传到linux系统中,解压缩到指定的目录/usr/local/canal,解压缩之后的目录结构如下:
(3)修改 exmaple下的实例配置 vi conf/example/instance.properties
修改如图所示的几个参数。
(3)指定读取位置
进入mysql中执行下面语句查看binlog所在位置
如果file中binlog文件不为 mysql-bin.000001 可以重置mysql
mysql> reset master;
查看canal配置文件
vim /usr/local/canal/conf/example/meta.dat
找到对应的binlog信息更改一致即可
"journalName":"mysql-bin.000001","position":120,"
注意:如果不一致,可能导致以下错误
(4)启动服务: