mysql nosql 同步_使用canal和canal_mysql_nosql_sync同步mysql数据
場景:
有兩個獨立的項目A和B,都使用mysql做數(shù)據(jù)庫,
其中項目A中有一個表存儲新聞資訊,字段有新聞id,標題title,類型type,內(nèi)容data。
后來項目B也需要這個表的數(shù)據(jù),但項目B用了兩個表:一個表存新聞id,標題title,類型type,另一個表存儲新聞id和新聞內(nèi)容data。
這時如果要把項目A中實時變化的數(shù)據(jù)同步項目B中,顯然傳統(tǒng)的同步方式就不滿足了
實現(xiàn)思路
利用canal獲取變化數(shù)據(jù)
利用canal_mysql_nosql_sync存入redis隊列
(https://github.com/liukelin/canal_mysql_nosql_sync)
起一個守護腳本一直讀取該redis,將產(chǎn)生的數(shù)據(jù)寫入到新庫
實施步驟
一.在項目A中配置canal
1.確定服務(wù)器上有java環(huán)境,如果沒有需安裝下java
# java -version
java version "1.8.0_121"
2.獲取canal包
訪問https://github.com/alibaba/canal/releases,下載相應(yīng)的版本
本次以1.0.24為例
wget https://github.com/alibaba/canal/releases/download/canal-1.0.24/canal.deployer-1.0.24.tar.gz
# ls
bin conf lib logs
編輯instance.properties文件
vim ./conf/example/instance.properties
配置好數(shù)據(jù)庫的相關(guān)信息
canal.instance.master.address = 127.0.0.1:3306
# username/password
canal.instance.dbUsername = root
canal.instance.dbPassword = root123456
canal.instance.defaultDatabaseName = news
canal.instance.connectionCharset = UTF-8
配置下正則表達式
# table regex
canal.instance.filter.regex = .*
# table black regex
canal.instance.filter.black.regex = platform_news\\..*
這里注意兩點:
1)數(shù)據(jù)庫的用戶需要有slave權(quán)限;
2)正則表達式中,如果只配置白名單,在通過redis讀取時,發(fā)現(xiàn)沒生效,需同時配置黑名單才生效
配置完成后,啟動服務(wù)
sh bin/startup.sh
啟動完成后,會看到有個端口號為11111的進程
二.在項目B中部署canal_mysql_nosql_sync
1.獲取canal_mysql_nosql_sync
git clone https://github.com/liukelin/canal_mysql_nosql_sync
2配置
cd canal_mysql_nosql_sync/canal-client/conf
vim canal.properties
配置好對應(yīng)參數(shù)即可
3啟動
sh ./canal_mysql_nosql_sync/canal-client/start_canal_client.sh
正常啟動后,去項目A的表中改個數(shù)據(jù),可立即看到變化
三.在項目B中通過腳本獲取redis數(shù)據(jù),并寫入到項目B的數(shù)據(jù)庫中
腳本就不多贅述了,任意一個語言都可以(只要能操作redis和mysql即可XD):
1.連接redis,獲取redis中變化的數(shù)據(jù),redis的數(shù)據(jù)結(jié)構(gòu)如下
eventType :操作類型(UPDATE/INSERT/DELETE) db: 涉及庫 table: 涉及表 before:變更前數(shù)據(jù) after: 變更后數(shù)據(jù) time: 操作時間
2.提取出變化的數(shù)據(jù),根據(jù)eventType,將數(shù)據(jù)修改到項目B的數(shù)據(jù)庫中
總結(jié)
以上是生活随笔為你收集整理的mysql nosql 同步_使用canal和canal_mysql_nosql_sync同步mysql数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 数值类型 长度_mysql中
- 下一篇: 如何处理高并发写入mysql_如何处理高