mysql binlog row 解析_解析MYSQL BINLOG 二进制格式(5)--WRITE_ROW_EVENT

本文详细解析了MySQL 5.1.18及以后版本中,ROW模式下INSERT事件的WRITE_ROW_EVENT,包括其二进制格式的固定数据部分和可变数据部分,以及如何正确解析m_extra_row_data字段。作者通过阅读源码和实际测试,解释了字段个数、NULL值位图和真实数据的表示方法,并提供了个人开发的解析工具以辅助理解。
摘要由CSDN通过智能技术生成

原创:转载请说明出处谢谢!

上接

http://blog.itpub.net/7728585/viewspace-2133188/ 解析MYSQL BINLOG 二进制格式(1)--准备工作

http://blog.itpub.net/7728585/viewspace-2133189/ 解析MYSQL BINLOG 二进制格式(2)--FORMAT_DESCRIPTION_EVENT

http://blog.itpub.net/7728585/viewspace-2133321/ 解析MYSQL BINLOG 二进制格式(3)--QUERY_EVENT

http://blog.itpub.net/7728585/viewspace-2133429/ 解析MYSQL BINLOG 二进制格式(4)--TABLE_MAP_EVENT

class:Write_rows_log_event

event:WRITE_ROW_EVENT

event_code:30

自从5.1.18开始,row模式下的insert的event,为什么要叫write不叫insert

呢无赖...

这部分在internals文档中有点小的问题,我也是看了源码的描述才找到,

在文档中也写到[TODO:following needs verification;it's guesswork]

就是fixed data中有2 bytes的m_extra_row_data其值当前为

uint16 vhlen= 2;

uint16 vhpayloadlen= 0;

下面有部分源码截取。如果不知道这两个字节读取就会有问题。至少5.6,5.7都有的

老版本我也没有验证。

--fixed data  10字节(5.6,5.7中描述为 ROWS_HEADER_LEN_V2)

6 bytes 表ID

2 bytes 保留

2 bytes 文档中并没有描述

源码中描述为:

uchar    *m_extra_row_data;   /* Pointer to extra row data if any */

/* If non null, first byte is length */

源码中是这样写入的:

if (likely(!log_bin_use_v1_row_events))

{

/*

v2 event, with variable header portion.

Determine length of variable header payload

*/

uint16 vhlen= 2;

uint16 vhpayloadlen= 0;

uint16 extra_data_len= 0;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值