最近在做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端口