mysql binlog日志(一)概述

mysql binlog是mysql主备复制的基础。笔者根据自己的理解整理下这部分的内容(主要针对V4版本的binlog),希望能够对想深入学习和研究这部分内容的人提供帮助。在binlog相关内容讲解完毕后,会分享一个解析binlog文件的程序,有兴趣的同学参考该程序进入更深入的研究。

mysql支持多种binlog event。参考binlog_event.h::Log_event_type数据结构,常见的binlog evevnt有以下几种,后续会详细讲解这些event内容

FORMAT_DESCRIPTION_EVENT

QUERY_EVENT:

STOP_EVENT:

ROTATE_EVENT:

TABLE_MAP_EVENT:

WRITE_ROWS_EVENT:

UPDATE_ROWS_EVENT:

DELETE_ROWS_EVENT:

GTID_LOG_EVENT

 

每个binlog由4部分组成:

   header: 固定长度19字节。所有event的格式都是相同。主要内容如下:

               内容           offset:length
         // timestamp         0:4             
         // type_code         4:1  
         // server_id           5:4
         // event_length     9:4
         // next_position    13:4
         // flags                  17:2  

   post-header: 每种event的长度和格式固定。根据format_description_event获取每种类型的长度。

   pay_load: event的实际内容,同一种的event的内容和长度也可能不同。需要根据实际内容进行解析。

   footer: 如果该binlog支持checksum(根据format_description_event确定是否支持,目前只支持CRC32校验),4字节的checksum值。

对应的主要数据结构:

以Query_log_event为例,主要继承2个类,Binary_log_event和Log_event

            Binary_log_event
                   ^
                   |
                   |
            Query_event  Log_event
                   \                /
  <<virtual>>\             /
                     \         /
                Query_log_event

 

Binary_log_event:

      Log_event_header m_header;  对应binlog header部分
      Log_event_footer m_footer;  对应binlog footer部分

 

Query_event: 事件解析后的各个变量

Log_event:  对event可以执行的一些操作函数,主要有:

          read_log_event:从binlog或者relay log读取event

                                      根据event的type调用特定事件的构造函数:通过传送buf和event _len构造对应的事件

           apply_event:执行event。主备复制的时候主要调用read_log_event 和 apply_event 执行复制流程

           print:打印binlog事件。mysqlbinlog等工具会用到

 

 

其他类型的事件都类似.  对外接口类为类型_log_event,  该类派生自2个类:一个表示event的组成; 另一个表示该event支持的操作

 

 

    

 

 

         

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值