mysql bin log 255_解析MYSQL BINLOG 二进制格式(4)--TABLE_MAP_EVENT

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

class:Table_map_log_event

event:TABLE_MAP_EVENT

event_code:19

本event只用于 row模式的bin log ,从5.1.5开始,其实这部分

包含了大量的关于表的原数据,也是在保证slave正确

复制数据的重要event

--fixed data

6 bytes 表ID

2 bytes 保留

--variable data part

1 bytes 数据库名长度

var-size 数据库名字 0x00 结尾

1 bytes 表名长度

var-size 表名 0x00 结尾

packed interger 字段数量 注意这里就是packed interger参考第一篇文章

var-size 字段类型,每一个字节代表一个字段,如下:

typedef enum enum_field_types {

MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY,

MYSQL_TYPE_SHORT, MYSQL_TYPE_LONG,

MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE,

MYSQL_TYPE_NULL, MYSQL_TYPE_TIMESTAMP,

MYSQL_TYPE_LONGLONG,MYSQL_TYPE_INT24,

MYSQL_TYPE_DATE, MYSQL_TYPE_TIME,

MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR,

MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR,

MYSQL_TYPE_BIT,

MYSQL_TYPE_TIMESTAMP2,

MYSQL_TYPE_DATETIME2,

MYSQL_TYPE_TIME2,

MYSQL_TYPE_JSON=245,

MYSQL_TYPE_NEWDECIMAL=246,

MYSQL_TYPE_ENUM=247,

MYSQL_TYPE_SET=248,

MYSQL_TYPE_TINY_BLOB=249,

MYSQL_TYPE_MEDIUM_BLOB=250,

MYSQL_TYPE_LONG_BLOB=251,

MYSQL_TYPE_BLOB=252,

MYSQL_TYPE_VAR_STRING=253,

MYSQL_TYPE_STRING=254,

MYSQL_TYPE_GEOMETRY=255

} enum_field_types;

packed interger:metadata block 长度,注意这里就是packed interger参考第一篇文章

var-size metadata block数据

var-size 每一位代表这个字段的值是否为NULL,其长度为 INT((n+7)/8) n代表字段数量

接下来具体解析一个

--

00000200 bf ba 78 97 58 13 e5 6b 01 00 33 00 00 00 34 02 |..x.X..k..3...4.|

00000210 00 00 00 00 ae 00 00 00 00 00 01 00 04 74 65 73 |.............tes|

00000220 74 00 05 6d 79 62 69 6e 00 02 03 0f 02 3c 00 03 |t..mybin.....<..>

00000230 a1 23 ad 72

这次关于event header 部分就不解析了

ba 78 97 58 13 e5 6b 01 00 33 00 00 00 34 02

00 00 00 00

也就是这部分,直接进入event data部分

--fixed data part

ae 00 00 00 00 00 :表ID 174

01 00:保留

--variable data part

04:数据库名长度 4字节

74 65 73 74 00:数据库名test 0x00结尾

05:表名长度 5字节

6d 79 62 69 6e 00:表名mybin 0X00结尾

02:字段数量 2个字段

03:MYSQL_TYPE_LONG(4字节int类型)

0f:MYSQL_TYPE_VARCHAR(varchar类型)

02:metadata lenth

3c 00:metadata block 第一个字段不需要长度,第二个字段为可变类型长度为60

03:00000011 都可以为NULL

a1 23 ad 72:CRC32 校验4字节

到此为止:表中的说明数据就出来了,在MYSQLBINLOG中会看到

# at 513

#170206 3:10:50 server id 93157 end_log_pos 564 CRC32 0x72ad23a1 Table_map: `test`.`mybin` mapped to number 174

以及在表中

### INSERT INTO `test`.`mybin`

### SET

### @1=1 /* INT meta=0 nullable=1 is_null=0 */

### @2='gaopeng' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */

信息:

CRC32 0x72ad23a1 Table_map: `test`.`mybin` mapped to number 174

明显来自Table_map_log_event

而且类似/* VARSTRING(60) meta=60 nullable=1 is_null=0 */

中的 VARSTRING(60) meta=60 nullable=1 都来自于

Table_map_log_event

并且可以看到和解析出来的一模一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值