前言
快速使用canal
一、canal原理
- canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
- MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
- canal 解析 binary log 对象(原始为 byte 流)
二、mysql开启binlog(mysql版本:5.7)
修改配置文件
windows C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
linux /etc/my.cnf
# 开启 binlog
log-bin=mysql-bin
# 日志格式
binlog_format=row
# 指定数据库,若不指定,则所有数据库 binlog 都生效
# binlog-do-db=dbname
重启 mysql
略。
查看是否已开启 binlog
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
授权
mysql> grant all privileges on *.* to '用户名'@'ip' identified by '密码';
mysql> flush privileges;
三、安装服务端canal.deployer(canal版本:1.1.5,linux:CentOS7)
下载发行版
canal.deployer-1.1.5.tar.gz
解压
tar zxvf canal.deployer-1.1.5.tar.gz
端口
firewall-cmd --zone=public --add-port=11110/tcp --permanent
firewall-cmd --zone=public --add-port=11111/tcp --permanent
firewall-cmd --zone=public --add-port=11112/tcp --permanent
firewall-cmd --reload
四、部署RabbitMQ服务端
五、修改配置文件
根配置文件 conf/canal.properties
# 指定模式
canal.serverMode = rabbitMQ
# 指定实例,多个实例使用逗号分隔: canal.destinations = example1,example2
canal.destinations = example
# rabbitmq 服务端 ip
rabbitmq.host = 127.0.0.1
# rabbitmq 虚拟主机
rabbitmq.virtual.host = /
# rabbitmq 交换机
rabbitmq.exchange = xxx
# rabbitmq 用户名
rabbitmq.username = xxx
# rabbitmq 密码
rabbitmq.password = xxx
rabbitmq.deliveryMode =
实例配置文件 conf/example/instance.properties
配置 slaveId,自定义,不等于 mysql 的 server Id 即可
canal.instance.mysql.slaveId=10
# 数据库地址
canal.instance.master.address=ip:port
# 数据库用户名和密码
canal.instance.dbUsername=xxx
canal.instance.dbPassword=xxx
# 指定库和表
canal.instance.filter.regex=.*\\..* // 这里的 .* 表示 canal.instance.master.address 下面的所有数据库
# mq config
# rabbitmq 的 routing key
canal.mq.topic=xxx
六、启动canal
sh bin/startup.sh
七、处理消息
当数据变更时,canal会向rabbitmq发送变更数据,消息为json格式。