1 需求
- 在同一臺服務器同一MySQL實例中的source庫和target庫都存在student表。若是source庫中該表發生增刪改操做時,也須要體現到target庫的student表中;
![](http://static.javashuo.com/static/loading.gif)
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 工做原理(摘自官網):
![](http://static.javashuo.com/static/loading.gif)
原理描述:
node
- 基於Canal開源產品,獲取數據庫增量日誌數據;
- 典型管理系統架構,manager(web管理)+node(工做節點)
a. manager運行時推送同步配置到node節點;
b. node 節點將同步狀態反饋到manager上;
- 基於zookeeper,解決分佈式狀態調度,容許多node節點之間協同工做;
2.3.2 環境準備
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
,若是設置成功,會有以下輸出:
![](http://static.javashuo.com/static/loading.gif)
3.2 初始化Otter系統表
![](http://static.javashuo.com/static/loading.gif)
3.3 manager數據表配置說明:
![](http://static.javashuo.com/static/loading.gif)
參考資料:mysql