Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Mixed Binary Logging Format

7.4.4.3 混合二进制日志格式

在 MIXED 日志格式下运行时,服务器会在以下情况下自动从基于语句的日志记录切换到基于行的日志记录:

在早期版本中,当混合二进制日志格式处于使用状态时,如果一个语句被记录为行,并且执行该语句的会话中有任何临时表,那么所有后续语句都将被视为不安全的并以行格式记录,直到该会话中的所有临时表都被删除。从 MySQL 8.0 开始,对临时表的操作不再记录在混合二进制日志格式中,并且会话中的临时表的存在不会影响每个语句的日志模式。

Note

如果您尝试执行一个语句,使用基于语句的日志记录,而该语句应该使用基于行的日志记录,则会生成警告。该警告将显示在客户端(在 SHOW WARNINGS 的输出中)和通过 mysqld 错误日志。每次执行生成警告的语句时,都将添加到 SHOW WARNINGS 表中。然而,只有每个客户端会话的第一个生成警告的语句将被写入错误日志,以防止日志被淹没。

除了上述决定外,单个引擎还可以确定更新表信息时使用的日志格式。引擎的日志能力可以定义如下:

  • 如果引擎支持基于行的日志记录,则该引擎被称为 行日志记录capable

  • 如果引擎支持基于语句的日志记录,则该引擎被称为 语句日志记录capable

给定的存储引擎可以支持其中一种或两种日志格式。以下表格列出了每个引擎支持的格式。

存储引擎 行日志记录支持 语句日志记录支持
ARCHIVE
BLACKHOLE
CSV
EXAMPLE
FEDERATED
HEAP
InnoDB 是当事务隔离级别为REPEATABLE READSERIALIZABLE时;否则否。
MyISAM
MERGE
NDB

根据语句类型(安全、不安全或二进制注入)、二进制日志格式(STATEMENTROWMIXED)和存储引擎的日志记录能力(语句日志记录、行日志记录、两者或都不支持),确定是否记录语句和日志记录模式。(二进制注入是指使用ROW格式记录更改。)

语句可能会记录或不记录警告;失败的语句不会记录,但会在日志中生成错误。这在以下决策表中显示。类型binlog_formatSLCRLC列概述了条件,而错误 / 警告记录为列表示相应的操作。SLC是“语句日志记录能力”的缩写,RLC是“行日志记录能力”的缩写。

二进制日志格式*错误:无法执行语句-STATEMENTSTATEMENTMIXEDSTATEMENTROW错误:无法执行语句BINLOG_FORMAT = ROW-STATEMENT警告:不安全语句以语句格式记录日志BINLOG_FORMAT = STATEMENTSTATEMENTMIXED错误:无法执行语句BINLOG_FORMAT = MIXED-ROW错误:无法执行语句BINLOG_FORMAT = ROWSTATEMENT错误:无法执行行注入MIXED错误:无法执行行注入ROW错误:无法执行行注入STATEMENT错误:无法执行语句BINLOG_FORMAT = STATEMENT-MIXEDROWROWROWSTATEMENT错误:无法执行语句BINLOG_FORMAT = STATEMENTMIXEDROWROWROWSTATEMENT错误:无法执行行注入BINLOG_FORMAT = STATEMENT-MIXEDROWROWROWSTATEMENTSTATEMENTMIXEDSTATEMENTROWROWSTATEMENT警告:不安全语句以语句格式二进制日志记录BINLOG_FORMAT = STATEMENTSTATEMENTMIXEDROWROWROWSTATEMENT错误:无法执行行注入BINLOG_FORMAT = STATEMENTMIXEDROWROWROW Here is the translated HTML fragment: 类型 会话锁 行锁 错误 / 警告 记录为 Let me know when you're ready to send the next fragment! Here is the translated HTML fragment: * 否 否 :二进制日志记录不可能,因为至少一个引擎同时具有行不 capable 和语句不 capable。 安全 是 否 - 安全 是 否 - 安全 是 否 :二进制日志记录不可能,因为 和至少一个表使用了不支持行基于日志记录的存储引擎。 不安全 是 否 ,因为 不安全 是 否 :二进制日志记录不可能,因为存储引擎仅支持语句基于日志记录,即使 。 不安全 是 否 :二进制日志记录不可能,因为 和至少一个表使用了不支持行基于日志记录的存储引擎。 - 行注入 是 否 :二进制日志记录不可能,因为至少一个表使用了不支持行基于日志记录的存储引擎。 - 行注入 是 否 :二进制日志记录不可能,因为至少一个表使用了不支持行基于日志记录的存储引擎。 - 行注入 是 否 :二进制日志记录不可能,因为至少一个表使用了不支持行基于日志记录的存储引擎。 - 安全 否 是 :二进制日志记录不可能,因为 和至少一个表使用了不支持语句基于日志记录的存储引擎。 安全 否 是 - 安全 否 是 - Let me know if you need any further assistance!Here is the translated HTML fragment: 不安全 否 是 :二进制日志记录不可能,因为 ,至少一个表使用了不支持语句日志记录的存储引擎。 - 不安全 否 是 - 不安全 否 是 - 行注入 否 是 :二进制日志记录不可能,因为 。 行注入 否 是 - 行注入 否 是 - 安全 是 是 - 安全 是 是 - 安全 是 是 - 不安全 是 是 ,因为 。 不安全 是 是 - 不安全 是 是 - 行注入 是 是 :二进制日志记录不可能,因为 。 - 行注入 是 是 - 行注入 是 是 - Let me know if you need any further assistance!

当确定产生警告时,会生成标准的 MySQL 警告(并可以使用SHOW WARNINGS). 该信息也将被写入mysqld错误日志中。每个客户端连接的每个错误实例只记录一次错误,以防止日志被淹没。日志消息包括尝试执行的 SQL 语句。

如果副本将log_error_verbosity设置为显示警告,则副本将打印消息到错误日志,以提供其状态信息,例如它开始工作的二进制日志和中继日志坐标、切换到另一个中继日志时、断开连接后重新连接、不适合基于语句的日志记录的语句等等。