

# 使用基于 GTID 的复制
<a name="mysql-replication-gtid"></a>

以下内容说明了如何在 Amazon RDS for MySQL 数据库实例间使用采用二进制日志（binlog）复制的全局事务标识符（GTID）。

如果您使用的是二进制日志复制，不熟悉 MySQL 的基于 GTID 的复制，请参阅 MySQL 文档中的 [Replication with global transaction identifiers](https://dev.mysql.com/doc/refman/5.7/en/replication-gtids.html)。

以下版本支持基于 GTID 的复制：
+ 所有 RDS for MySQL 8.4 版本
+ 所有 RDS for MySQL 8.0 版本
+ 所有 RDS for MySQL 5.7 版本

复制配置中的所有 MySQL 数据库实例均必须满足该版本要求。

**Topics**
+ [全局事务标识符 (GTID) 概述](#mysql-replication-gtid.overview)
+ [基于 GTID 的复制的参数](#mysql-replication-gtid.parameters)
+ [为 RDS for MySQL 的新只读副本启用基于 GTID 的复制](mysql-replication-gtid.configuring-new-read-replicas.md)
+ [为 RDS for MySQL 的现有只读副本启用基于 GTID 的复制](mysql-replication-gtid.configuring-existing-read-replicas.md)
+ [为具有只读副本的 MySQL 数据库实例禁用基于 GTID 的复制](mysql-replication-gtid.disabling.md)

## 全局事务标识符 (GTID) 概述
<a name="mysql-replication-gtid.overview"></a>

*全局事务标识符 (GTID)* 是为提交的 MySQL 事务生成的唯一标识符。您可以使用 GTID 让二进制日志复制的故障排除更加简单便捷。

MySQL 使用两种不同类型的事务进行二进制日志复制：
+ *GTID 事务* – 由 GTID 标识的事务。
+ *匿名事务* – 未分配 GTID 的事务。

在复制配置中，GTID 在所有数据库实例中是唯一的。GTID 简化了复制配置，因为在使用它们时，您不必引用日志文件位置。通过使用 GTID，还可以更轻松地跟踪复制的事务并确定源实例和副本是否一致。

您可以使用基于 GTID 的复制，通过 RDS for MySQL 只读副本复制数据。您可以在创建新的只读副本时配置基于 GTID 的复制，也可以转换现有的只读副本以使用基于 GTID 的复制。

您还可以在与 RDS for MySQL 之间的延迟复制配置中使用基于 GTID 的复制。有关更多信息，请参阅 [使用 MySQL 配置延迟复制](USER_MySQL.Replication.ReadReplicas.DelayReplication.md)。

## 基于 GTID 的复制的参数
<a name="mysql-replication-gtid.parameters"></a>

可以使用以下参数配置基于 GTID 的复制。


| 参数 | 有效值 | 描述 | 
| --- | --- | --- | 
|  `gtid_mode`  |  `OFF`, `OFF_PERMISSIVE`, `ON_PERMISSIVE`, `ON`  |  `OFF` 指定新事务是匿名事务（即，没有 GTID），并且事务必须是匿名事务才能复制。 `OFF_PERMISSIVE` 指定新事务是匿名事务，但可以复制所有事务。 `ON_PERMISSIVE` 指定新事务是 GTID 事务，但可以复制所有事务。 `ON` 指定新事务是 GTID 事务，并且事务必须是 GTID 事务才能复制。  | 
|  `enforce_gtid_consistency`  |  `OFF`, `ON`, `WARN`  |  `OFF` 允许事务违反 GTID 一致性。 `ON` 禁止事务违反 GTID 一致性。 `WARN` 允许事务违反 GTID 一致性，但在违反一致性时生成警告。  | 

**注意**  
在 AWS 管理控制台中，`gtid_mode` 参数显示为 `gtid-mode`。

对于基于 GTID 的复制，请为数据库实例或只读副本的参数组使用这些设置：
+ `ON` 和 `ON_PERMISSIVE` 仅适用于从 RDS 数据库实例的传出复制。这两个值都可以让 RDS 数据库实例为复制的事务使用 GTID。`ON` 要求目标数据库也使用基于 GTID 的复制。`ON_PERMISSIVE` 让基于 GTID 的复制成为目标数据库上的可选项。
+ `OFF_PERMISSIVE`（如果设置）表明您的 RDS 数据库实例可以接受来自源数据库的传入复制。无论源数据库是否使用基于 GTID 的复制，它们都可以这样做。
+ `OFF`（如果设置）表明您的 RDS 数据库实例只接受来自不使用基于 GTID 的复制的源数据库的传入复制。

有关参数组的更多信息，请参阅 [Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。