Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Replication Formats

19.2.1 复制格式

复制之所以能够工作,是因为事件被写入二进制日志,然后在副本上处理。事件根据事件类型以不同的格式记录在二进制日志中。不同的复制格式对应于源的二进制日志记录格式所使用的术语。

  • 使用基于语句的二进制日志记录时,源将 SQL 语句写入二进制日志。从源到副本的复制通过在副本上执行 SQL 语句来工作。这被称为 基于语句的复制(可以缩写为 SBR),对应于 MySQL 基于语句的二进制日志记录格式。

  • 使用基于行的日志记录时,源将事件写入二进制日志,指示单个表行如何更改。从源到副本的复制通过将表示表行更改的事件复制到副本上来工作。这被称为 基于行的复制(可以缩写为 RBR)。

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

  • 您也可以配置 MySQL 使用基于语句和基于行的日志记录的混合格式,具体取决于要记录的更改类型。这被称为 混合格式日志记录。使用混合格式日志记录时,默认情况下使用基于语句的日志记录。根据特定语句和使用的存储引擎,日志记录自动切换到基于行的日志记录。使用混合格式的复制被称为 混合基于复制混合格式复制。有关更多信息,请参阅 第 7.4.4.3 节,“混合二进制日志记录格式”

NDB 集群  MySQL NDB 集群 8.3 中的默认二进制日志记录格式是 ROW。NDB 集群复制使用基于行的复制;NDB 存储引擎与基于语句的复制不兼容。有关更多信息,请参阅 第 25.7.2 节,“NDB 集群复制的一般要求”

使用 MIXED 格式时,二进制日志记录格式部分取决于使用的存储引擎和执行的语句。有关混合格式日志记录和不同日志记录格式支持规则的更多信息,请参阅 第 7.4.4.3 节,“混合二进制日志记录格式”

正在运行的 MySQL 服务器中的日志记录格式由设置 binlog_format 服务器系统变量控制。该变量可以在会话或全局范围内设置。新设置何时生效的规则与其他 MySQL 服务器系统变量相同。将变量设置为当前会话仅在会话结束时生效,不会影响其他会话。将变量设置为全局将对连接的客户端生效,但不影响当前客户端会话,包括设置变量的会话。要使全局系统变量设置永久生效以便跨服务器重启,请在选项文件中设置。

有一些情况下,您不能在运行时更改二进制日志记录格式,或者这样做会导致复制失败。有关更多信息,请参阅 第 7.4.4.2 节,“设置二进制日志格式”

更改全局 binlog_format 值需要足够的权限来设置全局系统变量。更改会话 binlog_format 值需要足够的权限来设置受限的会话系统变量。请参阅 第 7.1.9.1 节,“系统变量权限”

Note

在 MySQL 8.0 中,二进制日志记录格式 (binlog_format 系统变量) 已被弃用,在未来的 MySQL 版本中,您可以期望 binlog_format 被完全删除,而行基于格式将成为 MySQL 使用的唯一日志记录格式。

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

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