MySQL数据库binlog解析

binlog是由MySQL数据库server层对数据库修改操作的记录,写入binlog时根据提交的顺序写入,binlog用于数据库主从复制、归档、备份恢复。其中,binlog是由一个个event组成的,不同的SQL语句对应不同的event,要了解binlog,就需要先了解binlog中都包含哪些event。

首先,我们开启一个新的binlog来进行验证。

查看当前数据库的binlog。

刷新binlog,重新生成一个新的binlog文件。

刷新36这个binlog后,暂时不进行任何写入操作,先看下全新的binlog里面包含哪些内容。

解析binlog,mysqlbinlog --no-defaults -vv mysql-bin-3306.000036

从解析后的日志中可以看出来,binlog是从"at 4"开始的,第一个event说明了binlog的格式、创建时间等,即FORMAT_DESCRIPTION_EVENT。第二个event是从"at 123"开始的,记录了Previous-GTIDS,描述前面所有binlog包含的gtid set,即PREVIOUS_GTIDS_LOG_EVENT。

现在我们向数据库中插入一条数据,来看下binlog是如何更新的。

此时,再解析binlog,查看内容。

从上面图片上可以看到,执行了一条insert语句后,新增加了"at 194"、"at 259" 、"at 331"、"at 380"、"at 423"这5个event。

"at 194"描述了下一个gtid号,但由于测试数据库没有开启gtid模式,因此描述为匿名gitd,即Anonymous_GTID_EVENT,如果开启了gtid mode,则对应的event会是GTID_EVENT。

"at 259"描述了时间戳TIMESTAMP、线程号pseudo_thread_id、sql_mode、客户端字符集character_set_client等信息,并且包含了begin语句,代表了事务开始,即QUERY_EVENT,该event会在事务的第一个dml语句的第一行数据被修改之后生成,一般是一个事务对应一个QUERY_EVENT。

"at 331"描述了insert语句的表emp在数据库中映射的id号,每个表有唯一的一个id号,且当MySQL实例重启、执行flush tables命令后,该table_id号会变化,并不是固定不变,该event称之为MAP_EVENT。

"at 380"才是真正记录insert语句内容的event,即WRITE_EVENT。该event用于记录insert语句插入的行数据。

"at 423"从图片上可以看出来,代表"commit"语句,代表着上面的insert事务结束,称之为XID_EVENT。

我们对上面的binlog内容进行总结,每生成一个新的binlog,至少包含2个event,第一个是FORMAT_DESCRIPTION_EVENT,第二个是PREVIOUS_GTIDS_LOG_EVENT。当执行了DML语句或者DDL语句之后,则会先生成GTID_EVENT或者Anonymous_GTID_EVENT,接着是QUERY_EVENT、MAP_EVENT以及对应的WRITE_EVENT/DELETE_EVENT/UPDATE_EVENT,最后是对应事务commit语句的XID_EVENT。

相关推荐
范纹杉想快点毕业1 分钟前
从单片机基础到程序框架:全方位技术深度解析
数据库·mongodb
晚风_END4 分钟前
Linux|操作系统|elasticdump的二进制方式部署
运维·服务器·开发语言·数据库·jenkins·数据库开发·数据库架构
devmoon4 分钟前
Polkadot SDK 自定义 Pallet Benchmark 指南:生成并接入 Weight
开发语言·网络·数据库·web3·区块链·波卡
数据知道9 分钟前
PostgreSQL 故障排查:紧急排查与 SQL 熔断处理(CPU 占用 100% 等情况)
数据库·sql·postgresql
静听山水11 分钟前
Redis的Pipeline (管道)
数据库·redis·php
数据知道18 分钟前
PostgreSQL 性能优化: I/O 瓶颈分析,以及如何提高数据库的 I/O 性能?
数据库·postgresql·性能优化
繁华落尽,寻一世真情21 分钟前
【基于 AI 的智能小说创作助手】MuMuAINovel-sqlite 基于 AI 的智能小说创作助手
数据库·人工智能·sqlite
存在的五月雨26 分钟前
Spring Security认证流程
java·开发语言·mysql
TOPGO智能27 分钟前
在腾讯CloudStudio上成功部署Moltbot接入飞书
数据库
云边有个稻草人28 分钟前
关系数据库替换用金仓:数据迁移过程中的完整性与一致性风险
数据库·国产数据库·kingbasees·金仓数据库·关系数据库替换用金仓