使用 GTID 复制事务 - Amazon Aurora

使用 GTID 复制事务

以下存储过程控制如何使用 Aurora MySQL 中的全局事务标识符(GTID)复制事务。要了解如何根据 Aurora MySQL 中的 GTID 使用复制,请参阅使用基于 GTID 的复制

mysql.rds_assign_gtids_to_anonymous_transactions(Aurora MySQL 版本 3)

配置 CHANGE REPLICATION SOURCE TO 语句的 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 选项。它使得复制通道将 GTID 分配给没有 GTID 的复制事务。这样,您就可以将二进制日志从不使用基于 GTID 的复制的源复制到使用该复制的副本。有关更多信息,请参阅 MySQL 参考手册中的 CHANGE REPLICATION SOURCE TO 语句从没有 GTID 的源复制到有 GTID 的副本

语法

CALL mysql.rds_assign_gtids_to_anonymous_transactions(gtid_option);

参数

gtid_option

字符串值。允许的值为 OFFLOCAL 或者指定的 UUID。

使用说明

此过程与在社群 MySQL 中发布语句 CHANGE REPLICATION SOURCE TO ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = gtid_option 的效果相同。

GTID 必须转向 ON 才能使 gtid_option 设置为 LOCAL 或指定的 UUID。

原定设置值为 OFF,这意味着不使用该功能。

LOCAL 会分配一个 GTID,其中包括副本自己的 UUID(server_uuid 设置)。

传递一个作为 UUID 的参数会分配一个包含指定 UUID 的 GTID,例如复制源服务器的 server_uuid 设置。

示例

要关闭此功能:

mysql> call mysql.rds_assign_gtids_to_anonymous_transactions('OFF'); +-------------------------------------------------------------+ | Message | +-------------------------------------------------------------+ | ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS has been set to: OFF | +-------------------------------------------------------------+ 1 row in set (0.07 sec)

要使用副本自己的 UUID:

mysql> call mysql.rds_assign_gtids_to_anonymous_transactions('LOCAL'); +---------------------------------------------------------------+ | Message | +---------------------------------------------------------------+ | ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS has been set to: LOCAL | +---------------------------------------------------------------+ 1 row in set (0.07 sec)

要使用指定的 UUID:

mysql> call mysql.rds_assign_gtids_to_anonymous_transactions('317a4760-f3dd-3b74-8e45-0615ed29de0e'); +----------------------------------------------------------------------------------------------+ | Message | +----------------------------------------------------------------------------------------------+ | ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS has been set to: 317a4760-f3dd-3b74-8e45-0615ed29de0e | +----------------------------------------------------------------------------------------------+ 1 row in set (0.07 sec)

mysql.rds_gtid_purged(Aurora MySQL 版本 3)

将系统变量 gtid_purged 的全局值设置为给定的全局事务标识符(GTID)集。gtid_purged 系统变量是一个 GTID 集,由服务器上已提交但不存在于服务器上任何二进制日志文件中的所有事务的 GTID 组成。

为了与 MySQL 8.0 兼容,有两种方法可以设置 gtid_purged 的值:

  • gtid_purged 的值替换为指定的 GTID 集。

  • 将您指定的 GTID 集附加到 gtid_purged 已经包含的 GTID 集。

语法

要将 gtid_purged 的值替换为您指定的 GTID 集,请执行以下操作:

CALL mysql.rds_gtid_purged (gtid_set);

要将 gtid_purged 的值附加到您指定的 GTID 集,请执行以下操作:

CALL mysql.rds_gtid_purged (+gtid_set);

参数

gtid_set

gtid_set 的值必须是 gtid_purged 的当前值的超集,并且不能与 gtid_subtract(gtid_executed,gtid_purged) 相交。也就是说,新的 GTID 集必须包括 gtid_purged 中已经存在的任何 GTID,并且不能包括 gtid_executed 中尚未清除的任何 GTID。gtid_set 参数也不能包括全局 gtid_owned 集中的任何 GTID,即当前服务器上正在处理的事务的 GTID。

使用说明

主用户必须运行 mysql.rds_gtid_purged 过程。

Aurora MySQL 版本 3.04 及更高版本支持该过程。

示例

以下示例将 GTID 3E11FA47-71CA-11E1-9E33-C80AA9429562:23 分配给 gtid_purged 全局变量。

CALL mysql.rds_gtid_purged('3E11FA47-71CA-11E1-9E33-C80AA9429562:23');

mysql.rds_skip_transaction_with_gtid(Aurora MySQL 版本 2 和 3)

在 Aurora 主实例上跳过复制具有指定全局事务标识符 (GTID) 的事务。

在已知特定 GTID 事务导致问题时,您可以使用该过程进行灾难恢复。请使用该存储过程跳过有问题的事务。有问题的事务示例包括禁用复制、删除重要数据或导致数据库实例变得不可用的事务。

语法

CALL mysql.rds_skip_transaction_with_gtid ( gtid_to_skip );

参数

gtid_to_skip

要跳过的复制事务的 GTID。

使用说明

主用户必须运行 mysql.rds_skip_transaction_with_gtid 过程。

Aurora MySQL 版本 2 和 3 支持该过程。

示例

以下示例将跳过复制具有 GTID 3E11FA47-71CA-11E1-9E33-C80AA9429562:23 的事务。

CALL mysql.rds_skip_transaction_with_gtid('3E11FA47-71CA-11E1-9E33-C80AA9429562:23');

mysql.rds_start_replication_until_gtid(Aurora MySQL 版本 3)

Aurora MySQL 数据库集群中启动复制,并在指定的全局事务标识符(GTID)后面立即停止复制。

语法

CALL mysql.rds_start_replication_until_gtid(gtid);

参数

gtid

停止复制前的 GTID。

使用说明

主用户必须运行 mysql.rds_start_replication_until_gtid 过程。

Aurora MySQL 版本 3.04 及更高版本支持该过程。

托管式复制不支持 mysql.rds_start_replication_until_gtid 存储过程,其中包括以下内容:

gtid 参数指定副本已运行的事务时,将会立即停止复制。

示例

以下示例启动复制并复制更改,直至到达 GTID 3E11FA47-71CA-11E1-9E33-C80AA9429562:23

call mysql.rds_start_replication_until_gtid('3E11FA47-71CA-11E1-9E33-C80AA9429562:23');