【canal】 订阅mysql binlog实现数据库和中间件(Redis/ES)数据一致性

789 阅读1分钟

资料

# 官方
https://github.com/alibaba/canal

# 文档首页
https://github.com/alibaba/canal/wiki

# 服务端搭建文档
https://github.com/alibaba/canal/wiki/QuickStart

1. mysql开启binlog

mysql的my.cnf配置增加如下配置,开启binlog

[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复

新增用户,用于canal服务端伪装成mysql的slave

CREATE USER canal IDENTIFIED BY 'canal';  
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;

这里创建用户后,在后面配置好example的instance后,发现日志有两个报错,第一个是 too manny connections 连接过多,导致连接池溢出;二是 caching_sha2_password Auth failed

  1. 连接数过多,导致连接溢出解决方案:

更改mysql的默认最大连接数

https://mp.weixin.qq.com/s?__biz=MzA4NzQ0Njc4Ng==&mid=2247499002&idx=2&sn=54d964eb3c85bc49d3e4eaaf0045ba34&chksm=903bf897a74c71811c2cf5777fef1fd84c5a80887995025a41ba08d36336916fd7dd11c85801&scene=132#wechat_redirect
  1. caching_sha2_password Auth failed解决方案
https://www.jianshu.com/p/efa68e05d2ed

密码加密方式为caching_sha2_password,所以修改为mysql_native_password 就行并重新更新密码

ALTER USER 'canal'@'%' IDENTIFIED WITH mysql_native_password BY 'canal..'; #更新一下用户密码
FLUSH PRIVILEGES; #刷新权限

2. 下载canal1.1.4

下载 canal.deployer-1.1.4.tar.gz文件

https://github.com/alibaba/canal/releases/tag/canal-1.1.4

将下载下来的 canal.deployer-1.1.4.tar.gz文件上传到服务器,解压

mkdir /data/canal/canal
tar zxvf canal.deployer-$version.tar.gz  -C /data/canal/canal

3. 修改配置文件

cd /data/canal/canal/
vi conf/example/instance.properties

需要修改的部分,在下面注释有列出来

## mysql serverId
# 需要修改,保证唯一性
canal.instance.mysql.slaveId = 1234
#position info,需要改成自己的数据库信息
canal.instance.master.address = 192.168.56.102:13306 
canal.instance.master.journal.name = 
canal.instance.master.position = 
canal.instance.master.timestamp = 
#canal.instance.standby.address = 
#canal.instance.standby.journal.name =
#canal.instance.standby.position = 
#canal.instance.standby.timestamp = 
#username/password,需要改成自己的数据库信息
canal.instance.dbUsername = canal  
canal.instance.dbPassword = canal
canal.instance.defaultDatabaseName =
canal.instance.connectionCharset = UTF-8
#table regex
canal.instance.filter.regex = .\*\\\\..\*

4. 启动服务端

启动:

sh bin/startup.sh

查看server的日志:

tail -50f logs/canal/canal.log

查看instance的日志:

tail -50f logs/example/example.log

如需关闭:

sh bin/stop.sh

5. springboot2.1.7集成canal

参考官网,根据自己公司的情况封装一下即可

https://github.com/alibaba/canal/wiki/ClientExample