导读
binlog中的第一个event 用来标识这个binlog的基础信息. 是非常重要的. 使用mysqlbinlog 命令解析binlog的时候 也是要先执行第一个event的, 不然数据库会无法识别. 报错ERROR 1609 (HY000): The BINLOG statement of type Table_map was not preceded by a format description BINLOG statement
(root@127.0.0.1) [(none)]> BINLOG '
'> jg0iZhNsMK0YNgAAAOkBAAAAAFcAAAAAAAEACmRiMjAyNDA0MTkAAnQxAAEDAAEBAQChWU2A
'> jg0iZiBsMK0YKAAAABECAAAAAFcAAAAAAAEAAgAB/wACAAAAna4+yw==
'> '/*!*/;
ERROR 1609 (HY000): The BINLOG statement of type `Table_map` was not preceded by a format description BINLOG statement.
(root@127.0.0.1) [(none)]>
所以这个event里面到底包含啥信息呢?
FORMAT_DESCRIPTION_EVENT
作为binlog的第一个event, 格式还是比较简单的. event_header的信息都是固定, 就不讲了. 来看下payload信息, 如下表格,
| 对象 | 大小 | 描述 |
|---|---|---|
| binlog_version | 2 | binlog版本信息, 5.7和8.0都是binlog v4 |
| mysql_version | 50 | mysql server版本. |
| create_timestamp | 4 | 创建时间 |
| event_header_length | 1 | event_header的长度, 固定19 |
| event_post_header_len | 38/41 | payload header的长度, 和版本有关系. |
| checksum_alg | 1 | 校验算法(0:无, 1:crc32) |
| checksum | 0/4 | 校验值, 其实属于(event_header) |
就这么点…
event_post_header_len 跟mysql版本有关, 5.7的话是38个event, 8.0是41个event.(新增了PARTIAL_UPDATE_ROWS_EVENT,TRANSACTION_PAYLOAD_EVENT,HEARTBEAT_LOG_EVENT_V2) 后面用的时候再讲吧.
现在和官方工具对比一下
我们解析出来信息如下:

官方解析出来的信息如下:

是完全对得上的. 包括 base64值(row event的时候再细讲).
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




