#### 5.4.4.1 二进制日志记录格式

服务器使用几种日志格式在二进制日志中记录信息：

-   MySQL 中的复制功能最初是基于 SQL 语句从源到副本的传播。这就是所谓的*基于语句的日志记录*.您可以通过使用以下命令启动服务器来使用此格式[`--binlog-format=声明`](replication-options-binary-log.html#sysvar_binlog_format).

-   在*基于行的日志记录*（默认值），源将事件写入二进制日志，指示单个表行如何受到影响。您可以通过启动服务器来使服务器使用基于行的日志记录[`--binlog-格式=行`](replication-options-binary-log.html#sysvar_binlog_format).

-   第三个选项也可用：*混合测井*.对于混合日志，默认使用基于语句的日志，但在某些情况下，日志模式会自动切换为基于行的日志，如下所述。您可以通过启动使 MySQL 显式使用混合日志记录[**mysqld**](mysqld.html)有选项[`--binlog-format=混合`](replication-options-binary-log.html#sysvar_binlog_format).

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

    对于基于语句的复制，复制非确定性语句可能会出现问题。在确定给定语句对于基于语句的复制是否安全时，MySQL 确定它是否可以保证可以使用基于语句的日志记录来复制该语句。如果 MySQL 不能做出这种保证，它会将语句标记为可能不可靠并发出警告，Statement may not be safe to log in statement 格式。

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