我们安装了MySQL 5.5,我们有binlog_format=STATEMENT (默认)
根据MySQL文档,二进制日志应该只包含SQL语句,但是我们仍然将binlog行作为每个BINLOG中的第一个语句。
为什么会这样呢?
发布于 2011-12-26 17:12:58
每当mysql写入二进制日志时,它必须对所有操作进行编码。
在每个二进制日志的开头都有一个base64常数:0xfe 0x62 0x69 0x6e。这指的是binlog魔术号**。
此值在mysql源代码中的log_event.h中注册。
其他事件也用log_event.h编码:
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,
ENUM_END_EVENT /* end marker */
};每当mysqlbinlog转储二进制日志的内容时,它都必须看到这些事件号,特别是二进制日志魔术号。如果缺少此值,则会迅速显示以下内容之一:
如果mysqlbinlog转储表达式BINLOG,则可以信任它正在读取的文件是二进制日志,因为它在解析文件时封装了binlog魔术号。
有关此问题的更多信息,请参见二进制日志上的MySQL内件
https://dba.stackexchange.com/questions/9736
复制相似问题