首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql通过binlog_­format=­STATEMENT发出BINLOG行

mysql通过binlog_­format=­STATEMENT发出BINLOG行
EN

Database Administration用户
提问于 2011-12-26 16:09:25
回答 1查看 533关注 0票数 2

我们安装了MySQL 5.5,我们有binlog_format=STATEMENT (默认)

根据MySQL文档,二进制日志应该只包含SQL语句,但是我们仍然将binlog行作为每个BINLOG中的第一个语句。

为什么会这样呢?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2011-12-26 17:12:58

每当mysql写入二进制日志时,它必须对所有操作进行编码。

在每个二进制日志的开头都有一个base64常数:0xfe 0x62 0x69 0x6e。这指的是binlog魔术号**

此值在mysql源代码中的log_event.h中注册。

其他事件也用log_event.h编码:

代码语言:javascript
复制
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内件

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/9736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档