mysql 事件类型_mysqlbinlog命令详解 Part 2 -MySQL 事件类型

此次实验的环境如下MySQL 5.7.25

Redhat 6.10

binlog模式采用row模式

这个专题的内容为mysqlbinlog命令的详解

mysqlbinlog是MySQL中用来处理binlog的工具

为了更好的讲解后面的内容,这节先说下MySQL常用的一些事件类型

1. 事件和事件代码的关联表

下面为事件和事件代码的关联表

enum Log_event_type {

UNKNOWN_EVENT= 0,

START_EVENT_V3= 1,

QUERY_EVENT= 2,

STOP_EVENT= 3,

ROTATE_EVENT= 4,

INTVAR_EVENT= 5,

LOAD_EVENT= 6,

SLAVE_EVENT= 7,

CREATE_FILE_EVENT= 8,

APPEND_BLOCK_EVENT= 9,

EXEC_LOAD_EVENT= 10,

DELETE_FILE_EVENT= 11,

NEW_LOAD_EVENT= 12,

RAND_EVENT= 13,

USER_VAR_EVENT= 14,

FORMAT_DESCRIPTION_EVENT= 15,

XID_EVENT= 16,

BEGIN_LOAD_QUERY_EVENT= 17,

EXECUTE_LOAD_QUERY_EVENT= 18,

TABLE_MAP_EVENT = 19,

PRE_GA_WRITE_ROWS_EVENT = 20,

PRE_GA_UPDATE_ROWS_EVENT = 21,

PRE_GA_DELETE_ROWS_EVENT = 22,

WRITE_ROWS_EVENT = 23,

UPDATE_ROWS_EVENT = 24,

DELETE_ROWS_EVENT = 25,

INCIDENT_EVENT= 26,

HEARTBEAT_LOG_EVENT= 27,

IGNORABLE_LOG_EVENT= 28,

ROWS_QUERY_LOG_EVENT= 29,

WRITE_ROWS_EVENT = 30,

UPDATE_ROWS_EVENT = 31,

DELETE_ROWS_EVENT = 32,

GTID_LOG_EVENT= 33,

ANONYMOUS_GTID_LOG_EVENT= 34,

PREVIOUS_GTIDS_LOG_EVENT= 35,

ENUM_END_EVENT

/* end marker */

};

常见事件列表

一些事件是没有类型代码的,因为他是其他事件的基类,如Log_event ,这些并不会写在日志文件中

一些事件可能被分配多个类型代码,如Load_log_event 代表LOAD_EVENT 和NEW_LOAD_EVENT 两种事件

所有的类型请参见官方文档

3. 常见事件意义

这节介绍一些常见的事件的意义

全部内容请参见官方文档UNKNOWN_EVENT

这个事件不应该发生,他永远不会被写入日志文件中

如果日志文件中的事件无法被识别为其他的事件,则 被看成是UNKNOWN_EVENT

START_EVENT_V3

该事件是写在每个二进制文件开头的一个描述性的事件,从MySQL 5.0 开始被

FORMAT_DESCRIPTION_EVENT事件取代

QUERY_EVENT

在如下情况下写入

1、事务开始时,在binlog中有一个QUERY_EVENT类型的BEGIN。

2、在statement格式中,具体执行的SQL语句会保存在该事件中。

3、对于ROW格式的binlog,所有DDL操作以文本的形式记录在该事件中。

STOP_EVENT

当数据库停止时写入

ROTATE_EVENT

在数据库日志切换到另一个日志文件时写入

如执行flush logsh或者当前日志文件超过了 max_binlog_size设置的最大值时

INTVAR_EVENT

该事件在语句使用了AUTO_INCREMENT 列或者LAST_INSERT_ID()函数时写入

它只会在QUERY_EVENT事件前写入,并且在基于行的日志记录中不会出现

该事件有2个子类型 INSERT_ID_EVENT及LAST_INSERT_ID_EVENT

LOAD_EVENT

MySQL 3.23中,在使用了LOAD DATA INFILE 语句时写入,即从外部文件导入数据

SLAVE_EVENT

该事件还未被使用

RAND_EVENT

每次使用 RAND() 函数时写入,它会在QUERY_EVENT事件前写入,并且在基于行的日志记录中不会出现

USER_VAR_EVENT

每次语句使用了用户变量后写入,它会在QUERY_EVENT事件前写入,并且在基于行的日志记录中不会出现

FORMAT_DESCRIPTION_EVENT

该事件在日志文件的开头写入,MySQL 5.0之前使用的是START_EVENT_V3事件

XID_EVENT

在使用了事务后写入该事件

TABLE_MAP_EVENT

基于行的日志记录生效,该事件在每个行事件之前, 将表的定义映射成一个数字,如主从中表的结构不一样该事件使主从得以可行

BEGIN_LOAD_QUERY_EVENT

MySQL 5.0 时使用了LOAD DATA INFILE语句后写入

WRITE_ROWS_EVENT

对单张表进行插入时写入,基于行的日志记录时生效

UPDATE_ROWS_EVENT

对单张表进行更新时写入,基于行的日志记录时生效

DELETE_ROWS_EVENT

对单张表进行删除时写入,基于行的日志记录时生效

INCIDENT_EVENT

该事件在主库中发生异常,提醒从库主库可能发生会导致数据不一致的事件

HEARTBEAT_LOG_EVENT

由主库发出以让从库知道主库存活,不会记录在日志中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值