ubuntun系统mysql数据库同步_Canal 实现 Mysql数据库实时数据同步
簡介
1.1 canal介紹
? Canal是一個基于MySQL二進制日志的高性能數(shù)據(jù)同步系統(tǒng)。Canal廣泛用于阿里巴巴集團(包括https://www.taobao.com),以提供可靠的低延遲增量數(shù)據(jù)管道,github地址:https://github.com/alibaba/canal
Canal Server能夠解析MySQL binlog并訂閱數(shù)據(jù)更改,而Canal Client可以實現(xiàn)將更改廣播到任何地方,例如數(shù)據(jù)庫和Apache Kafka。
它具有以下功能:
- 支持所有平臺。
- 支持由Prometheus提供支持的細粒度系統(tǒng)監(jiān)控。
- 支持通過不同方式解析和訂閱MySQL binlog,例如通過GTID。
- 支持高性能,實時數(shù)據(jù)同步。(詳見Performance)
- Canal Server和Canal Client都支持HA / Scalability,由Apache ZooKeeper提供支持
- Docker支持。
缺點:
不支持全量更新,只支持增量更新。
完整wiki地址:https://github.com/alibaba/canal/wiki
1.2 運作原理
原理很簡單:
如圖所示:
準備工作
2.1 下載解壓canal-server
? 通過 github 下載 canal-server release 版本(本次安裝文檔使用v1.1.4)
root@locahost:/# wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz? 解壓
tar -zxvf canal.deployer-1.1.4.tar.gz2.2 下載解壓 canal-adapter
? 通過 github 下載 canal-adapter release 版本(本次安裝文檔使用v1.1.4)
root@locahost:/# wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.adapter-1.1.4.tar.gz? 解壓
tar -zxvf canal.adapter-1.1.4.tar.gz配置 canal-server
3.1 canal-server 配置
? 解壓之后進入 conf文件夾中,修改 canal.properties 根據(jù)實際需要來修改(如果不使用kafka或MQ 默認tcp即可)
canal.destinations = prod # 指定instance的名字多個使用逗號分隔? 保存之后在conf目錄創(chuàng)建 prod 文件夾并將 example文件夾中的 nstance.properties copy 到and_prod中
mkdir ant_prod #創(chuàng)建文件夾 cp example/nstance.properties prod/ # copy 文件? 修改 nstance.properties 配置如下:
canal.instance.master.address=127.0.0.1:3306 # 源Mysql地址 canal.instance.dbUsername=canal # 源Mysql賬號 canal.instance.dbPassword=canal # 源Mysql密碼 canal.instance.connectionCharset=UTF-8 # 與源數(shù)據(jù)庫編碼格式一致 canal.instance.defaultDatabaseName=test_database # 默認監(jiān)聽源數(shù)據(jù)庫3.2 canal-server 啟動
? 進入 canal-server bin 目錄 啟動
cd canal-server/bin # 進入目錄 ./startup.sh & # 后臺啟動? 查看日志,是否啟動成功
cd canal-server/logs/ant_prod #進入日志目錄? 啟動成功:
2020-06-09 17:13:04.956 [main] WARN o.s.beans.GenericTypeAwarePropertyDescriptor - Invalid JavaBean property 'connectionCharset' being accessed! Ambiguous write methods found next to actually used [public void com.alibaba.otter.canal.parse.inbound.mysql.AbstractMysqlEventParser.setConnectionCharset(java.nio.charset.Charset)]: [public void com.alibaba.otter.canal.parse.inbound.mysql.AbstractMysqlEventParser.setConnectionCharset(java.lang.String)] 2020-06-09 17:13:04.990 [main] INFO c.a.o.c.i.spring.support.PropertyPlaceholderConfigurer - Loading properties file from class path resource [canal.properties] 2020-06-09 17:13:04.990 [main] INFO c.a.o.c.i.spring.support.PropertyPlaceholderConfigurer - Loading properties file from class path resource [ant_prod/instance.properties] 2020-06-09 17:13:05.305 [main] INFO c.a.otter.canal.instance.spring.CanalInstanceWithSpring - start CannalInstance for 1-ant_prod 2020-06-09 17:13:05.311 [main] WARN c.a.o.canal.parse.inbound.mysql.dbsync.LogEventConvert - --> init table filter : ^.*..*$ 2020-06-09 17:13:05.311 [main] WARN c.a.o.canal.parse.inbound.mysql.dbsync.LogEventConvert - --> init table black filter : 2020-06-09 17:13:05.315 [main] INFO c.a.otter.canal.instance.core.AbstractCanalInstance - start successful.... 2020-06-09 17:13:05.422 [destination = ant_prod , address = rm-wz99s5v03gso12521.mysql.rds.aliyuncs.com/192.xxxxxx:3306 , EventParser] WARN c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - ---> begin to find start position, it will be long time for reset or first position 2020-06-09 17:13:05.423 [destination = ant_prod , address = rm-wz99s5v03gso12521.mysql.rds.aliyuncs.com/192.xxxxxx:3306 , EventParser] WARN c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - prepare to find start position just show master status 2020-06-09 17:13:06.483 [destination = ant_prod , address = rm-wz99s5v03gso12521.mysql.rds.aliyuncs.com/192.xxxxxx:3306 , EventParser] WARN c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - ---> find start position successfully, EntryPosition[included=false,journalName=mysql-bin.000234,position=6676924,serverId=184376678,gtid=,timestamp=1591693973000] cost : 1051ms , the next step is binlog dump配置 canal-adapter
4.1 canal-adapter 配置
? 由于Mysql 是8.0 這里需要下載 mysql-connector-java-8.0.20.jar,并將其放入lib中
cp mysql-connector-java-8.0.20.jar /canal-adapter/lib/? 解壓之后進入 conf文件夾中,修改 application.yml
server:port: 8089 spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8default-property-inclusion: non_null canal.conf:mode: tcp # kafka rocketMQcanalServerHost: 127.0.0.1:11111batchSize: 500syncBatchSize: 1000retries: 0timeout:accessKey:secretKey: # 源Mysql 地址賬號密碼等srcDataSources: defaultDS:url: jdbc:mysql://localhost:3306/test_database?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghaiusername: canalpassword: canal # 需要實時同步數(shù)據(jù)庫,如果多個實例進行區(qū)分即可canalAdapters:- instance: prod # canal instance,在canal-server中指定instance的名稱groups:- groupId: g1outerAdapters:- name: rdbkey: mysql1 # 唯一標示properties:jdbc.driverClassName: com.mysql.jdbc.Driverjdbc.url: jdbc:mysql://localhost:3306/test_database_01?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghaijdbc.username: canaljdbc.password: canal? 編輯rdb目錄下面表的映射文件,數(shù)據(jù)庫/表 (多個表創(chuàng)建多個映射文件,文件名對應表名)以此類推
dataSourceKey: defaultDS destination: prod outerAdapterKey: mysql1 concurrent: true dbMapping:database: test_database_01table: testtargetTable: test_database_01.testtargetPk:id: idmapAll: true4.1 canal-adapter 啟動
? 進入 canal-adapter/bin 目錄 啟動
cd canal-adapter/bin # 進入目錄 ./startup.sh & # 后臺啟動? 查看日志,是否啟動成功
cd canal-adapter/adapter/logs/ #進入日志目錄 tail -f adapter.log # 查看日志是否啟動成功測試數(shù)據(jù)庫同步
更新/刪除/批量插入/批量更新/批量刪除原文鏈接:https://www.jianshu.com/p/d4c177f0d831 作者:qingwenLi
總結
以上是生活随笔為你收集整理的ubuntun系统mysql数据库同步_Canal 实现 Mysql数据库实时数据同步的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数字图像matlab心得,Matlab数
- 下一篇: 京东广告联盟android,京东APP联