久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Canal中怎么實現MySQL數據庫實時數據同步

155次閱讀
沒有評論

共計 5637 個字符,預計需要花費 15 分鐘才能閱讀完成。

這期內容當中丸趣 TV 小編將會給大家帶來有關 Canal 中怎么實現 MySQL 數據庫實時數據同步,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

1.1 canal 介紹

Canal 是一個基于 MySQL 二進制日志的高性能數據同步系統。Canal 廣泛用于阿里巴巴集團(包括 https://www.taobao.com),以提供可靠的低延遲增量數據管道,github 地址:https://github.com/alibaba/canal

Canal Server 能夠解析 MySQL binlog 并訂閱數據更改,而 Canal Client 可以實現將更改廣播到任何地方,例如數據庫和 Apache Kafka。

它具有以下功能:

  支持所有平臺。

  支持由 Prometheus 提供支持的細粒度系統監控。

  支持通過不同方式解析和訂閱 MySQL binlog,例如通過 GTID。

  支持高性能,實時數據同步。(詳見 Performance)

 Canal Server 和 Canal Client 都支持 HA / Scalability,由 Apache ZooKeeper 提供支持

 Docker 支持。

缺點:

不支持全量更新,只支持增量更新。

完整 wiki 地址:https://github.com/alibaba/canal/wiki

1.2 運作原理

原理很簡單:

鴻蒙官方戰略合作共建——HarmonyOS 技術社區

 Canal 模擬 MySQL 的 slave 的交互協議,偽裝成 mysql slave,并將轉發協議發送到 MySQL Master 服務器。

 MySQL Master 接收到轉儲請求并開始將二進制日志推送到 slave(即 canal)。

 Canal 將二進制日志對象解析為自己的數據類型(原始字節流)

如圖所示:

準備工作

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.gz

2.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 根據實際需要來修改(如果不使用 kafka 或 MQ 默認 tcp 即可)

canal.destinations = prod #  指定 instance 的名字多個使用逗號分隔 

保存之后在 conf 目錄創建 prod 文件夾并將 example 文件夾中的 nstance.properties copy 到 and_prod 中

mkdir ant_prod # 創建文件夾  cp example/nstance.properties prod/ # copy  文件 

修改 nstance.properties 配置如下:

canal.instance.master.address=127.0.0.1:3306 #  源 Mysql 地址  canalcanal.instance.dbUsername=canal #  源 Mysql 賬號  canalcanal.instance.dbPassword=canal #  源 Mysql 密碼  canal.instance.connectionCharset=UTF-8 #  與源數據庫編碼格式一致  canal.instance.defaultDatabaseName=test_database #  默認監聽源數據庫 

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:ss time-zone: GMT+8 default-property-inclusion: non_null canal.conf: mode: tcp # kafka rocketMQ canalServerHost: 127.0.0.1:11111 batchSize: 500 syncBatchSize: 1000 retries: 0 timeout: accessKey: secretKey: #  源 Mysql  地址賬號密碼等  srcDataSources: defaultDS: url: jdbc:mysql://localhost:3306/test_database?useUnicode=true characterEncoding=utf8 serverTimezone=Asia/Shanghai username: canal password: canal #  需要實時同步數據庫,如果多個實例進行區分即可  canalAdapters: - instance: prod # canal instance,在 canal-server 中指定 instance 的名稱  groups: - groupId: g1 outerAdapters: - name: rdb key: mysql1 #  唯一標示  properties: jdbc.driverClassName: com.mysql.jdbc.Driver jdbc.url: jdbc:mysql://localhost:3306/test_database_01?useUnicode=true characterEncoding=utf8 serverTimezone=Asia/Shanghai jdbc.username: canal jdbc.password: canal

編輯 rdb 目錄下面表的映射文件,數據庫 / 表(多個表創建多個映射文件,文件名對應表名)以此類推

dataSourceKey: defaultDS destination: prod outerAdapterKey: mysql1 concurrent: true dbMapping: database: test_database_01 table: test targetTable: test_database_01.test targetPk: id: id mapAll: true

4.1 canal-adapter 啟動

進入 canal-adapter/bin 目錄 啟動

cd canal-adapter/bin #  進入目錄  ./startup.sh   #  后臺啟動 

查看日志,是否啟動成功

cd canal-adapter/adapter/logs/ # 進入日志目錄  tail -f adapter.log #  查看日志是否啟動成功 

測試數據庫同步

 更新 / 刪除 / 批量插入 / 批量更新 / 批量刪除 

上述就是丸趣 TV 小編為大家分享的 Canal 中怎么實現 MySQL 數據庫實時數據同步了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-03發表,共計5637字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 甘肃省| 龙泉市| 唐河县| 新蔡县| 大厂| 綦江县| 七台河市| 徐闻县| 临城县| 棋牌| 噶尔县| 台南县| 枣强县| 襄汾县| 布尔津县| 秦安县| 西乌珠穆沁旗| 溧阳市| 凯里市| 高尔夫| 玉树县| 彭州市| 西和县| 中卫市| 朝阳县| 江都市| 岳普湖县| 玉环县| 澄江县| 晋城| 铁岭市| 青海省| 五大连池市| 壶关县| 宝清县| 揭阳市| 青龙| 镇原县| 宝清县| 嵊泗县| 汾西县|