暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL binlog中的重要event整理

mysql code tracer 2020-02-24
281

本文只包含一个表格,但是极其重要,对于学习MySQL主从原理非常有帮助,建议收藏


event名称作用格式生成时机其他说明
FD_EVENT描述binlog版本、server版本信息等
  • binlog_version

  • server_version

  • create_timestamp

  • header_length

  • array of post-header

每个binlog的第一个event

  • flush binary logs

  • binary log自动切换

  • 重启MySQL实例


PG_EVENT用于描述前面所有的binlog包含的GTID SET
  • 可变部分

  • number of sids

  • server_uuid

  • n_intervals

  • inter_start

  • inter_next

binlog切换的时候作为第二个EVENT写入binlog这个event在GTID初始化的时候非常有用
GTID_EVENT

GTID的详细信息

逻辑时钟详细信息

是否为行模式

  • flags

  • server_uuid

  • gno

  • ts type

  • last commit

  • seq number

GTID_LOG_EVENT的生成和写入binlog文件都是在oder commit的flush阶段,且不需要写入binlog cache,直接写入binlog

timestamp的时间都是commit发起的时间,三种模式

  1. 自动生成的GTID

  2. 指定GTID

  3. 匿名GTID

ANONYMOUS_GTID_LOG_EVENT同上同上
server_uuid跟gno为0,其他部分同GTID_EVENT
QUERY_EVENT记录一些语句的运行环境,比如SQL_MODE、客户端字符集、自增环境等,而且会记录执行时间,其中DML记录的是第一行数据更改后的时间,而DDL则是语句的执行时间
  • slave_proxy_id

  • query_exec_time

  • db_len

  • error_code

  • status_vars_len

  • status variables

  • db

  • query

行模式下,事务的第一个DML语句修改第一行数据后,DDL就是执行完以后
MAP_EVENTtable id和实际访问表的映射
  • table_id

  • Reserved

  • db len

  • db name

  • table len

  • table name

  • no of cols

  • array of col types

  • metadata len

  • metadata block

只会在行模式下生成,每条DML语句修改的第一行数据在innodb引擎层修改完成后,QUERY EVENT生成后通常来讲,每个语句的每个表都会包含这样一个MAP_EVENT
W_EVENT主要记录insert语句的after_image时机数据
  • table_id

  • Reserved

  • columns_width

  • columns_after_image

  • row Bit-field

  • row real data

第一条数据在innodb层变更完成后,但是在QUERY EVENT和MAP_EVENT之后,修改不止一行的情况下,会将多行数据增加到这个EVENT,超过8192字节会生成一个新的event,同时把现有的EVENT写入到binlog cache,并不是等所有的DML EVENT生成后一次性写入binlog cache的
D_EVENT主要记录delete语句的befor_image时机数据
  • table_id

  • Reserved

  • var_header_len

  • columns_width

  • columns_before_image

  • row Bit_field

  • row real data

同上
U_EVENT主要记录update的before_image数据数据和after_image实际数据
  • table_id

  • Reserved

  • var_header_len

  • columns_width

  • columns_before_image

  • columns_after_image

  • row Bit-field

  • row real data

同上
XID_EVENT二阶段提交的协调者
  • xid

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状态事务做何种操作


鉴于公众号这排版,再放一个本人笔记的截图

文章转载自mysql code tracer,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论