[pymysqlbinlog] binlog中第一个event FORMAT_DESCRIPTION_EVENT

2024年 4月 22日 38.7k 0

导读

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的时候再细讲).

相关文章

最新发布!MySQL 9.0 的向量 (VECTOR) 类型文档更新
国产数据库中级认证HCIP-openGauss经验分享
保障数据完整性与稳定性:数据库一致性
OceanBase 里的 DDL 超时时间
OceanBase v3.1.x 将不再更新版本 | 社区月报2024.6
openGauss Developer Day 2024 | SIG组工作会议亮点回看!

发布评论