本节介绍使用全局事务标识符 的基于事务的复制 (GTID)。使用 GTID 时,可以识别和跟踪每个事务,因为它在原始服务器上提交并由任何副本应用;这意味着在启动新副本或故障转移到新源时,没有必要使用 GTID 来引用日志文件或这些文件中的位置,这大大简化了这些任务。因为基于GTID的复制是完全基于事务的,所以很容易判断源和副本是否一致;只要在源上提交的所有事务也在副本上提交,就可以保证两者之间的一致性。您可以将 statement-based 或 row-based 复制与 GTID 一起使用(请参阅第 17.2.1 节,“复制格式”); 但是,为了获得最佳效果,我们建议您使用基于行的格式。
GTID 始终保留在源和副本之间。这意味着您始终可以通过检查其二进制日志来确定应用于任何副本的任何事务的来源。此外,一旦在给定服务器上提交了具有给定 GTID 的事务,该服务器将忽略具有相同 GTID 的任何后续事务。因此,在源上提交的事务只能在副本上应用一次,这有助于保证一致性。
本节讨论以下主题:
如何定义和创建 GTID,以及它们在 MySQL 服务器中的表示方式(请参阅 第 17.1.3.1 节,“GTID 格式和存储”)。
GTID 的生命周期(参见 第 17.1.3.2 节,“GTID 生命周期”)。
用于同步使用 GTID 的副本和源的自动定位功能(请参阅 第 17.1.3.3 节,“GTID 自动定位”)。
设置和启动基于 GTID 的复制的一般过程(请参阅第 17.1.3.4 节,“使用 GTID 设置复制”)。
使用 GTID 时配置新复制服务器的建议方法(请参阅第 17.1.3.5 节,“使用 GTID 进行故障转移和横向扩展”)。
使用基于 GTID 的复制时应注意的限制和限制(请参阅 第 17.1.3.7 节,“使用 GTID 进行复制的限制”)。
可用于处理 GTID 的存储函数(请参阅 第 17.1.3.8 节,“用于操作 GTID 的存储函数示例”)。
有关与基于 GTID 的复制相关的 MySQL 服务器选项和变量的信息,请参阅 第 17.1.6.5 节,“全局事务 ID 系统变量”。另见 第 12.19 节,“与全局事务标识符 (GTID) 一起使用的函数”,它描述了 MySQL 8.0 支持的用于 GTID 的 SQL 函数。