本文只包含一个表格,但是极其重要,对于学习MySQL主从原理非常有帮助,建议收藏
| event名称 | 作用 | 格式 | 生成时机 | 其他说明 |
| FD_EVENT | 描述binlog版本、server版本信息等 |
| 每个binlog的第一个event
| |
| PG_EVENT | 用于描述前面所有的binlog包含的GTID SET |
| binlog切换的时候作为第二个EVENT写入binlog | 这个event在GTID初始化的时候非常有用 |
| GTID_EVENT | GTID的详细信息 逻辑时钟详细信息 是否为行模式 |
| GTID_LOG_EVENT的生成和写入binlog文件都是在oder commit的flush阶段,且不需要写入binlog cache,直接写入binlog | timestamp的时间都是commit发起的时间,三种模式
|
| ANONYMOUS_GTID_LOG_EVENT | 同上 | 同上 | server_uuid跟gno为0,其他部分同GTID_EVENT | |
| QUERY_EVENT | 记录一些语句的运行环境,比如SQL_MODE、客户端字符集、自增环境等,而且会记录执行时间,其中DML记录的是第一行数据更改后的时间,而DDL则是语句的执行时间 |
| 行模式下,事务的第一个DML语句修改第一行数据后,DDL就是执行完以后 | |
| MAP_EVENT | table id和实际访问表的映射 |
| 只会在行模式下生成,每条DML语句修改的第一行数据在innodb引擎层修改完成后,QUERY EVENT生成后 | 通常来讲,每个语句的每个表都会包含这样一个MAP_EVENT |
| W_EVENT | 主要记录insert语句的after_image时机数据 |
| 第一条数据在innodb层变更完成后,但是在QUERY EVENT和MAP_EVENT之后,修改不止一行的情况下,会将多行数据增加到这个EVENT,超过8192字节会生成一个新的event,同时把现有的EVENT写入到binlog cache,并不是等所有的DML EVENT生成后一次性写入binlog cache的 | |
| D_EVENT | 主要记录delete语句的befor_image时机数据 |
| 同上 | |
| U_EVENT | 主要记录update的before_image数据数据和after_image实际数据 |
| 同上 | |
| XID_EVENT | 二阶段提交的协调者 |
| XID在事务的第一条语句就已经定了,但是构造EVENT和写入到binlog cache是在整个提交过程的prepare之后,order commit之前。 | xid生成以第一个语句的query_id为准。 XID在binlog不是递增的,不是连续的但是唯一,XID存在于MySQL层的binlog中和innodb的Undo log record header的TRX_UNDO_XA_XID中,XID是用于MySQL层和innodb层配合,决定处于prepare状态事务做何种操作 |
鉴于公众号这排版,再放一个本人笔记的截图





