Binlog同步工具Canal部署使用

Canal介紹

早期,阿里巴巴 B2B 公司由於存在杭州和美國雙機房部署,存在跨機房同步的業務需求。不過早期的數據庫同步業務,主要是基於 trigger 的方式獲取增量變動,不過從 2010 年開始,阿里系公司開始逐步的嘗試基於數據庫的日誌解析,獲取增量變動進行同步,由此衍生出了增量訂閱 & 消費的業務,今後開啓了一段新紀元。mysql

ps. 目前內部版本已經支持 mysql 和 oracle 部分版本的日誌解析,當前的 canal 開源版本支持 5.7 及如下的版本 (阿里內部 mysql 5.7.13, 5.6.10, mysql 5.5.18 和 5.1.40/48)git

基於日誌增量訂閱 & 消費支持的業務:github

  • 數據庫鏡像
  • 數據庫實時備份
  • 多級索引 (賣家和買家各自分庫索引)
  • search build
  • 業務 cache 刷新
  • 價格變化等重要業務消息

前期準備

  • mysql的binlog模式須要是ROW,查看binlog格式命令:show variables like 'binlog_format';
  • 訂閱binlog帳號須要開啓下面3個權限:SELECT, REPLICATION SLAVE, REPLICATION CLIENT,查看權限命令:show grants for 'canal'

Canal部署

項目地址:https://github.com/alibaba/canal ,目前版本爲 1.1.1。spring

修改配置文件conf/canal.properties

下載解壓到部署目錄,相關配置更改: 修改配置文件 conf/canal.propertiessql

# zk的配置地址
canal.zkServers=192.168.123.123:2181
#關閉netty
canal.withoutNetty = true
# tcp, kafka, RocketMQ
canal.serverMode = kafka
#須要同步的表名
canal.destinations=student,student_extend

canal.instance.global.spring.xml = classpath:spring/default-instance.xml

根據destinations定義,在conf下建立對應目錄配置

參照 conf/example/目錄複製出 conf/student/ ,每一個destinations定義的表對應一個目錄 修改 conf/student/instance.properties文件數據庫

# 數據庫配置
canal.instance.master.address=192.168.123.123:3306

canal.instance.dbUsername=canal
canal.instance.dbPassword=canal

# 是否開啓密碼加密解析,使用druid加密,如果密碼屬於加密的,能夠開啓,並修改canal.instance.pwdPublicKey
canal.instance.enableDruid=false

canal.instance.filter.regex=dbname.tablename

修改mq.yml

# kafka地址
servers: 192.168.1.1:9092,192.168.1.2:9092,192.168.1.3:9092
# 重試次數
retries: 3

# 隊列定義
canalDestinations:
  - canalDestination: student
    topic: dada-db-dadaabc-student
    partitionsNum: 3
    partitionHash:
      dadaabc.student: id
  - canalDestination: student_extend
    topic: dada-db-dadaabc-student-extend
    partitionsNum: 3
    partitionHash:
      dadaabc.student: id

修改日誌配置

修改日誌路徑 logback.xmlbash

oracle

啓動

進入bin目錄,執行 startup.sh 便可tcp

注意事項

1.若是使用阿里雲RDS,因爲18小時刪除機制,超過18小時恢復須要配置oss相關設置,參見: https://github.com/alibaba/canal/wiki/aliyun-RDS-QuickStart分佈式

2.分佈式主備須要引用同一個zookeeper配置。

3.若是開啓了ROW模式binlog,但消息類型仍然是QUERY,參考下圖:

enter description here

則須要確認mysql設置:binlog-rows-query-log-events設置爲OFF,這個問題查了很久。

相關文章
相關標籤/搜索