MySQL 同一實例不同庫之間表同步(Otter 應用)


1 需求

  • 在同一台服務器同一MySQL實例中的source庫和target庫都存在student表。如果source庫中該表發生增刪改操作時,也需要體現到target庫的student表中;

2 解決方案

2.1 方案一:使用Shell腳本實現

2.2 方案二:DataX

  • 官方介紹:
    • DataX 是阿里巴巴集團內被廣泛使用的離線數據同步工具/平台,實現包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各種異構數據源之間高效的數據同步功能。
  • 沒有采納此方案的原因:
    • DataX 本身占用空間太大,771M;
    • DataX 中使用到了Python,這門語言自己暫時也是一知半解;
    • DataX 適用於不同數據源的數據同步,而這個需求中的數據源均為MySQL,故放棄此方案;

2.3 方案三: Otter 增量同步

  • 官方介紹:
    • 純Java開發;
    • 基於數據庫增量日志解析,准實時同步到本機房或異地機房的mysql/oracle數據庫. 一個分布式數據庫同步系統;

2.3.1 工作原理(摘自官網):

原理描述:

  1. 基於Canal開源產品,獲取數據庫增量日志數據;
  2. 典型管理系統架構,manager(web管理)+node(工作節點)

    a. manager運行時推送同步配置到node節點;

    b. node 節點將同步狀態反饋到manager上;
  3. 基於zookeeper,解決分布式狀態調度,允許多node節點之間協同工作;

2.3.2 環境准備

2.3.3 環境搭建及參數配置

3. Otter搭建過程中遇到的問題總結

3.1 MySQL 開啟binlog

  • Windows 系統:
    • my.ini中添加如下語句,注意my.ini保存時,編碼為:GB2312
# Binary Logging log-bin=mysql-bin binlog-format=ROW #Server ID 不能重復 #注意:在 MySQL 5.7.3 及以后版本,如果沒有設置server-id, 那么設置binlog后無法開啟MySQL服務. server-id=201609 
  • Linux系統:
    • 查看是否有設置使用指定目錄的my.cnf文件:ps aux|grep mysql|grep 'my.cnf';如果沒有輸出,表示沒有設置;
    • 查看mysql默認讀取my.cnf的目錄:mysql --help|grep 'my.cnf';
# Binary Logging log-bin=/var/lib/mysql/mysql-bin # 此處為絕對路徑 binlog-format=ROW #Server ID 不能重復 #注意:在 MySQL 5.7.3 及以后版本,如果沒有設置server-id, 那么設置binlog后無法開啟MySQL服務. server-id=201609 
  • 查看是否設置成功:
    • 通過MySQL客戶端:SHOW MASTER STATUS,如果設置成功,會有如下輸出:

3.2 初始化Otter系統表

3.3 manager數據表配置說明:


參考資料:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM