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.


成功解析报文完成,放入队列中等待客户程序取出这个事件。之后开始异步读取下一个事件的头部。需要注意的是,客户程序需要完成事件数据结构在内存中的销毁。

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