在内部,服务器使用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_EVENT
或NEW_LOAD_EVENT
。
价值 |
类型代码 |
类 |
|
||
|
||
|
||
|
||
0 |
|
|
1 |
|
|
2 |
|
|
3. |
|
|
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
|
8 |
|
|
9 |
|
|
10 |
|
|
11 |
|
|
12 |
|
|
13 |
|
|
14 |
|
|
15 |
|
|
16 |
|
|
17 |
|
|
18 |
|
|
19 |
|
|
20. |
|
|
21 |
|
|
22 |
|
|
23 |
|
|
24 |
|
|
25 |
|
|
26 |
|
|
27 |
|
|