写在前面
现在canal
自身已经整合了RabbitMQ
,所以开发人员只需要配置就可以实现将消息发送到RabbitMQ
。不过这里还有简单的小问题需要大家注意。
canal.mq.servers 指定rabbitmq 地址不能加端口
如下所示:
canal.mq.servers = 192.168.5.4:5762 错误
canal.mq.servers = 192.168.5.4 正确
一、 环境准备
canal-1.15-alpha-1
rabbitmq-3.6.15
mysql-5.7.17
设置mysql
mysql 开启binlog
[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
授权canal 连接mysql
授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限, 如果已有账户可直接 grant。
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;
二、 安装canal.server
- 下载
canal.deployer
wget https://github.com/alibaba/canal/releases/download/canal-1.1.5-alpha-1/canal.deployer-1.1.5-SNAPSHOT.tar.gz
- 将
canal.deployer
解压到指定文件夹
mkdir canal
tar -zxvf canal.deployer-1.1.1.tar.gz -C canal
-
查看解压缩文件
三、修改canal 配置文件
bin/canal.properties
.....
# 指定rabbitmq
canal.serverMode = rabbitmq
...
# rabbitmq 设置
canal.mq.servers = 192.168.5.4 ## 注意不要加端口号,不然会报IPV6错误。
canal.mq.vhost=/
canal.mq.exchange=exchange.trade.order
canal.mq.username=admin
canal.mq.password=admin
bin/example/instance.properties
canal.instance.mysql.slaveId=9999
...
# position info
canal.instance.master.address=192.168.3.157:3306 ## 数据库地址
# enable druid Decrypt database password
canal.instance.defaultDatabaseName=file ## 数据库名
canal.mq.topic=example # 路由键
...
四、启动
启动canal
进入bin
,启动canal
./startup.sh
查看启动日志
cat logs/canal/canal.log
cat logs/example/examle.log
五、新建队列
六、更新数据
update tb_account set email = 'b' where id = 3;