本节描述将事件作为字节序列写入二进制或中继日志文件时的一般属性。
所有事件都有一个通用的结构,由一个事件头和后跟事件数据组成:
+===================+ | 活动标题 | +===================+ | 事件数据 | +===================+
关于头文件和数据部分的细节随着时间的推移而变化,这导致了二进制日志格式的不同版本:
v1: MySQL 3.23版本
v3:在MySQL 4.0.2到4.1中使用
v4: MySQL 5.0及以上版本使用
v2格式被简单使用(在早期的MySQL 4.0中)。X版本),但它已经过时,不再受支持。
事件结构的一些细节在二进制日志版本中是不变的;其他取决于版本。在任何给定的版本中,不同类型的事件在数据部分的结构中有所不同。
日志文件中的第一个事件是特殊的。它是一个描述符事件,提供诸如二进制日志版本和服务器版本等信息。描述符事件中的信息使程序能够确定应用于该文件的二进制日志格式的哪个版本,以便能够正确地读取和解释文件中的其余事件。
有关初始描述符事件以及如何使用它确定二进制日志文件格式的详细信息,请参见二进制日志版本.有关其他类型事件的更多信息,请参见特定事件类型的事件数据.
下面的事件图包含使用这些约定编写的字段描述:
字段行有一个描述字段内容的名称。
名字后面有两个数字抵消:长度格式,抵消基于0的偏移(位置)的字段在事件和长度是场的长度。两个值都是以字节为单位给出的。
这里显示了不同二进制版本中事件的总体结构。下面的部分将更详细地描述头和数据部分。
V1事件结构:
+=====================================+ | 事件|时间戳0:4 | |头 +----------------------------+ | | type_code 4: 1 | | +----------------------------+ | | server_id 5: 4 | | +----------------------------+ | | event_length 9: 4 | +=====================================+ | 事件|固定部分13:y | |数据 +----------------------------+ | | 可变部分 | +=====================================+
头长度= 13字节
数据长度= (event_length - 13)个字节
Y特定于事件类型。
V3事件结构:
+=====================================+ | 事件|时间戳0:4 | |头 +----------------------------+ | | type_code 4: 1 | | +----------------------------+ | | server_id 5: 4 | | +----------------------------+ | | event_length 9: 4 | | +----------------------------+ | | next_position 13: 4 | | +----------------------------+ | | 旗帜17:2 | +=====================================+ | 事件|固定部分19:y | |数据 +----------------------------+ | | 可变部分 | +=====================================+
头长度= 19字节
数据长度= (event_length - 19)个字节
Y特定于事件类型。
V4事件结构:
+=====================================+ | 事件|时间戳0:4 | |头 +----------------------------+ | | type_code 4: 1 | | +----------------------------+ | | server_id 5: 4 | | +----------------------------+ | | event_length 9: 4 | | +----------------------------+ | | next_position 13: 4 | | +----------------------------+ | | 旗帜17:2 | | +----------------------------+ | | extra_headers 19: x 19 | +=====================================+ | 事件|固定x部分:y | |数据 +----------------------------+ | | 可变部分 | +=====================================+
报头长度= x字节
数据长度= (event_length - x)个字节
固定数据长度= y字节可变数据长度= (event_length - (x + y))字节
x由格式描述事件(FDE)中的header_length字段给出。目前,x是19,所以extra_headers字段为空。
y特定于事件类型,由FDE给出。固定部分长度对于给定类型的所有事件都是相同的,但对于不同的事件类型可能有所不同。
事件数据的固定部分有时被称为“post-header”部分。可变部分有时被称为“有效载荷”或“主体”。
有关如何使用FDE解释v4事件的信息,请参见二进制日志格式.