

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

以下内容说明了如何在 Aurora MySQL 集群和外部源之间使用采用二进制日志（binlog）复制的全局事务标识符（GTID）。

**注意**  
对于 Aurora，只能通过对外部 MySQL 数据库使用二进制日志复制的 Aurora MySQL 集群使用此功能。另一个数据库可能是其他 AWS 区域的 Amazon RDS MySQL 实例、本地 MySQL 数据库或 Aurora 数据库集群。要了解如何配置此类复制，请参阅 [Aurora 与 MySQL 之间或 Aurora 与其他 Aurora 数据库集群之间的复制（二进制日志复制）](AuroraMySQL.Replication.MySQL.md)。

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

Aurora MySQL 版本 2 和 3 支持基于 GTID 的复制。

**Topics**
+ [全局事务标识符 (GTID) 概述](#mysql-replication-gtid.overview)
+ [基于 GTID 的复制的参数](#mysql-replication-gtid.parameters)
+ [为 Aurora MySQL 集群启用基于 GTID 的复制](mysql-replication-gtid.configuring-aurora.md)
+ [为Aurora MySQL 数据库集群禁用基于 GTID 的复制](mysql-replication-gtid.disabling.md)

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

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

**注意**  
当 Aurora 在集群中的数据库实例之间同步数据时，该复制机制不会涉及二进制日志 (binlog)。对于 Aurora MySQL，基于 GTID 的复制仅在您还使用二进制日志复制从外部的 MySQL 兼容数据向 Aurora MySQL 数据库集群复制或从中复制时应用。

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

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

 在从外部的 MySQL 兼容数据向 Aurora 集群复制时，通常使用 Aurora 的基于 GTID 的复制。您可以将此复制配置设置为从本地数据库或 Amazon RDS 数据库迁移到 Aurora MySQL 的一部分。如果外部数据库已使用 GTID，为 Aurora 集群启用基于 GTID 的复制可以简化复制过程。

 为 Aurora MySQL 集群配置基于 GTID 的复制的方法是先在数据库集群参数组中设置相关配置参数。然后将该参数组与集群关联。

## 基于 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 的复制，请为 Aurora MySQL 数据库集群的数据库集群参数组使用这些设置：
+ `ON` 和 `ON_PERMISSIVE` 仅适用于从 Aurora MySQL 集群的传出复制。这两个值都可以让 Aurora 数据库集群为复制到外部数据库的事务使用 GTID。`ON` 要求外部数据库也使用基于 GTID 的复制。`ON_PERMISSIVE` 让基于 GTID 的复制成为外部数据库上的可选项。
+ `OFF_PERMISSIVE`（如果设置）表明您的 Aurora 数据库集群可以接受来自外部数据库的传入复制。不论外部数据库是否使用基于 GTID 的复制，它都可以接受。
+  `OFF`（如果设置）表明您的 Aurora 数据库集群只接受来自不使用基于 GTID 的复制的外部数据库的传入复制。

**提示**  
传入复制是 Aurora MySQL 集群最常见的二进制日志复制场景。对于传入复制，建议您将 GTID 模式设置为 `OFF_PERMISSIVE`。该设置允许来自外部数据库的传入复制，不论复制源的 GTID 设置如何。

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