16.2.1.2 基于行的日志记录和复制的用法

MySQL 使用基于语句的日志(SBL),基于行的日志(RBL)或混合格式的日志。所使用的二进制日志的类型会影响日志的大小和效率。因此,在基于行的复制(RBR)或基于语句的复制(SBR)之间进行选择取决于您的应用程序和环境。本节介绍在使用基于行的格式日志时的已知问题,并介绍在复制中使用它的一些最佳实践。

有关更多信息,请参见第 16.2.1 节“复制格式”第 16.2.1.1 节,“基于语句的复制和基于行的复制的优缺点”

有关特定于 NDB 群集复制(取决于基于行的复制)的问题的信息,请参阅第 21.6.3 节“ NDB 群集复制中的已知问题”

使用基于行的格式时,不会复制临时 table,因为没有必要。此外,由于只能从创建临时 table 的线程中读取临时 table,因此即使使用基于语句的格式,复制临时 table 也几乎没有好处。

即使已创建临时 table,也可以在运行时从基于语句的二进制记录格式切换为基于行的二进制记录格式。从 MySQL 5.7.25 开始,MySQL 服务器跟踪创建每个临时 table 时生效的日志记录模式。当给定的 Client 端会话结束时,服务器为每个临时 table 记录一个DROP TEMPORARY TABLE IF EXISTS语句,该临时 table 在使用基于语句的二进制日志记录时创建并创建。如果在创建 table 时使用了基于行或混合格式的二进制日志记录,则不会记录DROP TEMPORARY TABLE IF EXISTS语句。在以前的版本中,无论有效的日志记录模式如何,都记录了DROP TEMPORARY TABLE IF EXISTS语句。

使用binlog_format=ROW时,允许使用涉及临时 table 的非事务 DML 语句,只要受该语句影响的任何非事务 table 都是临时 table 即可(错误#14272672)。

对于其他情况,通常将slave_exec_mode设置为STRICT即可;这是NDB以外的存储引擎的默认值。

首页