Open Replicator是一個用Java編寫的MySQL binlog分析程式。Open Replicator 首先連接配接到MySQL(就像一個普通的MySQL Slave一樣),然後接收和分析binlog,最終将分析得出的binlog events以回調的方式通知應用。Open Replicator可以被應用到MySQL資料變化的實時推送,多Master到單Slave的資料同步等多種應用場景。Open Replicator目前隻支援MySQL5.0及以上版本。
binlog事件分析結構圖

在閱讀下面的内容時,首先需要對binlog有一定的了解,可以 參考《MySQL Binlog解析》。
這裡通過open-replicator解析binlog日志事件(binlog-format = row)。binlog日志事件裡存在兩種操作:DDL和DML,當DDL時輸出一條sql,當DML時輸出相關行資訊。可以參考下面:
DDL(CREATE, ALTER, DROP, TRUNCATE,主要用在定義或改變表的結構):
DML(SELECT, UPDATE, INSERT, DELETE,對資料庫裡的資料進行操作):
相關的類檔案如下:
CDCEvent.java
open-replicator的解析主要是通過注冊Listener的形式實作的,整個過程最重要的步驟在下面:
InstanceListener.java
上面所涉及到的TableInfo .java如下:
接着需要有個地方儲存從TABLE_MAP_EVENT中提取到的資訊,TableInfoKeeper .java
正如上面InstanceListener中提到的,有些資訊需要直接從MySQL中讀取,比如資料庫表的列資訊,相關的類MysqlConnection如下:
上面代碼設計的附加類(BinlogInfo.java; BinlogMasterStatus.java; ColumnInfo.java)
最後還要有個地方存儲解析之後的事件資訊,這裡簡要設計下,采用一個ConcurrentLinkedDeque好了(CDCEventManager.java)
所有的準備工作都完成了,下面可以解析binlog日志了:
時間運作舊了會遇到這樣一個問題:
初步解決方案(extends OpenReplicator然後添加重試機制):
最後隻需将OpenReplicatorTest.java中的OpenReplicator or = new OpenReplicator ();改為OpenReplicator or = new OpenReplicatorPlus ();即可。
大功告成~~
參考資料