20.5事件分类和类型

在内部,服务器使用c++类来表示二进制日志事件。原型是log_event.h。这些类的方法代码在log_event.cc

Log_event是基类。其他更具体的事件子类也从它派生出来。类型代码与子类相关联,因为类实例内容被写入二进制或中继日志,或者通过网络从主类发送到从类。在这些上下文中,事件只是字节序列,而不是类结构,因此需要类型代码来允许从字节序列识别事件类型。

事件字节序列有头部分和数据部分。类型代码出现在每个事件的头部部分。

类中列出了事件的可能类型代码Log_event_type枚举:

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,TABLE_MAP_EVENT EXECUTE_LOAD_QUERY_EVENT BEGIN_LOAD_QUERY_EVENT = 17日= 18日= 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 /*结束标记*/};

INTVAR_EVENT类型中列出了“子类型”Int_event_type枚举:

枚举Int_event_type {INVALID_INT_EVENT = LAST_INSERT_ID_EVENT = INSERT_ID_EVENT = 2};

下表总结了事件类和类型代码之间的关系。每个类都派生Log_event除非另有指示。可以看出,在大多数情况下,事件类与单一类型代码相关联,尽管也有一些例外:

  • 有些类不与任何类型代码相关联,因为它们只作为派生子类的基类使用,或者因为它们从来没有写入二进制日志或中继日志,也没有从主端发送到从端。例如,Log_event没有类型代码,因为它仅用作基类。

  • 一个类可以与多个类型代码关联:Load_log_event可以包含任一类型代码吗LOAD_EVENTNEW_LOAD_EVENT

价值

类型代码

Log_event

  • 大多数其他类的基类

Muted_query_log_event

  • 添加到5.0.23

  • 删除在6.0.4

Rows_log_event

  • 添加到是5.1.5

  • 基类Write_rows_log_event,Update_rows_log_event,Delete_rows_log_event

Old_rows_log_event

  • 添加到5.1.22

  • 基类Write_rows_log_event_old,Update_rows_log_event_old,Delete_rows_log_event_old

0

UNKNOWN_EVENT

Unknown_log_event

1

START_EVENT_V3

Start_log_event_v3

  • 重命名的START_EVENT/Start_log_event在5.0.0

  • 基类Format_description_log_event

2

QUERY_EVENT

Query_log_event

  • 基类Execute_load_query_log_event

3.

STOP_EVENT

Stop_log_event

4

ROTATE_EVENT

Rotate_log_event

5

INTVAR_EVENT

Intvar_log_event

6

LOAD_EVENT

Load_log_event

  • 基类Create_file_log_event

7

SLAVE_EVENT

Slave_log_event

  • 添加到4.0.0

8

CREATE_FILE_EVENT

Create_file_log_event

  • 添加到4.0.0

  • 来自Load_log_event

9

APPEND_BLOCK_EVENT

Append_block_log_event

  • 添加到4.0.0

  • 基类Begin_load_query_log_event

10

EXEC_LOAD_EVENT

Execute_load_log_event

  • 添加到4.0.0

11

DELETE_FILE_EVENT

Delete_file_log_event

  • 添加到4.0.0

12

NEW_LOAD_EVENT

Load_log_event

  • 添加到4.0.0

13

RAND_EVENT

Rand_log_event

  • 添加到你

14

USER_VAR_EVENT

User_var_log_event

  • 添加到4.1.0

15

FORMAT_DESCRIPTION_EVENT

Format_description_log_event

  • 添加到5.0.0

  • 来自Start_log_event_v3

16

XID_EVENT

Xid_log_event

  • 添加到5.0.3

17

BEGIN_LOAD_QUERY_EVENT

Begin_load_query_log_event

  • 添加到5.0.3

  • 来自Append_block_log_event

18

EXECUTE_LOAD_QUERY_EVENT

Execute_load_query_log_event

  • 添加到5.0.3

  • 来自Query_log_event

19

TABLE_MAP_EVENT

Table_map_log_event

  • 添加到是5.1.5

20.

PRE_GA_WRITE_ROWS_EVENT

Write_rows_log_event_old

  • 在5.1.5中新增asWRITE_ROWS_EVENT/Write_rows_log_event和来自Rows_log_event

  • 在5.1.18中重新命名为PRE_GA_WRITE_ROWS_EVENT/Write_rows_log_event_old和来自Write_rows_log_event

  • 5.1.22,源自Old_rows_log_event

21

PRE_GA_UPDATE_ROWS_EVENT

Update_rows_log_event_old

  • 在5.1.5中新增asUPDATE_ROWS_EVENT/Update_rows_log_event和来自Rows_log_event

  • 在5.1.18中重新命名为PRE_GA_UPDATE_ROWS_EVENT/Update_rows_log_event_old和来自Update_rows_log_event

  • 5.1.22,源自Old_rows_log_event

22

PRE_GA_DELETE_ROWS_EVENT

Delete_rows_log_event_old

  • 在5.1.5中新增asDELETE_ROWS_EVENT/Delete_rows_log_event和来自Rows_log_event

  • 在5.1.18中重新命名为PRE_GA_DELETE_ROWS_EVENT/Delete_rows_log_event_old和来自Delete_rows_log_event

  • 5.1.22,源自Old_rows_log_event

23

WRITE_ROWS_EVENT

Write_rows_log_event

  • 来自Rows_log_event

  • 在5.1.18中从新编号20到23

24

UPDATE_ROWS_EVENT

Update_rows_log_event

  • 来自Rows_log_event

  • 在5.1.18中从21重新编号为24

25

DELETE_ROWS_EVENT

Delete_rows_log_event

  • 来自Rows_log_event

  • 在5.1.18中从22重新编号为25

26

INCIDENT_EVENT

Incident_log_event

  • 添加到5.1.18

27

HEARTBEAT_LOG_EVENT

Heartbeat_log_event

  • 添加到6.0.5