本节解释使用全局事务标识符(GTID)的基于事务的复制。当使用 GTID 时,每个事务都可以被标识和跟踪,从源服务器提交到副本服务器应用,这意味着不需要在启动新副本或故障转移到新源时引用日志文件或文件中的位置,从而大大简化了这些任务。因为 GTID 基于事务的复制是完全基于事务的,所以可以简单地确定源服务器和副本服务器的一致性;只要所有在源服务器上提交的事务也在副本服务器上提交,一致性就可以保证。你可以使用基于语句或基于行的复制与 GTID(见 第 19.2.1 节,“复制格式”);然而,我们建议你使用基于行的格式。
GTID 始终在源服务器和副本服务器之间保持不变。这意味着你可以通过检查副本服务器的二进制日志来确定任何事务的源服务器。此外,一旦事务具有给定的 GTID 在给定的服务器上提交,任何后续事务具有相同的 GTID 将被该服务器忽略。因此,源服务器上的事务可以在副本服务器上应用不超过一次,从而帮助保证一致性。
本节讨论以下主题:
-
GTID 是如何定义和创建的,以及它们在 MySQL 服务器中的表示形式(见 第 19.1.3.1 节,“GTID 格式和存储”)。
-
GTID 的生命周期(见 第 19.1.3.2 节,“GTID 生命周期”)。
-
使用 GTID 的自动定位功能来同步副本服务器和源服务器(见 第 19.1.3.3 节,“GTID 自动定位”)。
-
使用 GTID 设置复制的通用过程(见 第 19.1.3.4 节,“使用 GTID 设置复制”)。
-
使用 GTID 实现故障转移和扩展的建议方法(见 第 19.1.3.5 节,“使用 GTID 实现故障转移和扩展”)。
-
使用 GTID 复制时需要注意的限制和限制(见 第 19.1.3.7 节,“使用 GTID 的限制”)。
-
用于操作 GTID 的存储函数示例(见 第 19.1.3.8 节,“用于操作 GTID 的存储函数示例”)。
有关基于GTID的复制的MySQL Server选项和变量的信息,请参阅第 19.1.6.5 节,“全局事务 ID 系统变量”。另见第 14.18.2 节,“使用全局事务标识符(GTIDs)的函数”,该节描述了 MySQL 8.3 支持的用于 GTIDs 的 SQL 函数。