Binlog同步工具Canal部署使用
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
Canal介紹
早期,阿里巴巴 B2B 公司因?yàn)榇嬖诤贾莺兔绹p機(jī)房部署,存在跨機(jī)房同步的業(yè)務(wù)需求。不過早期的數(shù)據(jù)庫同步業(yè)務(wù),主要是基于 trigger 的方式獲取增量變更,不過從 2010 年開始,阿里系公司開始逐步的嘗試基于數(shù)據(jù)庫的日志解析,獲取增量變更進(jìn)行同步,由此衍生出了增量訂閱 & 消費(fèi)的業(yè)務(wù),從此開啟了一段新紀(jì)元。
ps. 目前內(nèi)部版本已經(jīng)支持 mysql 和 oracle 部分版本的日志解析,當(dāng)前的 canal 開源版本支持 5.7 及以下的版本 (阿里內(nèi)部 mysql 5.7.13, 5.6.10, mysql 5.5.18 和 5.1.40/48)
基于日志增量訂閱 & 消費(fèi)支持的業(yè)務(wù):
- 數(shù)據(jù)庫鏡像
- 數(shù)據(jù)庫實(shí)時(shí)備份
- 多級(jí)索引 (賣家和買家各自分庫索引)
- search build
- 業(yè)務(wù) cache 刷新
- 價(jià)格變化等重要業(yè)務(wù)消息
前期準(zhǔn)備
- mysql的binlog模式需要是ROW,查看binlog格式命令:show variables like 'binlog_format';
- 訂閱binlog賬號(hào)需要開啟下面3個(gè)權(quán)限:SELECT, REPLICATION SLAVE, REPLICATION CLIENT,查看權(quán)限命令:show grants for 'canal'
Canal部署
項(xiàng)目地址:https://github.com/alibaba/canal ,目前版本為 1.1.1。
修改配置文件conf/canal.properties
下載解壓到部署目錄,相關(guān)配置更改: 修改配置文件 conf/canal.properties
# zk的配置地址 canal.zkServers=192.168.123.123:2181 #關(guān)閉netty canal.withoutNetty = true # tcp, kafka, RocketMQ canal.serverMode = kafka #需要同步的表名 canal.destinations=student,student_extendcanal.instance.global.spring.xml = classpath:spring/default-instance.xml根據(jù)destinations定義,在conf下創(chuàng)建對(duì)應(yīng)目錄配置
參照 conf/example/目錄復(fù)制出 conf/student/ ,每個(gè)destinations定義的表對(duì)應(yīng)一個(gè)目錄 修改 conf/student/instance.properties文件
# 數(shù)據(jù)庫配置 canal.instance.master.address=192.168.123.123:3306canal.instance.dbUsername=canal canal.instance.dbPassword=canal# 是否開啟密碼加密解析,使用druid加密,若是密碼屬于加密的,可以開啟,并修改canal.instance.pwdPublicKey canal.instance.enableDruid=falsecanal.instance.filter.regex=dbname.tablename修改mq.yml
# kafka地址 servers: 192.168.1.1:9092,192.168.1.2:9092,192.168.1.3:9092 # 重試次數(shù) retries: 3# 隊(duì)列定義 canalDestinations:- canalDestination: studenttopic: dada-db-dadaabc-studentpartitionsNum: 3partitionHash:dadaabc.student: id- canalDestination: student_extendtopic: dada-db-dadaabc-student-extendpartitionsNum: 3partitionHash:dadaabc.student: id修改日志配置
修改日志路徑 logback.xml
略
啟動(dòng)
進(jìn)入bin目錄,執(zhí)行 startup.sh 即可
注意事項(xiàng)
1.如果使用阿里云RDS,由于18小時(shí)刪除機(jī)制,超過18小時(shí)恢復(fù)需要配置oss相關(guān)設(shè)置,參見: https://github.com/alibaba/canal/wiki/aliyun-RDS-QuickStart
2.分布式主備需要引用同一個(gè)zookeeper配置。
3.如果開啟了ROW模式binlog,但消息類型仍然是QUERY,參考下圖:
則需要確認(rèn)mysql設(shè)置:binlog-rows-query-log-events設(shè)置為OFF,這個(gè)問題查了好久。
轉(zhuǎn)載于:https://my.oschina.net/tree/blog/2354699
總結(jié)
以上是生活随笔為你收集整理的Binlog同步工具Canal部署使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springCloud分布式事务实战(三
- 下一篇: Python基础、条件语句和基本数据类型