将基于 GTID 的复制用于 Amazon Aurora MySQL - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

将基于 GTID 的复制用于 Amazon Aurora MySQL

接下来,您可以了解到如何在 Aurora MySQL 集群和外部源之间使用采用二进制日志 (binlog) 复制的全局事务标识符 (GTID)。

注意

对于 Aurora,只能通过对外部 MySQL 数据库使用二进制日志复制的 Aurora MySQL 集群使用此功能。另一个数据库可能是其他 Amazon Web Services 区域的 Amazon RDS MySQL 实例、本地 MySQL 数据库或 Aurora 数据库集群。要了解如何配置此类复制,请参阅 Aurora 与 MySQL 之间或 Aurora 与其他 Aurora 数据库集群之间的复制(二进制日志复制)

如果您使用的是二进制日志复制,不熟悉 MySQL 的基于 GTID 的复制,请参阅 MySQL 文档中的使用全局事务标识符进行复制,了解背景信息。

Aurora MySQL 版本 2 和 3 支持基于 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 的复制。

参数 有效值 描述

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 一致性,但在违反一致性时生成警告。

注意

在 Amazon Web Services Management Console中,gtid_mode 参数显示为 gtid-mode

对于基于 GTID 的复制,请为 Aurora MySQL 数据库集群的数据库集群参数组使用这些设置:

  • ONON_PERMISSIVE 仅适用于从 Aurora MySQL 集群的传出复制。这两个值都可以让 Aurora 数据库集群为复制到外部数据库的事务使用 GTID。ON 要求外部数据库也使用基于 GTID 的复制。ON_PERMISSIVE 让基于 GTID 的复制成为外部数据库上的可选项。

  • OFF_PERMISSIVE(如果设置)表明您的 Aurora 数据库集群可以接受来自外部数据库的传入复制。不论外部数据库是否使用基于 GTID 的复制,它都可以接受。

  • OFF(如果设置)表明您的 Aurora 数据库集群只接受来自不使用基于 GTID 的复制的外部数据库的传入复制。

提示

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

有关参数组的更多信息,请参阅 使用参数组

为 Aurora MySQL 集群配置基于 GTID 的复制。

在为 Aurora MySQL 数据库集群启用了基于 GTID 的复制后,GTID 设置将应用于入站和出站两种二进制日志复制。

为 Aurora MySQL 集群启用基于 GTID 的复制
  1. 使用以下参数设置创建或编辑数据库集群参数组:

    • gtid_modeONON_PERMISSIVE

    • enforce_gtid_consistencyON

  2. 将数据库集群参数组与 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 的复制
  1. 在 Aurora 主实例上,运行以下过程。

    CALL mysql.rds_set_master_auto_position(0); (Aurora MySQL version 2) CALL mysql.rds_set_source_auto_position(0); (Aurora MySQL version 3)
  2. gtid_mode 重置为 ON_PERMISSIVE

    1. 确保与 Aurora MySQL 集群关联的数据库集群参数组将 gtid_mode 设置为 ON_PERMISSIVE

      有关使用参数组设置配置参数的更多信息,请参阅 使用参数组

    2. 重启 Aurora MySQL 数据库集群。

  3. gtid_mode 重置为 OFF_PERMISSIVE

    1. 确保与 Aurora MySQL 集群关联的数据库集群参数组将 gtid_mode 设置为 OFF_PERMISSIVE

    2. 重启 Aurora MySQL 数据库集群。

    1. Aurora 主实例上,运行 SHOW MASTER STATUS 命令。

      您的输出应类似于以下内容。

      File Position ------------------------------------ mysql-bin-changelog.000031 107 ------------------------------------

      记下输出中的文件和位置。

    2. 在每个只读副本上,使用上一步中的源实例上的文件和位置信息运行以下查询。

      SELECT MASTER_POS_WAIT('file', position);

      例如,如果文件名是 mysql-bin-changelog.000031 并且位置是 107,请运行以下语句。

      SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);

      如果只读副本超过指定的位置,查询将立即返回。否则,该函数将等待一段时间。在为所有只读副本返回查询时,请转到下一步。

  4. 重置 GTID 参数以禁用基于 GTID 的复制:

    1. 确保与 Aurora MySQL 集群关联的数据库集群参数组具有以下参数设置:

      • gtid_modeOFF

      • enforce_gtid_consistencyOFF

    2. 重启 Aurora MySQL 数据库集群。