Register
首先,我們需要偽造一個slave,向master注冊,這樣master才會發送binlog event。注冊很簡單,就是向master發送COM_REGISTER_SLAVE命令,帶上slave相關信息。這里需要注意,因為在MySQL的replication topology中,都需要使用一個唯一的server id來區別標示不同的server實例,所以這里我們偽造的slave也需要一個唯一的server id。
Binlog dump
最開始的時候,MySQL只支持一種binlog dump方式,也就是指定binlog filename + position,向master發送COM_BINLOG_DUMP命令。在發送dump命令的時候,我們可以指定flag為BINLOG_DUMP_NON_BLOCK,這樣master在沒有可發送的binlog event之后,就會返回一個EOF package。不過通常對於slave來說,一直把連接掛着可能更好,這樣能更及時收到新產生的binlog event。
在MySQL 5.6之后,支持了另一種dump方式,也就是GTID dump,通過發送COM_BINLOG_DUMP_GTID命令實現,需要帶上的是相應的GTID信息,不過筆者覺得,如果只是單純的實現一個能同步binlog的工具,使用最原始的binlog filename + position就夠了,畢竟我們不是MySQL,解析GTID還是稍顯麻煩的。