mysql hex2bin_MySQL Binlog解析(2)

一、TABLE_MAP_EVENT

Used for row-based binary logging beginning with MySQL 5.1.5.The TABLE_MAP_EVENT defines the structure if the tables that are about to be changed.

用于从MySQL 5.1.5开始的基于行的二进制日志记录。每个ROW_EVENT之前都有一个TABLE_MAP_EVENT,用于描述表的内部ID和结构定义。

1)触发条件

# ROW格式中每个ROW_EVENT之前

2)存储格式

92c0016c37598496ae6d05ed9248fd8e.png

1、事件头,占用19个字节。

2、事件体部分:

固定数据部分:

# table id:6 bytes //6个字节存储table id

# 2 bytes:Reserved for future use //2个字节保留未来使用

可变数据部分:

# 1 byte. The length of the database name. //数据库名长度:1字节

# Variable-sized. The database name (null-terminated). //数据库名:可变长度

# 1 byte. The length of the table name. //表长度:1字节

# Variable-sized. The table name (null-terminated). //表名:可变长度

# Packed integer. The number of columns in the table. //表的行数:

# Variable-sized. An array of column types, one byte per column. To find the meanings of these values, look at enum_field_types in the mysql_com.h header file. //列类型数组,每一列1个字节

# Packed integer. The length of the metadata block. //元数据块的长度

# Variable-sized. The metadata block; see log_event.h for contents and format. //元数据块

# Variable-sized. Bit-field indicating whether each column can be NULL, one bit per column. For this field, the amount of storage required for N columns is INT((N+7)/8) bytes. //位字段,指示每个列是否可以为空,每个列一位。如果表有N列,需要:INT((N+7)/8) 字节

3)实战分析

结合hexdump出来的数据和mysqlbinlog解析出的日志进行分析:

25ebb6efb252c4fa74fa9e48b28229be.png

b0e726525cf5fba9451df258dbf424f1.png

-------公有事件头--------

1、timestamp(4): 21 2e 0e 5b

2、event_type(1):13,十进制19:TABLE_MAP_EVENT = 19

3、server id(4):5c 27 6b 94 十进制:2490050396

4、event size(4):2e 00 00 00,十进制:46

5、log_pos(4):aa 01 00 00 ,十进制:426 也就是end_log_pos=426

6、flags(2):00 00,等于0表示该日志文件关闭状态

--------固定数据部分(私有事件头)-----

1、table id(6):b1 01 00 00 00 00,十进制433,table_id=433

2、reserve(2):01 00,十进制:1,未被使用

---------可变数据部分(事件体)--------

3、db name len(1):06,数据库名占用6个字节,即darren

4、db name(6):64 61 72 72 65 6e,查询asci码,对应darren

5、00

6、table name len(1):01,表名占用1个字节

7、table name(1):74,asci码对应字母t,即表名是t

8、00

9、column count(1):01,即列的个数1

10、column type(1):03,表示MYSQL_TYPE_LONG

11、column metadata len(1):00,1个字节

12、column metadata:无

13、null bitmap(1):00,0表没有列可以为NULL,如果是01表示该列可以为NULL

14、crc32(4):8f cb 07 7d,代表CRC32=0x7d07cb8f,不在事件体里,可以认为每个事件都存在footer

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值