亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用Canal實(shí)現(xiàn)MySQL數(shù)據(jù)同步的完整指南

 更新時(shí)間:2025年06月16日 09:41:48   作者:酷愛碼  
Canal 是阿里巴巴開源的一個(gè)基于 MySQL 數(shù)據(jù)庫增量日志(binlog)解析的組件,本文主要介紹了如何使用Canal實(shí)現(xiàn)MySQL數(shù)據(jù)同步功能,希望對(duì)大家有所幫助

一、Canal 簡(jiǎn)介與核心原理

Canal 是阿里巴巴開源的一個(gè)基于 MySQL 數(shù)據(jù)庫增量日志(binlog)解析的組件,通過模擬 MySQL 從庫的方式,實(shí)時(shí)捕獲主庫的數(shù)據(jù)變更(如 INSERT、UPDATE、DELETE 操作),并將這些變更以事件的形式推送給下游系統(tǒng)。其核心原理如下:

  • 模擬 MySQL 從庫:Canal 偽裝成 MySQL 的從庫,通過 MySQL 的 dump 協(xié)議向主庫請(qǐng)求 binlog 日志。
  • 解析 binlog 日志:將 MySQL 主庫的 binlog 日志解析為結(jié)構(gòu)化的數(shù)據(jù)(如 JSON 格式),便于下游系統(tǒng)消費(fèi)。
  • 事件分發(fā)與存儲(chǔ):解析后的事件通過 EventSink 模塊進(jìn)行過濾、分發(fā)、歸并等操作,并存儲(chǔ)到內(nèi)存隊(duì)列(環(huán)形隊(duì)列)中。
  • 下游系統(tǒng)對(duì)接:支持將增量數(shù)據(jù)同步到 Kafka、RabbitMQ、Elasticsearch 等系統(tǒng),或通過適配器寫入其他數(shù)據(jù)庫。

Canal 的優(yōu)勢(shì)在于其低延遲、高可靠性和靈活的擴(kuò)展性,廣泛應(yīng)用于數(shù)據(jù)同步、緩存更新、數(shù)據(jù)索引構(gòu)建等場(chǎng)景。

二、環(huán)境準(zhǔn)備與依賴

1. 系統(tǒng)要求

操作系統(tǒng):Linux(如 Ubuntu 20.04)、Windows 或 macOS。

JDK:1.8 或以上版本。

MySQL:5.7 或 8.x。

Docker(可選):用于快速部署 Canal 服務(wù)。

2. 軟件下載

Canal:從 GitHub 下載最新版本(如 canal.deployer-1.1.7.tar.gz)。

MySQL:確保 MySQL 已安裝并開啟 binlog 功能。

三、MySQL 配置

1. 開啟 binlog

MySQL 默認(rèn)未開啟 binlog,需手動(dòng)配置:

[mysqld]
log-bin=mysql-bin          # 啟用 binlog
binlog-format=ROW          # 設(shè)置 binlog 格式為 ROW(記錄行級(jí)變更)
server-id=1                # 唯一服務(wù)器 ID(主庫和從庫需不同)

修改配置后重啟 MySQL 服務(wù):

# Linux 系統(tǒng)
systemctl restart mysql

# Windows 系統(tǒng)
net stop MySQL
net start MySQL

2. 創(chuàng)建同步用戶

為 Canal 創(chuàng)建專用用戶,并授予必要的權(quán)限:

CREATE USER 'canal'@'%' IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;

REPLICATION SLAVE:允許讀取 binlog。

REPLICATION CLIENT:允許查詢 binlog 狀態(tài)。

3. 驗(yàn)證 binlog 配置

登錄 MySQL 并檢查 binlog 狀態(tài):

SHOW VARIABLES LIKE 'log_bin';  -- 確保 log_bin 的值為 ON
SHOW MASTER STATUS;            -- 查看當(dāng)前 binlog 文件和位置

四、Canal 安裝與配置

1. 下載與解壓

從 GitHub 下載 Canal 并解壓:

wget https://github.com/alibaba/canal/releases/download/canal-1.1.7/canal.deployer-1.1.7.tar.gz
tar -zxvf canal.deployer-1.1.7.tar.gz -C /usr/local/canal

2. 配置 Canal 實(shí)例

進(jìn)入 Canal 配置目錄并修改實(shí)例配置文件:

cd /usr/local/canal/conf

修改 canal.properties

canal.destinations=example  # 實(shí)例名稱
canal.server.port=11111     # Canal 服務(wù)端口
canal.metrics.pull.port=11112

修改 example/instance.properties

canal.instance.master.address=127.0.0.1:3306  # MySQL 主庫地址
canal.instance.dbUsername=canal                 # 同步用戶
canal.instance.dbPassword=canal                 # 同步用戶密碼
canal.instance.connectionCharset=UTF-8
canal.instance.filter.regex=springboot_data\\..*  # 表過濾規(guī)則(匹配 springboot_data 庫下的所有表)

五、Docker 部署(可選)

如果希望通過 Docker 快速部署 Canal,可以創(chuàng)建自定義網(wǎng)絡(luò)并運(yùn)行容器:

# 創(chuàng)建網(wǎng)絡(luò)
docker network create canal-network

# 運(yùn)行 MySQL 容器(假設(shè)已存在 MySQL 容器)
docker network connect canal-network mysql

# 運(yùn)行 Canal 容器
docker run -d \
  --name canal \
  -p 11111:11111 \
  --network canal-network \
  -e canal.destinations=example \
  -e canal.instance.master.address=mysql:3306 \
  -e canal.instance.dbUsername=canal \
  -e canal.instance.dbPassword=canal \
  -e canal.instance.connectionCharset=UTF-8 \
  -e canal.instance.filter.regex=springboot_data\\..* \
  canal/canal-server:v1.1.7

六、啟動(dòng)與驗(yàn)證

1. 啟動(dòng) Canal 服務(wù)

cd /usr/local/canal/bin
./startup.sh

2. 檢查日志

查看 Canal 啟動(dòng)日志,確保無錯(cuò)誤:

tail -n 50 /usr/local/canal/logs/example/example.log

3. 測(cè)試數(shù)據(jù)同步

在 MySQL 中插入測(cè)試數(shù)據(jù):

USE springboot_data;
CREATE TABLE test_table (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(255)
);
INSERT INTO test_table (name) VALUES ('test1'), ('test2');

觀察 Canal 日志,確認(rèn)是否捕獲到數(shù)據(jù)變更事件:

[INFO] [main] c.a.o.canal.instance.core.AbstractCanalInstance - Start the canal instance.
[INFO] [main] c.a.o.canal.deployer.CanalLauncher - ## Start the canal server.
[INFO] [main] c.a.o.canal.deployer.CanalLauncher - ## The canal server is running now !!!

七、數(shù)據(jù)同步到下游系統(tǒng)

1. 同步到 Kafka/RabbitMQ

修改 application.yml(Canal Adapter 配置):

canal.conf:
  mode: tcp
  flatMessage: true
  zookeeperHosts: 
  syncBatchSize: 1000
  retries: -1
  timeout: 3000
  accessKey: 
  secretKey: 
  consumerProperties:
    canal.tcp.server.host: 127.0.0.1:11111
    canal.tcp.batch.size: 500
    canal.tcp.username: 
    canal.tcp.password: 

2. 同步到 Elasticsearch

配置 application.yml 并啟動(dòng) Canal Adapter:

cd /usr/local/canal/canal-adapter
bash bin/startup.sh

八、常見問題與解決方案

1. Canal 無法連接 MySQL

原因:MySQL 用戶權(quán)限不足或網(wǎng)絡(luò)不通。

解決:檢查 MySQL 用戶權(quán)限(REPLICATION SLAVE)和防火墻設(shè)置。

2. binlog 格式錯(cuò)誤

原因:MySQL 的 binlog-format 未設(shè)置為 ROW。

解決:修改 my.cnf 并重啟 MySQL。

3. Canal 啟動(dòng)失敗

原因:配置文件路徑錯(cuò)誤或依賴缺失。

解決:檢查 canal.properties 和 instance.properties 的配置,確保路徑正確。

4. 數(shù)據(jù)同步延遲

原因:MySQL 主庫壓力大或 Canal 解析性能不足。

解決:優(yōu)化 MySQL 索引,增加 Canal 實(shí)例數(shù)量。

九、總結(jié)

通過上述步驟,我們完成了從 MySQL 配置到 Canal 安裝、啟動(dòng)及數(shù)據(jù)同步的全流程。Canal 的核心價(jià)值在于其對(duì) MySQL binlog 的高效解析和靈活的數(shù)據(jù)分發(fā)能力,使其成為實(shí)時(shí)數(shù)據(jù)同步領(lǐng)域的首選工具。在實(shí)際應(yīng)用中,建議結(jié)合 Kafka、Elasticsearch 等技術(shù)棧,構(gòu)建高效、可靠的數(shù)據(jù)同步體系。

隨著業(yè)務(wù)規(guī)模的增長(zhǎng),Canal 還支持集群部署、動(dòng)態(tài)配置管理(通過 Zookeeper)等功能,進(jìn)一步提升系統(tǒng)的穩(wěn)定性和可擴(kuò)展性。掌握 Canal 的配置與優(yōu)化技巧,將為數(shù)據(jù)一致性保障和業(yè)務(wù)解耦提供強(qiáng)大支持。

到此這篇關(guān)于使用Canal實(shí)現(xiàn)MySQL數(shù)據(jù)同步的完整指南的文章就介紹到這了,更多相關(guān)Canal MySQL數(shù)據(jù)同步內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文詳解MySQL8.0的索引新特性

    一文詳解MySQL8.0的索引新特性

    MySQL中的索引可以為提高我們的查詢效率,相比較于低版本, MySQL 8.0中針對(duì)索引做了不少的優(yōu)化,本文主要給大家分享一些MySQL8.0索引的新特性,希望大家可以在日常的開發(fā)中根據(jù)實(shí)際場(chǎng)景用起來
    2023-07-07
  • MySQL按照漢字的拼音排序簡(jiǎn)單實(shí)例

    MySQL按照漢字的拼音排序簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)硪黄狹ySQL按照漢字的拼音排序簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • Mysql實(shí)現(xiàn)定時(shí)清空一張表的舊數(shù)據(jù)并保留幾條數(shù)據(jù)(推薦)

    Mysql實(shí)現(xiàn)定時(shí)清空一張表的舊數(shù)據(jù)并保留幾條數(shù)據(jù)(推薦)

    這篇文章主要介紹了Mysql實(shí)現(xiàn)定時(shí)清空一張表的舊數(shù)據(jù)并保留幾條數(shù)據(jù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 關(guān)于Mysql提高SQL性能的技巧(必看)

    關(guān)于Mysql提高SQL性能的技巧(必看)

    這篇文章主要介紹了關(guān)于Mysql提高SQL性能的技巧(必看),SQL查詢的性能直接影響系統(tǒng)的響應(yīng)時(shí)間,優(yōu)化SQL可以減少查詢的執(zhí)行時(shí)間,提高系統(tǒng)的響應(yīng)速度,提升用戶體驗(yàn),本文就來詳細(xì)講解一下如何優(yōu)化SQL性能
    2023-07-07
  • mysql8.0.20下載安裝及遇到的問題(圖文詳解)

    mysql8.0.20下載安裝及遇到的問題(圖文詳解)

    這篇文章主要介紹了mysql8.0.20下載安裝及遇到的問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Mysql中深分頁的五種常用方法整理

    Mysql中深分頁的五種常用方法整理

    在數(shù)據(jù)量非常大的情況下,深分頁查詢則變得很常見,這篇文章為大家整理了5個(gè)常用的方法,文中的示例代碼講解詳細(xì),大家可以根據(jù)自己的需求進(jìn)行選擇
    2025-03-03
  • MySQL使用C語言連接完整代碼樣例

    MySQL使用C語言連接完整代碼樣例

    這篇文章主要介紹了如何使用C語言連接MySQL數(shù)據(jù)庫,包括安裝MySQL連接庫、初始化MySQL、連接數(shù)據(jù)庫、執(zhí)行SQL查詢、獲取查詢結(jié)果、關(guān)閉連接等步驟,并提供了完整的代碼示例,需要的朋友可以參考下
    2025-03-03
  • MySql如何查看索引并實(shí)現(xiàn)優(yōu)化

    MySql如何查看索引并實(shí)現(xiàn)優(yōu)化

    這篇文章主要介紹了MySql如何查看索引并實(shí)現(xiàn)優(yōu)化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • mysql 5.7.15 安裝配置方法圖文教程(windows)

    mysql 5.7.15 安裝配置方法圖文教程(windows)

    這篇文章主要為大家詳細(xì)介紹了mysql 5.7.15 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 升級(jí)到mysql-connector-java8.0.27的注意事項(xiàng)

    升級(jí)到mysql-connector-java8.0.27的注意事項(xiàng)

    這篇文章主要介紹了升級(jí)到mysql-connector-java8.0.27的注意事項(xiàng),凡是升級(jí)總會(huì)碰到點(diǎn)問題,換了連接器后部署果然報(bào)錯(cuò)了,下面小編給大家分享解決方法,需要的朋友可以參考下
    2021-12-12

最新評(píng)論