Canal用RabbitMQ来监听MySQL详细配置及问题解决

文章说明:主包的Canal采用的是1.1.7版本,因为MySQL是在Windows下配置的,所以为了图方便,Canal也在Windows下配置。下面主要记录下步骤以及过程中遇到的较多的坑。

配置步骤:

1下载安装Canal

这里直接去Canal官方下载即可,链接:Release v1.1.7 · alibaba/canalCanal用RabbitMQ来监听MySQL详细配置及问题解决https://github.com/alibaba/canal/releases/tag/canal-1.1.7这里给的是1.1.7版本的,可以根据需要自行更换,下载deployer版本,然后本地解压即可。

Canal用RabbitMQ来监听MySQL详细配置及问题解决

2配置Canal

本地解压后,打开conf文件夹下的canal.properties文件,进行对RabbitMQ的配置,首先这个要从tcp改为rabbitMQ,当然采用其他mq的话这里就改为相应的即可。(可以用记事本打开,Ctrl +F搜索)

# tcp, kafka, rocketMQ, rabbitMQ, pulsarMQ
canal.serverMode = rabbitMQ

然后,这里我没有作修改,这个过滤规则可以去网上搜搜,这是Canal的过滤规则,这里就说下最后三行,dml就是对数据库文件或数据的操作,对应就是增、删、改操作,这里默认的设置false的意思就是不对其过滤,要进行监听,对于后面的RabbitMQ,就是会将对应的消息转发。(可能有点绕,意思就是这个配置保持默认,我一开始以为这里要为true才会转发增删改消息)。

# binlog filter config
canal.instance.filter.druid.ddl = true
canal.instance.filter.query.dcl = false
canal.instance.filter.query.dml = false
canal.instance.filter.query.ddl = false
canal.instance.filter.table.error = false
canal.instance.filter.rows = false
canal.instance.filter.transaction.entry = false
canal.instance.filter.dml.insert = false
canal.instance.filter.dml.update = false
canal.instance.filter.dml.delete = false

接着就是RabbitMQ的配置了,这里的配置根据你的实际情况进行配置,host就是你的RabbitMQ的host,virtual.host是MQ管理客户端右上角的,一般是/,exchange就是交换机,可设置为和我一样,username和password是你的RabbitMQ的用户名和密码,deliveryMode这里采用的默认direct。

重点在于最后两行,这个是需要自己加上的,不加可能会出错,具体原因可去github下的issue查看,这里加上的就是你的队列queue,和路由键routingKey,注意如果是1.1.8,我在查看的时候好像1.1.8版本下的配置文件默认自带了这两行,可能是1.1.7的一个bug,总之加上就没问题了。canal集成rabbitmq时topic配置问题, rabbitmq中没有收到消息 · Issue #5041 · alibaba/canalCanal用RabbitMQ来监听MySQL详细配置及问题解决https://github.com/alibaba/canal/issues/5041

##################################################
######### 		    RabbitMQ	     #############
##################################################
rabbitmq.host = 192.168.88.131
rabbitmq.virtual.host = /
rabbitmq.exchange = canal.exchange
rabbitmq.username = 你的RabbitMQ用户名
rabbitmq.password = 你的RabbitMQ密码
rabbitmq.deliveryMode = direct
rabbitmq.queue = canal.queue
rabbitmq.routingKey = canal.routing.key

到这canal.properties文件的配置就结束了,然后对example下的instance.properties文件进行配置,这个文件只需修改这一行即可:把mq.topic改为和前面的rabbitmq.routingKey一致,对于canal.mq.partition=0,好像默认是注释的,可以取消注释,当然不取消应该也没问题。

# mq config
canal.mq.topic=canal.routing.key
# dynamic topic route by schema or table regex
#canal.mq.dynamicTopic=mytest1.user,topic2:mytest2\\..*,.*\\..*
canal.mq.partition=0

哦对还有最后一点十分重要,要将plugin文件夹下的jar包放入lib文件夹下,否则后面启动Canal的时候会报错,日志显示缺少jar包,这里放入过后就应该没有什么问题。

Canal用RabbitMQ来监听MySQL详细配置及问题解决

3配置MySQL

因为Canal的本质就是伪装为一个MySQL从节点,对MySQL的binlog数据进行监听,所以就要开启MySQL的binlog,这里因为我是直接下载的MySQL压缩包解压使用的,所以没有对应的MySQL的配置文件my.ini,这里是根据下面这篇文章修改的,并且在他原有的ini文件中加了如下几行,用于启用binlog,要选择ROW模式才行。有my.ini文件的直接在文件中加下面几行即可,配置前先停止MySQL服务,然后再启动。(文件目录一般默认是C:\ProgramData\MySQL\,没有就去自己的安装目录里找找,都没有就按照下面的方法。)

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

【详记MySql问题】安装之后没有my.ini配置文件怎么办_windows 没有my.ini-CSDN博客Canal用RabbitMQ来监听MySQL详细配置及问题解决https://blog.csdn.net/Aacheng123/article/details/119971373

注意,卸载前如果想保留原来的数据库表,建议保留整个data文件夹,重新下载后直接将新的data文件夹删除,把原来的放进去即可,(前提是前后版本要一致),这里的所有操作都建议先停止MySQL服务,然后再启动。

使用下面这行SQL语句来确认 MySQL 实际 binlog 格式是 ROW:

SHOW VARIABLES LIKE 'binlog_format';

正常为:

Canal用RabbitMQ来监听MySQL详细配置及问题解决

接着创建Canal用户,执行下面的SQL语句,

DROP USER IF EXISTS 'canal'@'%';
CREATE USER 'canal'@'%' IDENTIFIED BY 'canal';
GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;

使用下面这行SQL语句检查是否配置成功:

SHOW GRANTS FOR 'canal'@'%';

正常为:

Canal用RabbitMQ来监听MySQL详细配置及问题解决

4配置RabbitMQ

对RabbitMQ的配置就比较简单了,如下设置其队列、路由、交换机即可。

Canal用RabbitMQ来监听MySQL详细配置及问题解决

至此配置就整体结束了,就可以进行测试了。

5测试

首先双击Canal安装文件夹下的bin文件夹的startup.bat文件进行启动即可,正常打开窗口如下:

Canal用RabbitMQ来监听MySQL详细配置及问题解决

接着打开RabbitMQ,然后对数据库进行操作,注意是增删改操作,这里直接采用的Navicat对数据库进行操作的,经过测试RabbitMQ成功接收到了消息。

Canal用RabbitMQ来监听MySQL详细配置及问题解决

至此大功告成。下一步就可以在Java中写相关代码,实现用Canal集成RabbitMQ来实现多级缓存一致性的问题了。

© 版权声明

相关文章