mysqlbinlog工作流程

mysqlbinlog主要流程:

main函数:
    dump_multiple_logs: 处理所有的binlog文件
         注意PRINT_EVENT_INFO print_event_info; 该变量描述了mysqlbinlog打印event的方法,ev->print函数的参数
         循环调用dump_single_log函数:注意最后一个binlog文件的strop_postition的结束位置
              dump_local_log_entries:解析一个本地binlog文件
                   check_header: 读取binlog文件的第一个事件Format_description_log_event,该事件的信息对整个binlog文件的解析有用
                       文件的前4个字节数值固定,校验文件是否正确
                       调用Log_event::read_log_event函数(见后文分析)读取FORMAT_DESCRIPTION_EVENT事件
                       根据需要打印FORMAT_DESCRIPTION_EVENT事件的内容
                       
                   while循环:
                        调用Log_event::read_log_event函数(见后文分析)读取事件
                        process_event:对每个函数进行处理
                           1.处理FORMAT_DESCRIPTION_EVENT事件的时候会更新全局变量glob_description_event,该变量会影响其他事件的解析处。
                           2.调用print函数打印事件内容
                           3.解析事件,根据内容修改相关的变量(eg:XID_EVENT)
              dump_remote_log_entries:解析远程的一个binlog文件,处理流程大体上一致.区别:创建一个连接,通过COM_BINLOG_DUMP或者COM_BINLOG_DUMP_GTID读取binlog内容。

    Log_event* Log_event::read_log_event(IO_CACHE* file, const Format_description_log_event *description_event, my_bool crc_check): 
                           1.确定event_header的长度(最多读取19个字节,旧的版本是13个字节)
                           2.获取event的长度,根据event的长度读取event的内容
                           3.调用Log_event* Log_event::read_log_event(const char* buf, uint event_len, const char **error, const Format_description_log_event *description_event, my_bool crc_check)
                                          :该函数功能:1.校验event的长度   
                                                        2.获取checksum的算法(如果是FORMAT_DESCRIPTION_EVENT事件)  
                                                        3.校验checksum
                                                         4.函数根据event的类型调用不同的event构造函数创建对应event。注意每个event都有一个构造函数根据buf中事件的内容创建event

                        

 

你可能感兴趣的:(mysql源码,mysql数据库,mysqlbinlog,binlog解析)