AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
如何在另一个 AWS 账户中创建 Amazon RDS for MySQL 数据库实例的跨区域只读副本?
我想在不同的 AWS 账户中创建源数据库实例的 Amazon Relational Database Service (Amazon RDS) for MySQL 跨区域副本。
简短描述
使用 AWS Database Migration Service (AWS DMS),或者在不同 AWS 区域或账户中的两个 Amazon RDS for MySQL 数据库实例之间设置基于二进制日志的外部复制。您不能使用 Aurora 和 RDS 控制台或 AWS 命令行界面 (AWS CLI) 在另一个账户中创建跨区域只读副本。
注意: 在区域数据中心之间使用更长的网络通道创建跨区域只读副本时,您可能会遇到复制滞后的问题。此外,还会产生跨区域复制成本。
解决方法
注意: 在以下解决方法中,账户 A 包含源区域中的主数据库实例。账户 B 包含目标区域中的副本数据库实例。
要在另一个账户中创建 Amazon RDS for MySQL 跨区域只读副本,请完成以下步骤:
-
对于账户 A,激活二进制日志记录。
注意: 当您更改备份保留期时,会发生中断。此外,传输数据会产生额外费用。 -
运行以下命令即可更新您的二进制日志保留期:
mysql> call mysql.rds_set_configuration('binlog retention hours', value);注意: 请将 value 替换为更改生效前需等待的时数,上限为 168 小时。更改生效后,Amazon RDS 将会删除二进制日志。有关详细信息,请参阅 mysql.rds_set_configuration。
-
运行以下命令,在账户 A 的主数据库实例上创建复制用户:
mysql> CREATE USER 'repl_user'@'domain_name' IDENTIFIED BY 'password';注意: 请将 domain_name 和 password 替换为您的域名和密码。有关信息,请参阅 MySQL 网站上的 CREATE USER statement(CREATE USER 语句)。
-
运行以下命令,向复制用户授予所需的权限:
mysql> GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'domain_name';注意: 请将 domain_name 替换为您的域名。有关信息,请参阅 MySQL 网站上的 REPLICATION CLIENT 和 REPLICATION SLAVE。
-
为账户 A 创建跨区域只读副本,然后选择目标区域。
-
登录到您为账户 A 创建的数据库实例的只读副本。然后,运行以下命令以确认只读副本的状态与主数据库实例的状态一致。
MySQL 8.0 及更早版本:mysql> show slave status \GMySQL 8.4 及更高版本:
mysql> show replica status \G注意: 当 Seconds_Behind_Master 的值为 0 时,只读副本的状态一致。
-
在副本数据库实例上运行以下命令以停止复制:
mysql> call mysql.rds_stop_replication(); -
登录到副本数据库实例。
-
运行以下命令以记录输出值。
MySQL 8.0 及更早版本:mysql> show slave status \GMySQL 8.4 及更高版本:
mysql> show replica status \G注意: 记下 Relay_Master_Log_File 和 Exec_Master_Log_Pos 的输出值。这些输出值就是您可以在后续步骤中使用的二进制日志坐标。
-
为账户 A 的副本数据库实例创建数据库快照。
-
(可选)要生成逻辑备份并从账户 A 的副本数据库实例中导出数据,您可以使用原生工具,例如 mysqldump。有关详细信息,请参阅 MySQL 网站上的 mysqldump — A database backup program(mysqldump — 数据库备份程序)。使用 mysqldump 将数据导入账户 B 的相同版本的新数据库实例。您无需在两个账户之间复制和共享快照或 AWS Key Management Service (AWS KMS) 密钥。
注意: 如果使用 mysqldump,请在将数据导入账户 B 的数据库实例后继续执行步骤 14。 -
与账户 B 共享数据库快照。
注意: 如果您的数据库快照已加密,您还必须与账户 B 共享 AWS KMS 密钥。有关详细信息,请参阅共享 Amazon RDS 的加密快照。 -
在账户 B 中恢复数据库快照。
注意: 您无法从共享的加密快照恢复数据库实例。相反,先复制数据库快照,然后从复制的版本中恢复数据库实例。 -
在账户 A 和账户 B 之间设置网络访问权限,以允许流量在两个账户之间流动。
-
在账户 A 的主数据库实例中配置入站安全组规则,以允许来自账户 B 中的数据库实例的流量访问公共互联网。
注意: 对于私有复制流量,您必须在两个账户之间创建并接受虚拟私有云 (VPC) 对等连接。 -
要在账户 B 的目标数据库实例上设置外部复制,请以超级用户的身份运行以下命令。
MySQL 8.0 及更早版本:
mysql> CALL mysql.rds_set_external_master ('host_name', 'host_port', 'repl_user_name', 'replication_user_password', 'mysql_binary_log_file_name', 'mysql_binary_log_file_location');
MySQL 8.4 及更高版本:
mysql> CALL mysql.rds_set_external_source ('host_name', 'host_port', 'repl_user_name', 'replication_user_password', 'mysql_binary_log_file_name', 'mysql_binary_log_file_location');
注意: 将 host_name 替换为主数据库实例端点,将 host_port 替换为主数据库实例端口。将 replication_user_name 和 replication_user_password 替换为您在步骤 3 中创建的域名和密码。将 mysql_binary_log_file_name 替换为二进制日志文件名,将 mysql_binary_log_file_location 替换为您在步骤 9 中记下的二进制日志坐标。 17. 对于账户 B,在已恢复的数据库实例上运行以下命令以开始复制:
CALL mysql.rds_start_replication;
输出示例:
+-------------------------+ | Message | +-------------------------+ | Replica running normally. | +-------------------------+
- 运行以下命令来检查账户 B 的副本状态。
MySQL 8.0 及更早版本:
mysql> show slave status \G
MySQL 8.4 及更高版本:
mysql> show replica status \G
- 删除您在步骤 5 中创建的只读副本。

