什么会阻止我从AWS EC2 VM连接到AWS RDS上的MySQL服务器?
作者:互联网
我在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地址.
解决方法:
如果您的EC2实例和RDS数据库实例位于不同的VPC中,您可能正在使用VPC对等连接两个VPC.但在你的情况下,两者都在同一个VPC中.那很好.确保在私有子网中启动RDS数据库实例,并在公有子网中启动EC2实例.
在EC2实例中连接RDS数据库实例
>在RDS数据库实例安全组中,您需要为EC2实例打开流量.
>单击RDS仪表板中的数据库安全组.单击“入站”选项卡. “编辑”按钮用于在安全组中添加或删除规则.
>为EC2实例添加规则以访问您的数据库.比方说,您已在数据库实例中启动了MySQL数据库引擎.您需要为EC2实例打开3306端口.您可以使用EC2实例的专用IP连接RDS数据库实例.
> SSH进入EC2实例,安装mysql-server包.您需要使用mysql-server连接RDS数据库实例.
> mysql –host =< my-hostname> –port = 3306 –user =< user> –password = LT;密码>用于连接RDS数据库实例的命令.
在MySQL WorkBench中连接RDS数据库实例
>在MySQL WorkBench中,单击“设置新连接”.
>提供连接名称.通过SSH选择标准(TCP / IP).您需要提供SSH主机名,用户名和密钥文件以及MySQL主机名,端口,用户名和密码.
> SSH凭据与EC2实例凭证无关.对于Keyfile,您必须浏览KeyPair(.pem)文件.在RDS主机名中,您必须提供RDS仪表板中可用的端点.
>要验证连接,请单击“测试连接”按钮.
您通过SSH选择标准(TCP / IP)的原因是通过EC2实例连接RDS数据库实例.首先,它将连接到EC2实例,然后访问RDS数据库实例,因为数据库实例没有Internet访问权限,并且它位于私有子网中.
确保在java Web应用程序中,您提到RDS主机名,端口,用户名和密码是否正确.无需在应用程序中提及EC2主机名.
标签:mysql,amazon-web-services,amazon-ec2,amazon-rds 来源: https://codeday.me/bug/20191007/1863515.html