如何将 mysql.rds_set_external_master 设置为 RDS 实例?

How can I set mysql.rds_set_external_master to an RDS instance?

我正在尝试从一个 RDS MySql 实例(名为 Original)手动复制到另一个 RDS MySql 实例(名为 New)。我基本上遵循此处概述的步骤:https://aws.amazon.com/premiumsupport/knowledge-center/rds-encrypt-instance-mysql-mariadb/

我卡在了第 11-13 步。我 运行 call mysql.rds_set_external_master 使用 Original 的只读副本吐出的 IP 地址。但是当我随后 运行 SHOW SLAVE STATUS\G; 时,我看到它卡在 Slave_IO_State: Connecting to master 并且日志显示:

[ERROR] [MY-010584] [Repl] Slave I/O for channel '': error connecting to master 'replicationuser@XXX.XX.X.XX:3306' - retry-time: 60 retries: 1, Error_code: MY-002003

我仔细检查了安全组和 VPC 设置,一切正常。

AWS documentation on rds_set_external_master 没有提到能够将 RDS 实例设置为复制主机。它明确指出 Configures a MySQL DB instance to be a Read Replica of an instance of MySQL running external to Amazon RDS

我开始认为第一个 link 要求我们做不可能的事情...

解决了。

您需要为主实例使用内部私有 IP

  1. 使用同一区域的ec2实例,运行

    dig <your-master-instance>.rds.amazonaws.com

    (如果没有dig,也可以用nslookup)

  2. 获取结果内部IP,例如172.31.123.123

  3. 调用时使用该 IP

    mysql.rds_set_external_master(...)

    ...在新实例上。

请注意,您通常不应使用其 IP 连接到 RDS 实例,因为 IP 是动态的并且会随着自动版本升级等而改变。

但是,在这种情况下,内部 IP 有效而主机名无效。另外,由于是升级过程,新实例最多只需要复制主机几个小时:使用内部IP应该没问题。

向 AWS 企业支持部门的 Aryan 致敬。

当我尝试将主服务器设置为只读副本并将其更改为使用 DNS 的主服务器时,我遇到了类似的问题