MySQL-NonMySQL同步工具源碼解讀——發起第一個同步

發起同步命令格式:

1              [12] COM_BINLOG_DUMP
4              binlog-pos
2              flags
4              server-id
string[EOF]    binlog-filename


而後註冊讀報文頭部操作(GET_NEXT_PACKET_HEADER),異步回調函數是Binlog_tcp_driver::handle_net_packet_header。最後開啓新的線程,線程體是Binlog_tcp_driver::Binlog_tcp_event_loop。線程體主要就一個功能,調用io_service.run()。這樣,異步讀取報文過程就打開了。

每個事件,都由一個00字節開頭,其後跟長度+marker+公共事件頭+事件體。公共事件頭格式如下,事件體格式事件類型而不同。

4              timestamp
1              event type
4              server-id
4              event-size
   if binlog-version > 1:
4              log pos
2              flags

   整個的消息體大小應該是event_length-19,程序中,19=HEADER_SIZE(20)-1.


成功解析報文完成,放入隊列中等待客戶程序取出這個事件。之後開始異步讀取下一個事件的頭部。需要注意的是,客戶程序需要完成事件數據結構在內存中的銷燬。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章