MySQL 8.4 发行说明
服务器使用几种日志格式来记录二进制日志中的信息
MySQL 中的复制功能最初是基于从源到副本的 SQL 语句传播。这被称为基于语句的日志记录。您可以通过以下方式启动服务器来使用此格式
--binlog-format=STATEMENT
.在基于行的日志记录(默认情况下),源会将事件写入二进制日志,这些事件指示如何影响单个表行。您可以通过以下方式启动服务器来让服务器使用基于行的日志记录
--binlog-format=ROW
.还提供第三种选择:混合日志记录。在混合日志记录中,默认情况下使用基于语句的日志记录,但在某些情况下,日志记录模式会自动切换到基于行的日志记录,如下所述。您可以通过以下方式显式地让 MySQL 使用混合日志记录 mysqld 使用选项
--binlog-format=MIXED
.
日志记录格式也可以由正在使用的存储引擎设置或限制。这有助于消除在使用不同存储引擎的源和副本之间复制某些语句时的问题。
在基于语句的复制中,可能存在复制非确定性语句的问题。在确定给定语句是否适合基于语句的复制时,MySQL 会确定它是否可以保证可以使用基于语句的日志记录来复制该语句。如果 MySQL 无法做出此保证,它会将该语句标记为可能不可靠,并发出警告,Statement may not be safe to log in statement format.
您可以通过改用 MySQL 的基于行的复制来避免这些问题。