最近在做redis和MySQL的缓存一致性,一个方式是订阅MySQL的BinLog文件,我们使用阿里巴巴的Canal的中间件来做。
Canal是服务端和客户端两部分构成,我们需要先启动Canal的服务端,然后在Go程序里面连接Canal服务端,即可监听到MySQL的数据变化。
启动Canal服务
QuickStart · alibaba/canal Wiki (github.com)
步骤都很简单,我们重点看一下/tmp/canal/conf/example/instance.properties里面配置文件
Canal之所以能订阅MySQL的binlog是把自己伪装成了一个MySQL从机,主机会不停的给MySQL的从机传输binlog文件。 等于启动Canal服务的过程包含了主从复制的配置过程,主从服务的过程是告诉从机主机的账号密码
补充
基于docker启动的canal服务,按照官方文档操作出现了问题,所以使用了普通的启动方式
Go连接Canal服务端
Canal支持Go连接
withlin/canal-go: Alibaba mysql database binlog incremental subscription & consumer components Canal's golang client[阿里巴巴mysql数据库binlog的增量订阅&消费组件 Canal 的 go 客户端 ] https://github.com/alibaba/canalhttps://github.com/withlin/canal-go
官方文档上面没有任何说明,我们需要自己翻一下代码
把代码拷贝下来即可
关于上面配置信息,具体可以参考Go操作阿里开源的框架Canal用于MySQL实时binlog同步 - 简书 (jianshu.com)
还有最最重要的一步,开启阿里云服务器安全组11111端口