Documentation Home

17.1.4.1 复制模式概念

为了能够安全地配置在线服务器的复制模式,了解复制的一些关键概念非常重要。本节解释了这些概念,是尝试修改在线服务器的复制模式之前的必读内容。

MySQL 中可用的复制模式依赖于不同的技术来识别记录的事务。复制使用的事务类型如下:

  • GTID 事务由 形式的全局事务标识符 (GTID) 标识UUID:NUMBER。日志中的每个 GTID 事务总是以 Gtid_log_event. 可以使用 GTID 或使用文件名和位置来解决 GTID 事务。

  • 匿名事务没有分配 GTID,MySQL 确保日志中的每个匿名事务都以Anonymous_gtid_log_event. 在以前的版本中,匿名交易之前没有任何特定事件。匿名交易只能使用文件名和位置来寻址。

使用 GTID 时,您可以利用 GTID 自动定位和自动故障转移,以及 使用 Performance Schema 表使用WAIT_FOR_EXECUTED_GTID_SET()session_track_gtids监视复制的事务。

从运行以前版本的 MySQL 的源接收的中继日志中的事务可能根本没有任何特定事件,但在重放并记录在副本的二进制日志中之后,它们前面有一个 Anonymous_gtid_log_event.

在线配置复制模式的能力意味着gtid_modeenforce_gtid_consistency 变量现在都是动态的,并且可以由具有足以设置全局系统变量的权限的帐户从顶级语句进行设置。请参阅 第 5.1.9.1 节,“系统变量权限”。在 MySQL 5.6 及更早版本中,这两个变量只能在服务器启动时使用适当的选项进行配置,这意味着对复制模式的更改需要重新启动服务器。在所有版本 gtid_mode中都可以设置为 ONOFF,对应是否使用 GTID 来标识事务。什么时候gtid_mode=ON无法复制匿名交易,并且 gtid_mode=OFF只能复制匿名交易。那时 gtid_mode=OFF_PERMISSIVE事务是匿名的, 同时允许复制的事务是 GTID 或匿名事务。然后 事务使用 GTID,同时允许复制的事务是 GTID 或匿名事务。这意味着可以有一个复制拓扑,其中的服务器同时使用匿名和 GTID 事务。例如,一个源 可以复制到一个副本 。的有效值如下,并按以下顺序排列: gtid_mode=ON_PERMISSIVEgtid_mode=ONgtid_mode=ON_PERMISSIVEgtid_mode

  • OFF

  • OFF_PERMISSIVE

  • ON_PERMISSIVE

  • ON

需要注意的是, gtid_mode根据上面的顺序,一次只能改变一个步骤的状态。例如,如果 gtid_mode当前设置为 OFF_PERMISSIVE,则可以更改为 OFFON_PERMISSIVE但不能更改为ON。这是为了确保服务器正确处理在线从匿名事务更改为 GTID 事务的过程。gtid_mode=ON当您在和 之间切换时 gtid_mode=OFF,GTID 状态(换句话说 的值 gtid_executed)是持久的。这确保了服务器已应用的 GTID 集始终被保留,而不管 gtid_mode.

与 GTID 相关的字段显示正确的信息,而不管当前选择的是什么 gtid_mode。这意味着 在 Performance Schema 表中 显示 GTID 集合的字段gtid_executed, 以及 GTID 相关结果 (或在 MySQL 8.0.22 之前, )现在在没有 GTID 时返回空字符串。显示单个 GTID 的字段(例如 在 Performance Schema 表中)现在会在未使用 GTID 事务时显示。 gtid_purgedRECEIVED_TRANSACTION_SETreplication_connection_statusSHOW REPLICA STATUSSHOW SLAVE STATUSCURRENT_TRANSACTIONreplication_applier_status_by_workerANONYMOUS

Replication from a source using gtid_mode=ON提供了使用 GTID 自动定位的能力,使用语句的配置 SOURCE_AUTO_POSITIONCHANGE REPLICATION SOURCE TO 从 MySQL 8.0.23 开始),或者语句的 MASTER_AUTO_POSITION选项 CHANGE MASTER TO(MySQL 8.0.23 之前)。使用的复制拓扑会影响是否可以启用自动定位,因为此功能依赖于 GTID,并且与匿名事务不兼容。强烈建议在启用自动定位之前确保拓扑中没有剩余匿名事务,请参阅 第 17.1.4.2 节,“在线启用 GTID 事务”

源和副本的有效组合 gtid_mode和自动定位如下表所示,其中源的gtid_mode显示在水平方向上,副本的 gtid_mode显示在垂直方向上。每个条目的含义如下:

  • Y: gtid_mode源和副本的兼容

  • N: gtid_mode源和副本不兼容

  • *: 自动定位可以与这个组合一起使用

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

gtid_mode

资源OFF

资源OFF_PERMISSIVE

资源ON_PERMISSIVE

资源ON

复制品OFF

复制品OFF_PERMISSIVE

是*

复制品ON_PERMISSIVE

是*

复制品ON

是*


当前选择的gtid_mode 也会影响gtid_next 变量。gtid_mode 下表显示了服务器对于和的不同值的行为gtid_next。每个条目的含义如下:

  • ANONYMOUS:生成匿名交易。

  • Error: 产生错误,无法执行SET GTID_NEXT

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

  • New GTID:使用自动生成的编号生成 GTID。

表 17.2 gtid_mode 和 gtid_next 的有效组合

gtid_next自动的

二进制登录

gtid_next自动的

二进制注销

gtid_next匿名的

gtid_nextUUID:编号

gtid_mode OFF

匿名的

匿名的

匿名的

错误

gtid_mode OFF_PERMISSIVE

匿名的

匿名的

匿名的

UUID:编号

gtid_mode ON_PERMISSIVE

新GTID

匿名的

匿名的

UUID:编号

gtid_mode ON

新GTID

匿名的

错误

UUID:编号


当二进制日志关闭并 gtid_next设置为 时 AUTOMATIC,则不会生成 GTID。这与以前版本的行为一致。