1 需求
- 在同一台服務器同一MySQL實例中的source庫和target庫都存在student表。如果source庫中該表發生增刪改操作時,也需要體現到target庫的student表中;
2 解決方案
2.1 方案一:使用Shell腳本實現
- 由於自己缺少使用Shell編程的經驗,此路暫時不通;
- shell腳本實現Mysql主從數據庫
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 工作原理(摘自官網):
原理描述:
- 基於Canal開源產品,獲取數據庫增量日志數據;
- 典型管理系統架構,manager(web管理)+node(工作節點)
a. manager運行時推送同步配置到node節點;
b. node 節點將同步狀態反饋到manager上;- 基於zookeeper,解決分布式狀態調度,允許多node節點之間協同工作;
2.3.2 環境准備
- MySQL 5.7.24
- JDK 1.8
- otter-manager-4.2.17
- otter-node-4.2.17
- zookeeper-3.4.10
- Aria2-1.34.0
2.3.3 環境搭建及參數配置
- otter 配置單向同步步驟:
- MySQL 開啟binlog;
- 配置zookeeper參數;
- 配置manager參數;
- 配置node參數;
- 參考鏈接:
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
,如果設置成功,會有如下輸出:
- 通過MySQL客戶端:
3.2 初始化Otter系統表
3.3 manager數據表配置說明:
參考資料: