【发布时间】:2015-11-16 10:55:09
【问题描述】:
我在 AWS 中有一个已正确设置的 MySQL RDS 实例。
我在 AWS 中也有一个 Linux EC2 实例。
但是,我无法从 EC2 实例连接到我的 RDS 实例。
但是,我可以从我自己的笔记本电脑连接到 RDS 实例。
我怀疑这是四件事之一
- RDS 实例的接口绑定 - 它正在侦听外部接口而不是内部接口
- RDS 实例的防火墙 - 允许从 AWS 网络外部进行连接,但不允许从内部进行连接
- EC2 实例的防火墙 - 它不允许连接到 RDS 实例
- EC2 实例上的名称解析 - 由于某种原因,RDS 实例的名称未解析到正确的 IP 地址
不过,据我所知,我已经检查了所有这些,并且它们似乎都井然有序。
我应该看什么?
更新 1:在@mbaird 提出问题后,我检查了 EC2 实例和 RDS 实例是否在同一个 VPC 上。这有什么影响?
更新2:在用户@“Michael - sqlbot”提出问题后,当我说无法连接时,在命令行运行mysql时,使用
mysql --host=<my-hostname> --port=3306 --user=<user> --password=<password>
我可以从我自己的笔记本电脑连接,但是当我尝试从我的 EC2 实例连接时,它只是坐在那里无所事事。过了一会儿,我收到了消息
ERROR 2003 (HY000): Can't connect to MySQL server on '<my-hostname>' (110)
此外,当尝试从我的 Java 应用程序服务器连接到它时,我在堆栈跟踪中得到以下信息
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
...
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
...
Caused by: java.net.ConnectException: Connection timed out
更新 3:DNS 解析会有所不同,具体取决于我是 AWS 内部还是外部。
nslookup <my-hostname>
在我的笔记本电脑上会产生一个 IP 地址 52.11.*.* 范围,而在我的 EC2 实例上执行相同操作会产生一个 IP 地址在 172.31.*.* 范围内。
【问题讨论】:
-
EC2实例和RDS实例是否在同一个VPC内?
-
是的。碰巧,它们都在同一个 VPC 上
-
您的安全组是如何配置的?具体来说,是 RDS 实例的安全组。
-
确定是否是数据库安全组问题的简单方法是暂时允许所有入站流量。另请注意,来自同一 VPC 内其他实例的 EC2 实例的 DNS 解析会产生私有 IP,而来自您的笔记本电脑或 VPC 之外的任何其他地方的 DNS 解析会产生公共 IP。 (尚未验证 RDS 实例是否属于这种情况,但怀疑它)
-
在您首先查看错误消息之前,您不应该查看这些内容。 “我无法连接”是不够的。请发布确切的错误消息。这应该为我们提供足够的信息,以避免猜测和猜测并查明问题。
标签: mysql amazon-web-services amazon-ec2 amazon-rds