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

19.1.4.1 复制模式概念

在在线服务器上设置复制模式之前,了解一些关键的复制概念非常重要。本节解释了这些概念,并且是尝试修改在线服务器的复制模式之前的必读内容。

MySQL 中的复制模式依赖于不同的技术来标识日志事务。以下是复制中使用的事务类型:

  • GTID 事务由全局事务标识符(GTID)标识,GTID 采用以下两种形式:UUID:NUMBERUUID:TAG:NUMBER。每个 GTID 事务在二进制日志中都以 Gtid_log_event 开头。GTID 事务可以通过其 GTID 或文件名和位置来寻址。

  • 匿名事务没有 GTID;MySQL 8.3 确保每个匿名事务在日志中都以 Anonymous_gtid_log_event 开头。(在旧版本的 MySQL 中,匿名事务不以任何特定事件开头。)匿名事务只能通过文件名和位置来寻址。

使用 GTID 可以利用 GTID 自动定位和自动故障转移,并使用 WAIT_FOR_EXECUTED_GTID_SET()session_track_gtids 和性能模式表来监控复制事务(见 第 29.12.11 节,“性能模式复制表”)。

来自旧版本 MySQL 源的中继日志事务可能不以任何特定事件开头,但在被重放并记录到副本的二进制日志中时,以 Anonymous_gtid_log_event 开头。

要在线更改复制模式,需要使用具有足够权限的帐户设置 gtid_modeenforce_gtid_consistency 变量;见 第 7.1.9.1 节,“系统变量权限”。允许的 gtid_mode 值如下,以其含义排序:

  • OFF:只能复制匿名事务。

  • OFF_PERMISSIVE:新事务是匿名的;复制的事务可以是 GTID 或匿名。

  • ON_PERMISSIVE:新事务使用 GTID;复制的事务可以是 GTID 或匿名。

  • ON:所有事务必须具有 GTID;匿名事务不能被复制。

在同一个复制拓扑结构中,可以同时使用匿名和 GTID 事务的服务器。例如,源服务器使用 gtid_mode=ON 可以复制到使用 gtid_mode=ON_PERMISSIVE 的副本。

从使用 gtid_mode=ON 的源服务器复制提供了使用 GTID 自动定位的能力,使用 SOURCE_AUTO_POSITION 选项配置的 CHANGE REPLICATION SOURCE TO 语句。当前使用的复制拓扑结构对是否可以启用自动定位产生影响,因为该功能依赖于 GTID 并且与匿名事务不兼容。强烈建议在启用自动定位之前确保拓扑结构中没有匿名事务;见 第 19.1.4.2 节,“在线启用 GTID 事务”

源服务器和副本服务器上的 gtid_mode 和自动定位的有效组合如下表所示。每个条目的含义如下:

  • Y:源服务器和副本服务器上的 gtid_mode 值是兼容的。

  • N:源和副本的gtid_mode值不兼容。

  • *:可以使用自动定位与该组合值。

表 19.1 源和副本 gtid_mode 的有效组合

gtid_mode

OFF

OFF_PERMISSIVE

ON_PERMISSIVE

ON

副本 OFF

Y

Y

N

N

副本 OFF_PERMISSIVE

Y

Y

Y

Y*

副本 ON_PERMISSIVE

Y

Y

Y

Y*

副本 ON

N

N

Y

Y*


当前的gtid_mode值也影响gtid_next。下表显示了服务器在不同gtid_modegtid_next值组合下的行为。每个条目的含义如下:

  • ANONYMOUS:生成匿名事务。

  • Error:生成错误,不执行 SET GTID_NEXT

  • UUID:NUMBER:生成具有指定 UUID:NUMBER 的 GTID。

  • UUID:TAG:NUMBER:生成具有指定 UUID:TAG:NUMBER 的 GTID。

  • New GTID:生成具有自动生成编号的 GTID。

表 19.2 gtid_mode 和 gtid_next 的有效组合

gtid_next = AUTOMATIC (binary log on) gtid_next = AUTOMATIC (binary log off) gtid_next = AUTOMATIC:<TAG> gtid_next = ANONYMOUS gtid_next = <UUID>:<NUMBER> gtid_next = <UUID>:<TAG>:<NUMBER>
gtid_mode = OFF ANONYMOUS ANONYMOUS Error ANONYMOUS Error Error
gtid_mode = OFF_PERMISSIVE ANONYMOUS ANONYMOUS Error ANONYMOUS <UUID>:<NUMBER> <UUID>:<TAG>:<NUMBER>
gtid_mode = ON_PERMISSIVE New GTID ANONYMOUS New GTID ANONYMOUS <UUID>:<NUMBER> <UUID>:<TAG>:<NUMBER>
gtid_mode = ON New GTID ANONYMOUS New GTID Error <UUID>:<NUMBER> <UUID>:<TAG>:<NUMBER>

当不使用二进制日志记录时,如果gtid_nextAUTOMATIC,则不生成 GTID。