mysql write rows_解析MYSQL BINLOG 二进制格式(5)--WRITE_ROW_EVENT

展开阅读全文

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

上接

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;

if (m_extra

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值