本节解释使用全局事务标识符 (GTID) 的基于事务的复制。使用 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 节,“与全局事务标识符 (GTID) 一起使用的函数”,其中描述了 MySQL 9.0 支持的与 GTID 一起使用的 SQL 函数。