Mysql Binlog Dump原理


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還是稍顯麻煩的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM