MySQL 8.3 Release Notes
服务器使用多种日志格式来记录二进制日志中的信息:
-
MySQL 中的复制功能最初基于从源到副本的 SQL 语句传播。这被称为 基于语句的日志记录。您可以通过启动服务器时使用
--binlog-format=STATEMENT
来使用这种格式。 -
在 基于行的日志记录(默认)中,源将事件写入二进制日志,以指示单个表行如何受到影响。您可以通过启动服务器时使用
--binlog-format=ROW
来使用基于行的日志记录。 -
还有第三个选项:混合日志记录。使用混合日志记录时,默认情况下使用基于语句的日志记录,但是在以下情况下自动切换到基于行的日志记录。您可以通过启动 mysqld 时使用选项
--binlog-format=MIXED
来使用混合日志记录。
日志格式也可以根据使用的存储引擎设置或限制。这有助于消除在使用不同存储引擎的源和副本之间复制某些语句时出现的问题。
使用基于语句的复制时,可能会出现非确定性语句的复制问题。MySQL 在确定某个语句是否安全地使用基于语句的日志记录时,会确定该语句是否可以保证使用基于语句的日志记录。如果 MySQL 无法作出这种保证,它将标记该语句为不可靠的语句,并发出警告:语句可能不安全地记录在语句格式中。
您可以通过使用 MySQL 的基于行的复制来避免这些问题。