16.1.3 使用全局事务标识符进行复制
本节说明使用全局事务标识符(GTID)的基于事务的复制。使用 GTID 时,每笔 Transaction 都可以在提交到原始服务器上并由任何副本应用时进行标识和跟踪。这意味着在启动新副本或故障转移到新源时,使用 GTID 引用日志文件或这些文件中的位置时没有必要,这极大地简化了这些任务。由于基于 GTID 的复制完全基于事务,因此很容易确定源和副本是否一致;只要在源上提交的所有事务也都在副本上提交,则可以保证两者之间的一致性。您可以对 GTID 使用基于语句的复制或基于行的复制(请参见第 16.2.1 节“复制格式”);但是,为了获得最佳结果,我们建议您使用基于行的格式。
GTID 始终在源和副本之间保留。这意味着您始终可以通过检查二进制日志来确定应用于任何副本的任何事务的源。另外,一旦在给定服务器上提交了具有给定 GTID 的事务,该服务器将忽略具有相同 GTID 的任何后续事务。因此,在源上提交的事务只能在副本上应用一次以上,这有助于确保一致性。
本节讨论以下主题:
-
GTID 的定义和创建方式,以及它们在 MySQL 服务器中的 table 示方式(请参见第 16.1.3.1 节,“ GTID 格式和存储”)。
-
GTID 的生命周期(请参阅第 16.1.3.2 节“ GTID 生命周期”)。
-
自动定位功能,用于同步使用 GTID 的副本和源(请参见第 16.1.3.3 节“ GTID 自动定位”)。
-
设置和启动基于 GTID 的复制的常规过程(请参见第 16.1.3.4 节,“使用 GTID 设置复制”)。
-
使用 GTID 时配置新复制服务器的建议方法(请参阅第 16.1.3.5 节,“使用 GTID 进行故障转移和横向扩展”)。
-
使用基于 GTID 的复制时应了解的限制和限制(请参见第 16.1.3.6 节,“使用 GTID 复制的限制”)。
-
可用于处理 GTID 的存储函数(请参见第 16.1.3.7 节“用于操纵 GTID 的存储函数示例”)。
有关与基于 GTID 的复制相关的 MySQL Server 选项和变量的信息,请参见第 16.1.6.5 节“全局事务 ID 系统变量”。另请参见第 12.18 节“与全局事务标识符一起使用的函数”,它描述了 MySQL 5.7 支持与 GTID 一起使用的 SQL 函数。