踩坑之路(六) Canal搭建

实时同步``MySQL数据到Kafka方式有挺多。

这里我采用阿里开源MySQL binlog 增量订阅&消费组件Canal去做这件事

1 概述

官网地址:https://github.com/alibaba/canal

具体情况去官网看吧

2 安装部署

2.1 下载最新版本包

1
https://github.com/alibaba/canal/releases

上传到服务器/lankr/software

2.2 解压

1
2
mkdir /lankr/application/canal-1.1.15
tar -zxvf canal.deployer-1.1.5.tar.gz -C /lankr/application/canal-1.1.15

2.3 开启binlog写入功能

mysql开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式,my.cnf 中配置如下

1
vim /lankr/application/mysqlCanal/conf/my.cnf

添加以下内容

1
2
3
4
# 下面是canal配置
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复

2.4 配置canal账号

1
2
docker exec -it mysqlCanal /bin/bash
mysql -u root -p
1
2
3
4
5
6
7
8
9
10
CREATE USER canal IDENTIFIED BY 'canal';  
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;

ALTER USER 'canal'@'localhost' IDENTIFIED BY 'canal' PASSWORD EXPIRE NEVER;
ALTER USER 'canal'@'localhost' IDENTIFIED WITH mysql_native_password BY 'canal';
ALTER USER 'canal'@'%' IDENTIFIED BY 'canal' PASSWORD EXPIRE NEVER;
ALTER USER 'canal'@'%' IDENTIFIED WITH mysql_native_password BY 'canal';
FLUSH PRIVILEGES;

2.5 修改配置文件

2.5.1 修改canal.properties

1
vim /lankr/application/canal-1.1.15/conf/canal.properties

修改部分如下:

1
2
3
4
# tcp, kafka, rocketMQ, rabbitMQ
canal.serverMode = kafka
canal.destinations = example
kafka.bootstrap.servers = 192.168.88.10:9092;192.168.88.20:9092;192.168.88.30:9092

2.5.2 修改instance.properties

1
vim /lankr/application/canal-1.1.15/conf/example/instance.properties

修改内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 这个源码是注释的,自己复制下。不要和mysql my.cnf的server_id重复
canal.instance.mysql.slaveId = 1234

# 你的数据库地址信息
canal.instance.master.address=192.168.1.101:3306

# 用于同步的数据库的用户名和密码,我下面创建的是canal,canal
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal

# 没有匹配到的数据都发送到这个分区下
canal.mq.topic=a_default_topic

# 你自己的要同步的表的匹配规则,我要同步全部,所以这里就用默认的
canal.instance.filter.regex=.*\\..*

# 这样每个表都会发到一个主题里,这样就好管理了。然后先这样吧,后续再根据业务去看怎么弄
canal.mq.dynamicTopic=.*\\..*

2.6 启动:起飞

启动

1
/lankr/application/canal-1.1.15/bin/startup.sh

查看canal和example日志

1
2
tail -1000f /lankr/application/canal-1.1.15/logs/canal/canal.log
tail -1000f /lankr/application/canal-1.1.15/logs/example/example.log

2.7 关闭集群

1
/lankr/application/canal-1.1.15/bin/stop.sh

3 总结

canal的官方文档确实坑很多,写的很乱,很多配置、参数都没有解释,哎,万能的google滚啊趴啊趴啊滚啊,慢慢来吧。

联系博主,加入【羊山丨交流社区】

联系博主


本博客所有文章除特别声明外,均为原创。版权归博主小马所有。任何团体、机构、媒体、网站、公众号及个人不得转载。如需转载,请联系博主(关于页面)。如其他团体、机构、媒体、网站、博客或个人未经博主允许擅自转载使用,请自负版权等法律责任!