View a markdown version of this page

使用 Amazon Aurora MySQL 配置延迟复制 - Amazon Aurora

使用 Amazon Aurora MySQL 配置延迟复制

您可以将延迟复制用作 Aurora MySQL 的灾难恢复策略。使用延迟复制,可指定最短的时间(以秒为单位)以延迟从源到只读副本的复制。如果出现灾难(如意外删除了表),可完成以下步骤以快速从灾难恢复:

  1. 在源发送导致了灾难的更改之前,停止复制到只读副本。使用 mysql.rds_stop_replication 存储过程停止复制。

  2. 开始复制并指定复制在日志文件位置处自动停止。使用 mysql.rds_start_replication_until(Aurora MySQL 版本 3) 存储过程指定就位于灾难恢复之前的位置。

  3. 按照将只读副本提升为 Aurora MySQL 的数据库集群中的说明,将只读副本提升为新的源数据库集群。

注意

Aurora MySQL 对于版本 8.4.8 及更高版本支持延迟复制。

延迟复制的使用案例

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)复制

修改现有只读副本的延迟复制:

  1. 使用 MySQL 客户端,以管理员用户的身份连接到只读副本。

  2. 使用 mysql.rds_stop_replication 存储过程停止复制。

  3. 运行 mysql.rds_set_source_delay(Aurora MySQL 版本 8.4.8 及更高版本) 存储过程。

  4. 使用 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) 存储过程开始复制,然后在指定二进制日志文件位置处停止复制。

要开始复制并在特定位置停止:

  1. 使用 MySQL 客户端,以管理员用户的身份连接到只读副本。

  2. 运行 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 的数据库集群

相关主题