是什么阻止我从AWS EC2 VM连接到AWS RDS上的MySQL服务器?

时间:2015-08-22 16:16:42

标签: mysql amazon-web-services amazon-ec2 amazon-rds

我在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 :根据我是AWS的内部还是外部的,DNS解析会有所不同。

nslookup <my-hostname>
我的笔记本电脑上的

导致IP地址52.11.*.*范围,而从我的EC2实例执行相同操作会导致172.31.*.*范围内的IP地址。

1 个答案:

答案 0 :(得分:1)

如果您的EC2实例和RDS数据库实例位于不同的VPC中,您可能正在使用VPC对等连接两个VPC。但在你的情况下,两者都在同一个VPC中。非常好。确保在私有子网中启动RDS数据库实例,并在公有子网中启动EC2实例。

在EC2实例中连接RDS数据库实例

  1. 在RDS数据库实例安全组中,您需要为EC2实例打开流量。
  2. 点击RDS信息中心的数据库安全组。点击入站标签。 “编辑”按钮用于添加或删除安全组中的规则。
  3. 为EC2实例添加规则以访问您的数据库。比方说,您已在数据库实例中启动了MySQL数据库引擎。您需要为EC2实例打开3306端口。您可以使用EC2实例的专用IP连接RDS数据库实例。
  4. SSH进入EC2实例,安装mysql-server包。您需要使用mysql-server连接RDS数据库实例。
  5. mysql --host=<my-hostname> --port=3306 --user=<user> --password=<password>命令用于连接RDS数据库实例。
  6. 在MySQL WorkBench中连接RDS数据库实例

    1. 在MySQL WorkBench中,单击设置新连接
    2. 提供连接名称。选择标准(TCP / IP)通过SSH 。您需要提供SSH主机名,用户名和密钥文件以及MySQL主机名,端口,用户名和密码。
    3. SSH凭据不是EC2实例凭据。对于Keyfile,您必须浏览KeyPair(.pem)文件。在RDS主机名中,您必须提供RDS仪表板中可用的端点。
    4. 要验证连接,请点击测试连接按钮。

      您选择标准(TCP / IP)而不是SSH 的原因是通过EC2实例连接RDS数据库实例。首先,它将连接到EC2实例,然后访问RDS数据库实例,因为数据库实例没有Internet访问权限,并且它位于私有子网中。

    5. 确保在java Web应用程序中,您提到RDS主机名,端口,用户名和密码是否正确。无需在应用程序中提及EC2主机名。