5.1复制格式

复制之所以能够工作,是因为写入二进制日志的事件是从源读取的,然后在副本上进行处理。在二进制日志中根据事件类型以不同的格式记录事件。使用的不同复制格式对应于在源二进制日志中记录事件时使用的二进制日志格式。二进制日志格式与复制期间使用的术语之间的相关性如下:

  • 当使用基于语句的二进制日志记录时,源程序将SQL语句写入二进制日志。通过在副本上执行SQL语句,将源复制到副本。这叫做statement-based复制(可以缩写为SBR),对应于MySQL基于语句的二进制日志格式。

  • 当使用基于行的日志记录时,源将写入事件到二进制日志,指示单个表行是如何更改的。通过将表示表行更改的事件复制到副本,可以将源复制到副本。这叫做基于行的复制(可以缩写为RBR).

    基于行的日志记录是默认方法。

  • 您还可以将MySQL配置为同时使用基于语句和基于行的日志记录,这取决于哪一种对要记录的更改最合适。这叫做复合格式记录.使用混合格式日志时,默认使用基于语句的日志。根据某些语句以及所使用的存储引擎,日志在特定情况下会自动切换为基于行。使用混合格式的复制称为mixed-based复制复合格式复制.有关更多信息,请参见混合二进制测井格式

NDB集群。MySQL NDB Cluster 8.0默认的二进制日志格式为混合.你应该注意到NDB集群复制总是使用基于行的复制,并且NDB存储引擎与基于语句的复制不兼容。看到NDB集群复制的一般要求,以获取更多资料。

当使用混合格式,二进制日志格式部分由所使用的存储引擎和所执行的语句决定。有关混合格式日志记录和管理不同日志记录格式支持的规则的更多信息,请参见混合二进制测井格式

运行中的MySQL服务器的日志格式可以通过设置binlog_format服务器系统变量。这个变量可以用会话或全局作用域设置。管理新设置何时以及如何生效的规则与其他MySQL服务器系统变量相同。为当前会话设置变量只会持续到会话结束,并且更改对其他会话不可见。全局设置变量对更改后连接的客户端生效,但对任何当前客户端会话无效,包括更改变量设置的会话。要使全局系统变量设置永久,以便在服务器重新启动时应用它,必须在选项文件中设置它。有关更多信息,请参见SET变量赋值语法

在某些情况下,您不能在运行时更改二进制日志格式,或者这样做会导致复制失败。看到设置二进制日志格式

改变全球binlog_formatValue需要足够的权限来设置全局系统变量。更改会话binlog_formatValue需要足够的特权来设置受限制的会话系统变量。看到系统变量权限

基于语句的复制格式和基于行的复制格式有不同的问题和限制。有关它们的相对优点和缺点的比较,请参见第5.1.1节,“基于语句和基于行复制的优缺点”

使用基于语句的复制,您可能会在复制存储的例程或触发器时遇到问题。您可以使用基于行的复制来避免这些问题。有关更多信息,请参见存储程序二进制日志