使用 Amazon Aurora MySQL 配置延迟复制
您可以将延迟复制用作 Aurora MySQL 的灾难恢复策略。使用延迟复制,可指定最短的时间(以秒为单位)以延迟从源到只读副本的复制。如果出现灾难(如意外删除了表),可完成以下步骤以快速从灾难恢复:
-
在源发送导致了灾难的更改之前,停止复制到只读副本。使用 mysql.rds_stop_replication 存储过程停止复制。
-
开始复制并指定复制在日志文件位置处自动停止。使用 mysql.rds_start_replication_until(Aurora MySQL 版本 3) 存储过程指定就位于灾难恢复之前的位置。
-
按照将只读副本提升为 Aurora MySQL 的数据库集群中的说明,将只读副本提升为新的源数据库集群。
注意
Aurora MySQL 对于版本 8.4.8 及更高版本支持延迟复制。
-
使用存储过程配置延迟复制。无法使用AWS 管理控制台、AWS CLI 或 Amazon RDS API 配置延迟复制。
-
您可以在 Aurora MySQL 版本 8.4.8 及更高版本上的延迟复制配置中使用基于全局事务标识符(GTID)的复制。
-
如果使用基于 GTID 的复制,请使用 mysql.rds_start_replication_until_gtid(Aurora MySQL 版本 3) 存储过程而不是 mysql.rds_start_replication_until(Aurora MySQL 版本 3) 存储过程。
-
Aurora MySQL 支持多源复制,最多支持 15 个通道。使用
_for_channel过程变体以在特定通道上配置延迟复制。
延迟复制的使用案例
Aurora MySQL 上的延迟复制适用于基于二进制日志的复制。这包括从 Aurora MySQL 写入器数据库集群复制到二进制日志副本、从外部 MySQL 源复制到 Aurora MySQL 数据库集群或跨多源复制通道进行复制。它不适用于单个数据库集群中的 Aurora 副本,因为这些副本是从共享的集群存储中读取的,而不是从二进制日志中读取的。常见使用案例包括:
-
从操作员错误中进行灾难恢复:维护一个比源滞后设定间隔的二进制日志副本。如果破坏性语句无意中运行(例如,删除表),请在源应用更改之前对延迟副本停止复制。然后,使用 mysql.rds_start_replication_until(Aurora MySQL 版本 3)或 mysql.rds_start_replication_until_gtid(Aurora MySQL 版本 3)向前滚动到事件发生之前。最后,提升副本。这种方法提供了比时间点故障恢复更快的恢复路径,而时间点故障恢复需要崩溃恢复和二进制日志重放。
-
防止逻辑数据损坏:延迟副本还可以防止错误的应用程序部署或迁移逐渐损坏数据。由于副本在延迟时长内保持损坏前的状态,因此您可以在应用错误的事务之前进行恢复。
-
主要版本和蓝绿升级:在升级或蓝绿部署期间保留延迟的二进制日志副本作为安全网,以便在升级引入问题时可以回退到已知良好的状态。
-
外部源中的变更数据捕获(CDC):当您从外部 MySQL 源将变更摄入到 Aurora MySQL 数据库集群时,有意延迟会在下游应用变更之前为您提供可控的缓冲区。
-
无需还原即可进行历史检查:查询延迟的副本,以查看您的数据在较早时间的状态。这对于调试、审计或调查所更改的内容很有用,无需预调配克隆或运行时间点还原。
-
在复制滞后下测试应用程序行为:使用人为增大的延迟来验证副本滞后时应用程序的行为方式,并针对滞后敏感的条件运行回归测试,而无需生成繁重的负载来重现滞后。
配置带延迟的外部复制
要配置带有延迟复制的外部源,请使用 mysql.rds_set_external_source_with_delay(Aurora MySQL 版本 8.4.8 及更高版本)存储过程。有关所有复制存储过程的更多信息,请参阅配置、启动和停止二进制日志(binlog)复制。
示例(默认通道):
CALL mysql.rds_set_external_source_with_delay( 'source-host.example.com', 3306, 'repl_user', 'repl_password', 'mysql-bin-changelog.000001', 120, 0, 3600);
示例(特定通道):
CALL mysql.rds_set_external_source_with_delay_for_channel( 'source-host.example.com', 3306, 'repl_user', 'repl_password', 'mysql-bin-changelog.000001', 120, 0, 3600, 'channel_1');
参数
host_name-
外部源的主机名或 IP 地址。
host_port-
外部源的端口号。
replication_user_name-
外部源上的复制用户。
replication_user_password-
复制用户的密码。
mysql_binary_log_file_name-
外部源上二进制日志文件的名称。
mysql_binary_log_file_location-
二进制日志文件中开始复制的位置。
ssl_encryption-
将此参数设置为
1可为复制连接启用 SSL 加密,或设置为0可禁用 SSL 加密。 delay-
以秒为单位的最小延迟(0–259200)。
渠道-
(仅适用于 for_channel 变体)多源复制的通道名称。
约束:
-
Aurora MySQL 支持最多 15 个复制通道。
-
每个通道必须从不同的源(主机:端口组合)进行复制。
-
延迟必须介于 0 到 259200 秒(72 小时)之间。
-
在修改通道配置之前停止复制。
修改现有只读副本的延迟复制
要修改现有只读副本的延迟复制,请运行 mysql.rds_set_source_delay(Aurora MySQL 版本 8.4.8 及更高版本) 存储过程。有关所有复制存储过程的更多信息,请参阅配置、启动和停止二进制日志(binlog)复制。
修改现有只读副本的延迟复制:
-
使用 MySQL 客户端,以管理员用户的身份连接到只读副本。
-
使用 mysql.rds_stop_replication 存储过程停止复制。
-
运行 mysql.rds_set_source_delay(Aurora MySQL 版本 8.4.8 及更高版本) 存储过程。
-
使用 mysql.rds_start_replication 存储过程开始复制。
示例(默认通道):
CALL mysql.rds_set_source_delay(3600);
示例(特定通道):
CALL mysql.rds_set_source_delay_for_channel(3600, 'channel_1');
这指定复制到只读副本至少延迟一个小时(3600 秒)。延迟值必须介于 0 到 259200 秒(72 小时)之间。
注意
在设置延迟之前停止复制。如果复制正在运行,您会收到一个错误,要求您先调用 mysql.rds_stop_replication(或对于特定通道,调用 mysql.rds_stop_replication_for_channel)。
设置停止复制到只读副本的位置
停止复制到只读副本之后,可使用 mysql.rds_start_replication_until(Aurora MySQL 版本 3) 存储过程开始复制,然后在指定二进制日志文件位置处停止复制。
要开始复制并在特定位置停止:
-
使用 MySQL 客户端,以管理员用户的身份连接到只读副本。
-
运行 mysql.rds_start_replication_until(Aurora MySQL 版本 3) 存储过程。
示例:
CALL mysql.rds_start_replication_until( 'mysql-bin-changelog.000777', 120);
这将启动复制并复制更改,直到它到达 mysql-bin-changelog.000777 二进制日志文件中的位置 120。在灾难恢复方案中,假定位置 120 刚好位于灾难之前。
当 Aurora MySQL 到达停止点时,复制自动停止。Aurora MySQL 会生成以下事件:Replication has been stopped since the replica reached the stop point specified by the
rds_start_replication_until stored procedure。
如果使用基于 GTID 的复制,请改用 mysql.rds_start_replication_until_gtid(Aurora MySQL 版本 3)存储过程。
提升只读副本
在灾难恢复方案中,当复制停止后,您可以将只读副本提升为新的源数据库集群。有关提升只读副本的信息,请参阅 将只读副本提升为 Aurora MySQL 的数据库集群。
相关主题
-
有关所有复制存储过程的完整参考,请参阅配置、启动和停止二进制日志(binlog)复制。