使用 MySQL 配置延迟复制
可以使用延迟复制作为灾难恢复策略。使用延迟复制,可指定最短的时间(以秒为单位)以延迟从源到只读副本的复制。如果出现灾难(如意外删除了表),可完成以下步骤以快速从灾难恢复:
-
在导致灾难的更改发送到它之前停止复制到只读副本。
使用 mysql.rds_stop_replication 存储过程停止复制。
-
开始复制并指定复制在日志文件位置处自动停止。
使用 mysql.rds_start_replication_until 存储过程指定就位于灾难恢复之前的位置。
-
按照将只读副本提升为独立的数据库实例中的说明,将只读副本提升为新的源数据库实例。
注意
-
在 RDS for MySQL 8.0 上,支持针对 MySQL 8.0.28 及更高版本的延迟复制。在 RDS for MySQL 5.7 上,支持针对 MySQL 5.7.44 及更高版本的延迟复制。
-
使用存储过程配置延迟复制。无法使用Amazon Web Services Management Console、Amazon CLI 或 Amazon RDS API 配置延迟复制。
-
在 RDS for MySQL 5.7.44 和更高的 MySQL 5.7 版本以及 RDS for MySQL 8.0.28 和更高的 8.0.x 版本中,您可以在延迟复制配置中使用基于全局事务标识符(GTID)的复制。如果使用基于 GTID 的复制,请使用 mysql.rds_start_replication_until_gtid 存储过程而不是 mysql.rds_start_replication_until 存储过程。有关基于 GTID 的复制的更多信息,请参阅使用基于 GTID 的复制。
在创建只读副本时配置延迟复制
要为未来通过数据库实例创建的任何只读副本配置延迟复制,请使用 mysql.rds_set_configuration 参数运行 target delay
存储过程。
在创建只读副本时配置延迟复制
-
通过使用 MySQL 客户端,以主用户身份连接到作为只读副本源的 MySQL 数据库实例。
-
使用 mysql.rds_set_configuration 参数运行
target delay
存储过程。例如,运行以下存储过程,针对从当前数据库实例创建的任何只读副本,指定将复制延迟至少一小时(3600 秒)。
call mysql.rds_set_configuration('target delay', 3600);
注意
运行此存储过程之后,将为使用 Amazon CLI 或 Amazon RDS API 创建的任何只读副本配置延迟指定秒数的复制。
修改现有只读副本的延迟复制
要修改现有只读副本的延迟复制,请运行 mysql.rds_set_source_delay 存储过程。
修改现有只读副本的延迟复制
-
使用 MySQL 客户端,以主用户的身份连接到只读副本。
-
使用 mysql.rds_stop_replication 存储过程停止复制。
-
运行 mysql.rds_set_source_delay 存储过程。
例如,运行以下存储过程,指定复制到只读副本延迟至少一小时(3600 秒)。
call mysql.rds_set_source_delay(3600);
-
使用 mysql.rds_start_replication 存储过程开始复制。
设置停止复制到只读副本的位置
停止复制到只读副本之后,可使用 mysql.rds_start_replication_until 存储过程开始复制,然后在指定二进制日志文件位置处停止复制。
开始复制到只读副本并在特定位置处停止复制
-
通过使用 MySQL 客户端,以主用户的身份连接到源 MySQL 数据库实例。
-
运行 mysql.rds_start_replication_until 存储过程。
以下示例将启动复制并复制更改,直到它到达
120
二进制日志文件中的mysql-bin-changelog.000777
位置。在灾难恢复方案中,假定位置120
刚好位于灾难之前。call mysql.rds_start_replication_until( 'mysql-bin-changelog.000777', 120);
当到达停止点时,复制将自动停止。将生成以下 RDS 事件:Replication has been stopped since the replica reached the stop point specified by the
rds_start_replication_until stored procedure
。
提升只读副本
在灾难恢复方案中,当复制停止后,您可以将只读副本提升为新的源数据库实例。有关提升只读副本的信息,请参阅 将只读副本提升为独立的数据库实例。