1. 前言
Canal的作用:把自己”伪装”成一个Mysql
的slave
,不停同步master
的binlog
数据,再把binlog
数据以TCP
或者MQ
的方式(支持kafka、RabbitMQ、RocketMQ)发送给需要同步数据的项目
canal
项目地址:https://github.com/alibaba/canal/releases , 2022-05-24发布的最新版1.1.6。
测试需要同步的目标数据库是192.168.44.121上部署的数据库
2. 在目标数据库上创建用户和数据库
注意 121 的数据库首先要开启binlog
,binlog-format
必须是ROW
1 | /var/lib/mysql/mysql-bin = |
用户和数据库创建
1 | -- 创建canal专用的用户,用于访问master获取binlog |
3. 安装ZK和kafka
在192.168.44.161机器上安装ZK和kafka, 这里我们安装伪集群版本,具体步骤请参考 CentOS Kafka 3.2.0 单机集群安装(伪集群)
4. 安装canal
- 下载canal
以安装目录:/usr/local/tools/canal 为例。如果下载慢的话,可以先下载到本地,然后上传到服务器1
2
3
4
5
6cd /usr/local/tools/
midir canal
cd canal
wget https://github.com/alibaba/canal/releases/download/canal-1.1.6/canal.deployer-1.1.6.tar.gz
tar -zxvf canal.deployer-1.1.6.tar.gz
修改配置:conf/canal.properties
1
2cd /usr/local/tools/canal/conf
vim canal.propertis修改配置如下:
1
2kafka =
192.168.44.160:9092 =修改配置:example/instance.properties
1
2cd /usr/local/tools/canal/example
vim instance.properties1
2
3
4
5
6
7192.168.44.121:3306 =
canal =
123456 =
# 新增
canaltest =
# 这个topic会自动创建
canal-topic =启动canal
1
2
3
4cd /usr/local/tools/canal/bin
sh startup.sh
查看实例日志
tail -100f /usr/local/tools/canal/logs/canal/canal.log
5. 建表测试
在canaltest数据随表建一张表,做增删改的操作。
在Kafka服务器上消费这个topic
1 | ./kafka-console-consumer.sh --bootstrap-server 192.168.44.160:9092 --topic canal-topic |
kafka相关命令可以查看这篇博客 kafka常用命令
成功消费到canal发送的消息: