17.1.2.1 Advantages and Disadvantages of Statement-Based and Row-Based Replication
17.1.2.2 Usage of Row-Based Logging and Replication
17.1.2.3 Determination of Safe and Unsafe Statements in Binary Logging
复制之所以有效,是因为从主数据库读取写入二进制日志的事件,然后在从数据库上对其进行处理。根据事件的类型,事件以不同的格式记录在二进制日志中。使用的不同复制格式对应于在主数据库的二进制日志中记录事件时使用的二进制日志记录格式。二进制日志记录格式与复制期间使用的术语之间的相关性是:
使用基于语句的二进制日志记录时,主数据库将SQL语句写入二进制日志。通过在从服务器上执行SQL语句,可以将主服务器复制到从服务器。这称为基于语句的复制(通常缩写为 SBR),它对应于标准的基于MySQL语句的二进制日志记录格式。MySQL版本5.1.4和更早版本中的复制功能仅使用此格式。
使用基于行的日志记录时,主数据库将事件写入 二进制日志,以指示如何更改各个表行。通过将表示对表行的更改的事件复制到从属服务器,可以将主控服务器复制到从属服务器。这称为基于行的复制(通常缩写为 RBR)。在基于行的复制中,主服务器将事件写入 二进制日志,这些事件指示如何更改各个表行。
您还可以配置MySQL以同时使用基于语句的记录和基于行的记录,这取决于哪种记录最适合记录更改。这称为 混合格式日志记录。使用混合格式日志记录时,默认情况下使用基于语句的日志。根据某些语句以及所使用的存储引擎,在特定情况下,日志会自动切换为基于行的日志。使用混合格式的复制通常称为 基于混合的复制 或混合格式的复制。有关更多信息,请参见 第5.4.4.3节“混合二进制日志记录格式”。
在MySQL 5.6中,基于语句的格式是默认格式。
NDB群集。 所有MySQL NDB Cluster 7.3和MySQL NDB Cluster 7.4版本中的默认二进制日志记录格式均为MIXED。您应注意,NDB群集复制始终使用基于行的复制,并且 NDB存储引擎与基于语句的复制不兼容。有关更多信息,请参见 第18.6.2节“ NDB群集复制的一般要求”。
使用MIXED格式时,二进制日志记录格式部分取决于所使用的存储引擎和所执行的语句。有关混合格式日志记录以及支持不同日志记录格式的规则的更多信息,请参见第5.4.4.3节“混合二进制日志记录格式”。
正在运行的MySQL服务器中的日志记录格式是通过设置 binlog_format服务器系统变量。可以使用会话或全局范围设置此变量。控制新设置的生效时间和方式的规则与其他MySQL服务器系统变量的规则相同。设置当前会话的变量仅持续到该会话结束,并且其他会话看不到该更改。全局设置变量对更改后连接的客户端生效,但不适用于任何当前客户端会话,包括更改了变量设置的会话。要使全局系统变量设置永久生效,以便将其应用于服务器重新启动,必须在选项文件中进行设置。有关更多信息,请参见 第13.7.4.1节“变量分配的SET语法”。
在某些情况下,您无法在运行时更改二进制日志记录格式,否则会导致复制失败。请参见第5.4.4.2节“设置二进制日志格式”。
更改全局binlog_format 值需要足够的特权来设置全局系统变量。更改会话 binlog_format值需要足够的特权来设置受限制的会话系统变量。请参见第5.1.8.1节“系统变量特权”。
基于语句的复制格式和基于行的复制格式具有不同的问题和限制。要比较它们的相对优缺点,请参见 第17.1.2.1节“基于语句的复制和基于行的复制的优缺点”。
使用基于语句的复制,复制存储的例程或触发器可能会遇到问题。您可以通过使用基于行的复制来避免这些问题。有关更多信息,请参见第20.7节“存储的程序二进制日志记录”。




