将基于 GTID 的复制用于 Aurora MySQL
接下来,您可以了解到如何在 Aurora MySQL 集群和外部源之间的 中使用采用二进制日志 (binlog) 复制的全局事务标识符 (GTID)。
对于 Aurora,只能通过对外部 MySQL 数据库使用二进制日志复制的 Aurora MySQL 集群使用此功能。另一个数据库可能是其他Amazon区域的 Amazon RDS MySQL 实例、本地 MySQL 数据库或 Aurora 数据库集群。要了解如何配置此类复制,请参阅 Aurora 与 MySQL 之间或 Aurora 与其他 Aurora 数据库集群之间的复制(二进制日志复制)。
如果您使用的是二进制日志复制,不熟悉 MySQL 的基于 GTID 的复制,请参阅 MySQL 文档中的使用全局事务标识符进行复制
Aurora MySQL 版本 2.04 和更高版本中的 MySQL 5.7 兼容集群支持基于 GTID 的复制。Aurora MySQL 版本 1 中的 MySQL 5.6 兼容集群支持基于 GTID 的复制。
全局事务标识符 (GTID) 概述
全局事务标识符 (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 的复制的参数
可以使用以下参数配置基于 GTID 的复制。
参数 | 有效值 | 描述 |
---|---|---|
|
|
|
|
|
|
在 Amazon Web Services Management Console中,gtid_mode
参数显示为 gtid-mode
。
对于基于 GTID 的复制,请为 Aurora MySQL 数据库集群的数据库集群参数组使用这些设置:
-
ON
和ON_PERMISSIVE
仅适用于从 RDS 数据库实例或 Aurora MySQL 集群的传出复制。这两个值都可以让 RDS 数据库实例或 Aurora 数据库集群为复制到外部数据库的事务使用 GTID。ON
要求外部数据库也使用基于 GTID 的复制。ON_PERMISSIVE
让基于 GTID 的复制成为外部数据库上的可选项。 -
OFF_PERMISSIVE
(如果设置)表明您的 RDS 数据库实例或 Aurora 数据库集群可以接受来自外部数据库的传入复制。不论外部数据库是否使用基于 GTID 的复制,它都可以接受。 -
OFF
(如果设置)表明您的 RDS 数据库实例或 Aurora 数据库集群只接受来自不使用基于 GTID 的复制的外部数据库的传入复制。
传入复制是 Aurora MySQL 集群最常见的二进制日志复制场景。对于传入复制,建议您将 GTID 模式设置为 OFF_PERMISSIVE
。该设置允许来自外部数据库的传入复制,不论复制源的 GTID 设置如何。
有关参数组的更多信息,请参阅 使用参数组。
为 Aurora MySQL 集群配置基于 GTID 的复制。
在为 Aurora MySQL 数据库集群启用了基于 GTID 的复制后,GTID 设置将应用于入站和出站两种二进制日志复制。
为 Aurora MySQL 集群启用基于 GTID 的复制
-
使用以下参数设置创建或编辑数据库集群参数组:
-
gtid_mode
–ON
或ON_PERMISSIVE
-
enforce_gtid_consistency
–ON
-
-
将数据库集群参数组与 Aurora MySQL 集群关联。为此,请按照 使用参数组 中的过程进行操作。
-
在 Aurora MySQL 版本 3 及更高版本中,可选择指定如何将 GTID 分配给不包括它们的事务中。为实现此目的,请在 mysql.rds_assign_gtids_to_anonymous_transactions(Aurora MySQL 版本 3 及更高版本) 中调用已存储的过程。
为Aurora MySQL 数据库集群禁用基于 GTID 的复制
您可以为 Aurora MySQL 数据库集群禁用基于 GTID 的复制。这样做意味着 Aurora 集群不能对使用基于 GTID 的复制的外部数据库执行入站或出站二进制日志复制。
在以下过程中,只读副本 表示采用对外部数据库执行二进制日志复制的 Aurora 配置中的复制目标。它不表示只读 Aurora 副本数据库实例。例如,当 Aurora 集群接受来自外部源的传入复制时,Aurora 主实例充当二进制日志复制的只读副本。
有关此部分提到的存储过程的更多详细信息,请参阅 Aurora MySQL 存储过程。
为 Aurora MySQL 数据库集群禁用基于 GTID 的复制
-
在 Aurora 主实例上,运行以下过程。
CALL mysql.rds_set_master_auto_position(0); (Aurora MySQL version 1 and 2) CALL mysql.rds_set_source_auto_position(0); (Aurora MySQL version 3 and higher)
-
将
gtid_mode
重置为ON_PERMISSIVE
。-
确保与 Aurora MySQL 集群关联的数据库集群参数组将
gtid_mode
设置为ON_PERMISSIVE
。有关使用参数组设置配置参数的更多信息,请参阅 使用参数组。
-
重启 Aurora MySQL 数据库集群。
-
-
将
gtid_mode
重置为OFF_PERMISSIVE
:-
确保与 Aurora MySQL 集群关联的数据库集群参数组将
gtid_mode
设置为OFF_PERMISSIVE
。 -
重启 Aurora MySQL 数据库集群。
-
-
-
在 Aurora 主实例上,运行
SHOW MASTER STATUS
命令。您的输出应类似于以下内容。
File Position ------------------------------------ mysql-bin-changelog.000031 107 ------------------------------------
记下输出中的文件和位置。
-
在每个只读副本上,使用上一步中的源实例上的文件和位置信息运行以下查询。
SELECT MASTER_POS_WAIT('
file
',position
);例如,如果文件名是
mysql-bin-changelog.000031
并且位置是107
,请运行以下语句。SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);
如果只读副本超过指定的位置,查询将立即返回。否则,该函数将等待一段时间。在为所有只读副本返回查询时,请转到下一步。
-
-
重置 GTID 参数以禁用基于 GTID 的复制:
-
确保与 Aurora MySQL 集群关联的数据库集群参数组具有以下参数设置:
-
gtid_mode
–OFF
-
enforce_gtid_consistency
–OFF
-
-
重启 Aurora MySQL 数据库集群。
-