5.4.4.1 二进制日志记录格式

服务器使用几种日志记录格式将信息记录在二进制日志中。所使用的确切格式取决于所使用的 MySQL 版本。有三种日志记录格式:

  • MySQL 中的复制功能最初是基于 SQL 语句从源到副本的传播。这称为基于语句的日志记录。您可以通过使用--binlog-format=STATEMENT启动服务器来使用此格式。

  • 基于行的日志记录中,源将事件写入二进制日志,该事件指示如何影响单个 table 行。因此,table 始终使用主键以确保可以有效地标识行是很重要的。您可以通过以--binlog-format=ROW开头使服务器使用基于行的日志记录。

  • 第三个选项也是可用的:* mixed logging *。对于混合日志记录,默认情况下使用基于语句的日志记录,但是在某些情况下,日志记录模式会自动切换为基于行的记录,如下所述。您可以通过以mysqld选项开头mysqld来使 MySQL 显式使用混合日志记录。

日志记录格式还可以通过使用的存储引擎来设置或限制。这有助于消除在使用不同存储引擎的源和副本之间复制某些语句时出现的问题。

使用基于语句的复制时,复制不确定性语句可能会出现问题。在确定给定语句对于基于语句的复制是否安全时,MySQL 确定是否可以保证可以使用基于语句的日志记录来复制该语句。如果 MySQL 无法做出保证,它将标记该语句为潜在不可靠的对象并发出警告,以语句格式登录该语句可能并不安全。

您可以通过使用 MySQL 的基于行的复制来避免这些问题。