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 工做原理(摘自官網):

原理描述:
node

  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數據表配置說明:


參考資料:mysql

相關文章
相關標籤/搜索