文档主页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (美国信纸) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  复制模式概念

19.1.4.1 复制模式概念

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

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

  • GTID 事务由全局事务标识符 (GTID) 标识,GTID 有两种形式:UUID:NUMBERUUID:TAG:NUMBER。二进制日志中的每个 GTID 事务前面都带有 Gtid_log_event。GTID 事务可以通过其 GTID 或通过记录它的文件名称及其在该文件中的位置来寻址。

  • 匿名事务没有 GTID;MySQL 9.0 确保日志中的每个匿名事务前面都带有 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 (二进制日志开启) gtid_next = AUTOMATIC (二进制日志关闭) 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。