如何在另一个 AWS 账户中创建 Amazon RDS MySQL 跨区域副本?
我想在与源数据库实例不同的 AWS 区域和账户中创建 Amazon Relational Database Service(Amazon RDS)for MySQL 副本。我该如何操作?
简短描述
您可以在另一个 AWS 区域中为以下使用案例创建 Amazon RDS for MySQL 副本,并从源数据库实例创建账户:
- 改进灾难恢复
- 全球横向扩展
- 在 AWS 区域和账户之间迁移
**注意:**无法直接使用 Amazon RDS 控制台或 AWS 命令行界面(AWS CLI)在另一个 AWS 账户中创建跨区域副本。本文中概述的步骤在不同 AWS 账户或区域中的两个 RDS for MySQL 实例之间设置了基于二进制日志的外部复制。
解决方法
要在另一个 AWS 账户中创建 Amazon RDS for MySQL 跨区域副本,请按照以下步骤操作。
**注意:**账户 A 包含源区域中的主 RDS for MySQL 实例。账户 B 包含目标区域中的 RDS for MySQL 副本。
1. 在账户 A(主要 Amazon RDS for MySQL 实例)中,确保二进制日志记录处于活动状态。默认情况下,在 RDS for MySQL 中激活自动备份和二进制日志记录。每当激活自动备份时,就会激活二进制日志记录。
**注意:**如果将备份保留期从“0”更改为非零值,将发生中断,反之亦然。
2. 使用以下命令更新二进制日志保留期:
mysql> CALL mysql.rds_set_configuration(name,value);
**提示:**选择在复制源上保留二进制日志文件足够长的时间段,以便在删除之前应用更改。Amazon RDS 将二进制日志文件保留在 MySQL 实例上长达 168 个小时(7 天)。有关更多信息,请参阅 mysql.rds_set_configuration。
例如,以下语法将二进制日志保留期设置为 24 小时:
mysql> call mysql.rds_set_configuration('binlog retention hours', 24);
3. 在账户 A 的主实例上创建复制用户,然后授予所需的权限:
mysql> CREATE USER 'repl_user'@'<domain_name>' IDENTIFIED BY '<password>';
4. 向在步骤 3 中创建的用户授予(必需的)REPLICATION CLIENT 和 REPLICATION SLAVE 权限:
mysql> GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'<domain_name>';
5. 选择目标区域,在主账户(账户 A)中创建跨区域只读副本。
6. 在账户 A 中登录已创建的副本实例。然后,确认副本与主数据库实例保持一致:
mysql> SHOW SLAVE STATUS\G
**注意:**检查以确保 Secons_Behind_Master 值为“0”。当此值为“0”时,副本与主数据库实例保持一致。有关详细信息,请参阅监控只读副本。
7. 在将只读副本捕捉到主数据库实例后,停止在步骤 5 中创建的副本实例上的复制。要停止复制,请使用以下语法:
mysql> call mysql.rds_stop_replication();
8. 在副本上运行 SHOW SLAVE STATUS 命令,然后为 Relay_Master_Log_File 和 Exec_Master_Log_Pos 记录输出值。Relay_Master_Log_File 和 Exec_Master_Log_Pos 值是您的二进制日志坐标,用于在后续步骤中设置外部复制。
9. 在账户 A 中创建副本实例的数据库快照。
**(可选)**或者,您可以使用生成逻辑备份的本地工具(例如 mysqldump)从账户 A 中的副本实例中导出数据。然后,使用本地工具将数据导入到账户 B 中相同版本的新创建 RDS for MySQL 实例。使用此方法,您无需在两个账户之间复制和共享快照或 AWS KMS 密钥。如果您决定使用此方法,请跳至步骤 12 以在两个实例之间设置网络访问和复制。在采用此方法之前,您必须将数据导入账户 B 中的 Amazon RDS for MySQL 实例。
10. 与账户 B 共享数据库快照。
**注意:**如果数据库快照已加密,则必须与目标账户共享用于加密快照的 AWS KMS 密钥。有关更多信息,请参阅共享加密快照。
11. 在账户 B 中还原数据库快照。
**注意:**无法通过共享加密快照恢复数据库实例。可以改为创建数据库快照副本,并通过该副本恢复数据库实例。
12. 在账户 A(来源账户)和账户 B(目标账户)之间设置网络访问权限。网络访问权限允许流量在源账户和目标账户之间流动。
13. 为账户 A 的主数据库实例配置入站安全组规则。此配置允许流量从账户 B(目标账户)中新创建的 RDS for MySQL 实例通过公共互联网流动。安全组会保护您的 Amazon RDS for MySQL 实例。
对于私有复制流量,必须在两个 AWS 账户之间创建并接受 VPC 对等连接。
14. 在账户 B 中的目标实例上设置外部复制。在命令中使用 repl_user 作为参数。注意:CALL mysql.rds_set_external_master 命令应由具有执行命令权限的数据库用户运行。
mysql> CALL mysql.rds_set_external_master ( host_name , host_port , replication_user_name , replication_user_password , mysql_binary_log_file_name , mysql_binary_log_file_location );
例如:
mysql> CALL mysql.rds_set_external_master (mytestinnstance.us-east-1.rds.amazonaws.com', 3306, 'repl_user', '<password>', 'mysql-bin-changelog.000031', 107, 0);
**mytestinnstance.us-east-1.rds.amazonaws.com:主实例端点3306:主实例端口repl_user:在步骤 3 中创建的复制用户名密码:在步骤 3 中创建的用户密码mysql-bin-changelog.000031:步骤 8 的输出中的二进制日志文件名107:**步骤 8 的输出中的二进制日志位置
15. 在账户 B 中还原的实例上开始复制:
CALL mysql.rds_start_replication;
以下是示例输出:
+-------------------------+ | Message | +-------------------------+ | Slave running normally. | +-------------------------+
16. 在账户 B 实例上运行以下命令以检查复制状态:
mysql> show replica status \G
**注意:**对于 MySQL 8.0.22 及更高版本,SHOW SLAVE STATUS 已弃用,SHOW REPLICA STATUS 可以使用。有关更多信息,请在 MySQL 网站上参阅检查复制状态。
17. 删除在步骤 5 中创建的副本(作为中间实例)。此副本用于提取二进制日志坐标,而不必暂停账户 A 中的主要实例上的写入操作。
跨区域复制注意事项
考虑以下跨区域复制的方法:
- 源数据库实例可以在多个 AWS 区域中拥有跨区域只读副本。有关更多信息,请参阅在不同的 AWS 区域中创建只读副本。
- 对于与源实例不同的 AWS 区域中的任何只读副本,预计您可能看到更长的延迟时间。产生这种滞后时间的原因是区域数据中心之间的网络通道较长。有关复制滞后时间的信息,请参阅监控只读副本。
- 为跨区域复制而传输的数据会产生 Amazon RDS 数据传输费用。有关这些数据传输费用的更多信息,请参阅跨区域复制成本。
相关信息
相关内容
- 已提问 4 个月前lg...
- AWS 官方已更新 2 个月前
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 3 年前