Binlog版本
不同的Mysql版本使用不同的binlog版本:
- v1: MySQL 3.23-<4.0.0
- v2: MySQL 4.0.0 - 4.0.1 (此版本可以忽略, 因为只在 early alpha 版本使用过)
- v3: UsMySQL 4.0.2 - < 5.0.0
- v4: MySQL 5.0.0+
源码中定义的事件类型如下:
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_V2 = 30,
UPDATE_ROWS_EVENT_V2 = 31,
DELETE_ROWS_EVENT_V2 = 32,
GTID_LOG_EVENT= 33,
ANONYMOUS_GTID_LOG_EVENT= 34,
PREVIOUS_GTIDS_LOG_EVENT= 35,
ENUM_END_EVENT
/* end marker */
};
事件包含了从主节点传输到备节点的数据, 一个事件是START_EVENT_V3或FORMAT_DESCRIPTION_EVENT, 最后一个事件是STOP_EVENT或ROTATE_EVENT
binlog事件类型可以分为以下几类:
- Binlog management
- START_EVENT_V3: binlogV3使用这个事件作为开始事件
- FORMAT_DESCRIPTION_EVENT:binlogV4使用这个事件作为开始事件,描述后续事件是如何布局的
- STOP_EVENT:主节点shutdown的时候写入binlog(备节点在shutdown时或者执行Reset slave statement的时候会在relay log写入)
- ROTATE_EVENT:二进制日志更换一个新文件,可能因为文件大小达到限制,或者是mysql重启,亦或者是调用了flush logs命令。
- statement based replication event
-
QUERY_EVENT: 每条修改数据库的query都会创建一个QUERY_EVENT
-
INTVAR_EVET:如果qurey使用了LAST_INSERT_ID或INSERT_ID两个变量中的一个,会在QUERY_EVENT创建此事件
- XID_EVENT: Commit事件
-
- row base replication event
- TABLE_MAP_EVENT:ROW EVENT之前产生,为的是对ROW EVENT解析提供依据。
- WRITE_ROWS_EVENT, UPDATE_ROWS_EVENT, DELETE_ROWS_EVENT:统称为ROW EVENT, 只有在基于row的复制方式下才会产生。
-
WRITE_ROWS_EVENT:包含了要插入的数据,每个事件只包含一个表的rows
- UPDATE_ROWS_EVENT:包含了修改前的值,也包含了修改后的值,每个事件只包含一个表的rows
-
DELETE_ROWS_EVENT:包含了需要删除行前的值,每个事件只包含一个表的rows
- load infile replication