我正在尝试从外部 MySQL 主服务器复制到 RDS 实例。我真的不想通过 Internet 明文发送数据,所以我有一个 EC2 实例,我已经在上面设置了一个 ssh 隧道。隧道在 EC2 实例上打开端口 3307,并连接到运行目标主 MySQL 数据库的外部实例。从那个 EC2 实例我可以运行
mysql -u <user> -p -h 127.0.0.1 -P3307
并连接到目标远程数据库。一切都很好。此外,我可以毫无问题地从此实例连接到 RDS DB。
我遇到的问题是,当我在我的 RDS 实例上设置复制参数时,我无法连接到远程实例。我正在做一些事情(从可以访问两个数据库的 EC2 实例):
mysql.rds_set_external_master('<host>', 3307, 'repl_user', '<repl_pass>', 'mysql-bin.000001', 107, 0);
... 'localhost'、'127.0.0.1'、EC2 实例的私有 DNS 名称、私有 IP、公共 IP 和公共 DNS 在哪里。每次尝试时,运行都会SHOW SLAVE STATUS\G
显示如下错误:
Last_IO_Error: error connecting to master 'repl_user@<host>:3307'
我的问题是:运行 rds_set_external_master 调用时,主机是相对于发送调用的客户端还是相对于 RDS 实例?如果是后者,我如何通过隧道连接到我的远程实例?
好吧,让这对我这个职位的任何人来说都是一个教训。当您设置隧道时,如果您不指定机器的 IP(或 0.0.0.0),它将绑定到环回,因此对于生成它的实例来说将是私有的。
做这个: