下面对binlog中事件做个简单说明:
- UNKNOWN_EVENT
这个事件类型应该永远不会出现。它从不会写入binlog中。如果binlog中的事件没法被识别成其他已知事件,他被当做UNKNOWN_EVENT。
- START_EVENT_V3
在binlog文件最开始的符号事件(在Mysql的4.0和4.1版本中,这个事件只会在服务启动时,写到第一个binlog文件中)。这个事件在3.23到4.1版本中使用,在5.0版本中被FORMAT_DESCRIPTION_EVENT代替。
- QUERY_EVENT
当更新操作完成时写入。
- STOP_EVENT
当mysqld停止时写入。
- ROTATE_EVENT
当mysqld切换一个新的binlog文件时写入。当FLUSH LOGS命令执行或者当前的binlog文件太大时,这个事件会出现。binlog文件的最大值由max_binlog_size定义。
- INTVAR_EVENT
当一个语句使用到AUTO_INCREMENT列时,或者LAST_INSERT_ID()函数时写入。在这个语句的其他事件之前写入。这个只在QUERY_EVENT之前写入,并且在基于行的日志中不会使用。这个事件是以下面两种子类型的方式写入的
INSERT_ID_EVENT表示下个语句中使用到的自增列。
LAST_INSERT_ID_EVENT表示下个语句中用到的LAST_INSERT_ID()函数。
- LOAD_EVENT
在Mysql 3.23中用于LOAD DATA INFILE语句中。
- SLAVE_EVENT
没使用过。
- CREATE_FILE_EVENT
在Mysql 4.0和4.1版本中用于LOAD DATA INFILE语句。
- APPEND_BLOCK_EVENT
在Myql 4.0中用于LOAD DATA INFILE语句。
- EXEC_LOAD_EVENT
在Mysql 4.0和4.1中用于LOAD DATA INFILE语句。
- DELETE_FILE_EVENT
在Myql 4.0中用于LOAD DATA INFILE语句。
- NEW_LOAD_EVENT
在Mysql 4.0和4.1中用于LOAD DATA INFILE语句。
- RAND_EVENT
当一个语句使用RAND()函数时写入。在这个语句的所有其他事件之前。表示在下个语句中使用RAND()生成随机数用到的种子值。这个只在QUERY_EVENT之前写入,并且在基于行的日志中不记录。
- USER_VAR_EVENT
一个语句中使用到user变量时写入。在这个语句的所有事件之前。表示在下个语句中使用到的user变量值。这个只在QUERY_EVENT之前写入,并且在基于行的日志中不记录。
- FORMAT_DESCRIPTION_EVENT
每个binlog文件开头的符号事件。用于Mysql 5.0版本,替代START_EVENT_V3。
- XID_EVENT
在支持XA事务的存储引擎中,事务提交时产生。普通的事务是这样实现的:发送一个包含BEGIN语句的QUERY_EVENT和一个包含COMMIT语句的QUERY_EVENT(或者当事务回滚时的ROLLBACK语句)
- BEGIN_LOAD_QUERY_EVENT
用于Mysql 5.0中LOAD DATA INFILE语句。
- EXECUTE_LOAD_QUERY_EVENT
用于Mysql 5.0中LOAD DATA INFILE语句。
- TABLE_MAP_EVENT
用于基于行日志记录。这个事件在每个行操作事件之前。他把表定义映射为一个数字,表定义包含库名和表名,还有列的定义。这个事件的目的是当master和slave的同一张表有不同的定义时,允许进行主从复制。属于同一个事务的行操作事件会被按顺序放到一个组中,在这种情况下,每个事件序列组以TABLE_MAP_EVENT事件开头,每张表的序列组有一个。
- PRE_GA_WRITE_ROWS_EVENT
WRITE_ROWS_EVENT的废弃版本
- PRE_GA_UPDATE_ROWS_EVENT
UPDATE_ROWS_EVENT的废弃版本
- PRE_GA_DELETE_ROWS_EVENT
DELETE_ROWS_EVENT的废弃版本
- WRITE_ROWS_EVENT
用于基于行的日志记录方式,这个事件记录了单表的行插入。
- UPDATE_ROWS_EVENT
用于基于行的日志记录方式,这个事件记录了单表的行更新。
- DELETE_ROWS_EVENT
用于基于行的日志记录方式,这个事件记录了单表的行删除。
- INCIDENT_EVENT
用于记录master上发生的非常规事件。这个事件会通知slave,master发生了一些会导致数据不一致的事件。
- HEARTBEAT_LOG_EVENT
master发送给slave的事件,让slave知道master还活着。不写入日志文件。