Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


19.1.4.1 复制模式概念

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

MySQL 复制模式的不同技术用于识别已记录的事务。以下列出了复制中使用的交易类型:

  • GTID 事务由全局事务标识符(GTID)标识,GTID 可以是以下形式之一:UUID:NUMBERUUID:TAG:NUMBER。每个 GTID 事务在二进制日志中都被前缀为 Gtid_log_event。GTID 事务可以通过 GTID 或文件名和位置来地址。

  • 匿名事务没有 GTID;MySQL 8.4 确保每个匿名事务在日志中都被前缀为 Anonymous_gtid_log_event。(在老版本的 MySQL 中,匿名事务不被特定的事件前缀。)匿名事务只能通过文件名和位置来地址。

使用 GTIDs 可以利用 GTID 自动定位和自动故障转移,并使用 WAIT_FOR_EXECUTED_GTID_SET()session_track_gtids 和 Performance Schema 表来监控复制事务(见 Section 29.12.11, “Performance Schema Replication Tables”)。

从源服务器运行的老版本 MySQL 中的交易日志可能不带任何特定的事件,但是在复制服务器的二进制日志中被记录后,它将被前缀为 Anonymous_gtid_log_event

要在线更改复制模式,需要将 gtid_modeenforce_gtid_consistency 变量使用具有足够权限的帐户设置全局系统变量;见 Section 7.1.9.1, “System Variable Privileges”gtid_mode 允许的值列表如下,按顺序列出,及其含义:

  • OFF:只有匿名事务可以被复制。

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

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

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

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

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

下表显示了源和副本的gtid_mode和自动定位的有效组合。每个条目都有以下含义:

  • Y:源和副本的gtid_mode值相容。

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

  • *:可以使用这个组合的自动定位。

表19.1 源和副本的有效组合

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。