跳至内容

如何在另一个 AWS 账户中创建 Amazon RDS for MySQL 数据库实例的跨区域只读副本?

2 分钟阅读
0

我想在不同的 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 跨区域只读副本,请完成以下步骤:

  1. 对于账户 A,激活二进制日志记录
    注意: 当您更改备份保留期时,会发生中断。此外,传输数据会产生额外费用

  2. 运行以下命令即可更新您的二进制日志保留期:

    mysql> call mysql.rds_set_configuration('binlog retention hours', value);

    注意: 请将 value 替换为更改生效前需等待的时数,上限为 168 小时。更改生效后,Amazon RDS 将会删除二进制日志。有关详细信息,请参阅 mysql.rds_set_configuration

  3. 运行以下命令,在账户 A 的主数据库实例上创建复制用户:

    mysql> CREATE USER 'repl_user'@'domain_name' IDENTIFIED BY 'password';

    注意: 请将 domain_namepassword 替换为您的域名和密码。有关信息,请参阅 MySQL 网站上的 CREATE USER statement(CREATE USER 语句)

  4. 运行以下命令,向复制用户授予所需的权限:

    mysql> GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'domain_name';

    注意: 请将 domain_name 替换为您的域名。有关信息,请参阅 MySQL 网站上的 REPLICATION CLIENTREPLICATION SLAVE

  5. 为账户 A 创建跨区域只读副本,然后选择目标区域。

  6. 登录到您为账户 A 创建的数据库实例的只读副本。然后,运行以下命令以确认只读副本的状态与主数据库实例的状态一致。
    MySQL 8.0 及更早版本:

    mysql> show slave status \G

    MySQL 8.4 及更高版本:

    mysql> show replica status \G

    注意:Seconds_Behind_Master 的值为 0 时,只读副本的状态一致。

  7. 在副本数据库实例上运行以下命令以停止复制:

    mysql> call mysql.rds_stop_replication();
  8. 登录到副本数据库实例。

  9. 运行以下命令以记录输出值。
    MySQL 8.0 及更早版本:

    mysql> show slave status \G

    MySQL 8.4 及更高版本:

    mysql> show replica status \G

    注意: 记下 Relay_Master_Log_FileExec_Master_Log_Pos 的输出值。这些输出值就是您可以在后续步骤中使用的二进制日志坐标。

  10. 为账户 A 的副本数据库实例创建数据库快照

  11. (可选)要生成逻辑备份并从账户 A 的副本数据库实例中导出数据,您可以使用原生工具,例如 mysqldump。有关详细信息,请参阅 MySQL 网站上的 mysqldump — A database backup program(mysqldump — 数据库备份程序)。使用 mysqldump 将数据导入账户 B 的相同版本的新数据库实例。您无需在两个账户之间复制和共享快照或 AWS Key Management Service (AWS KMS) 密钥。
    注意: 如果使用 mysqldump,请在将数据导入账户 B 的数据库实例后继续执行步骤 14。

  12. 与账户 B 共享数据库快照
    注意: 如果您的数据库快照已加密,您还必须与账户 B 共享 AWS KMS 密钥。有关详细信息,请参阅共享 Amazon RDS 的加密快照

  13. 在账户 B 中恢复数据库快照
    注意: 您无法从共享的加密快照恢复数据库实例。相反,先复制数据库快照,然后从复制的版本中恢复数据库实例。

  14. 在账户 A 和账户 B 之间设置网络访问权限,以允许流量在两个账户之间流动。

  15. 在账户 A 的主数据库实例中配置入站安全组规则,以允许来自账户 B 中的数据库实例的流量访问公共互联网。
    注意: 对于私有复制流量,您必须在两个账户之间创建并接受虚拟私有云 (VPC) 对等连接

  16. 要在账户 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_namereplication_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. |  
+-------------------------+
  1. 运行以下命令来检查账户 B 的副本状态。
    MySQL 8.0 及更早版本:
mysql> show slave status \G

MySQL 8.4 及更高版本:

mysql> show replica status \G
  1. 删除您在步骤 5 中创建的只读副本。