MySQL-NonMySQL同步工具源码解读——发起第一个同步

2060阅读 0评论2014-01-21 2919310683
分类:Mysql/postgreSQL

发起同步命令格式:    
1
2
3
4
5
6
7
8
9
10
    
+---------------------------+
|   size(3B)              |
|   packet_no(1B)         |
+---------------------------+
|   COM_BINLOG_DUMP(1B)   |
|   binlog_offset(4B)     |
|   binlog_flags(2B)      |
|   server_id=1(4B)       |
|   binlog_filename         |
+---------------------------+

而后注册读报文头部操作(GET_NEXT_PACKET_HEADER),异步回调函数是Binlog_tcp_driver::handle_net_packet_header。最后开启新的线程,线程体是Binlog_tcp_driver::Binlog_tcp_event_loop。线程体主要就一个功能,调用io_service.run()。这样,异步读取报文过程就打开了。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
    
+-----------------------+
|   size(3B)          |
|   packet_no(1B)     |
+-----------------------+
|   marker(1B)        |
|   timestamp(4B)     |
|   typecode(1B)      |
|   server_id(4B)     |
|   event_length(4B)  |
|   next_postion(4B)  |
|   flags(2B)         |
+-----------------------+
|   Event_body          |
+-----------------------+

marker是不算在头部的event_length里面的,所以整个的消息体大小应该是event_length-HEADER_SIZE(20)+1.


成功解析报文完成,放入队列中等待客户程序取出这个事件。之后开始异步读取下一个事件的头部。需要注意的是,客户程序需要完成事件数据结构在内存中的销毁。
上一篇: RAC 归档目录不同的备份
下一篇:Nginx交互式管理脚本