Amazon EC2 Ubuntu 16.04实例无法连接RDS MySQL数据库求助
排查EC2无法连接RDS MySQL的常见问题
遇到这种本地能正常连接但EC2实例连不上的数据库问题,我之前也踩过不少类似的坑,咱们一步步来排查最容易忽略的几个关键点:
安全组配置是头号嫌疑
先登录RDS控制台找到你的目标实例,查看「Connectivity & security」板块里关联的安全组,进入安全组的入站规则配置页面:- 一定要确认有没有添加允许EC2实例所在的安全组(或者EC2的公网/私网IP)访问3306端口的规则。很多时候大家只给本地IP开了权限,完全忘了给EC2实例开放访问权限。
- 顺带检查下EC2实例的安全组出站规则,默认是全开放的,但如果自定义过规则,要确保允许出站访问3306端口。
VPC网络连通性验证
如果EC2和RDS在同一个VPC环境下:- 确认两者的子网是否有正确的路由表连通,比如RDS部署在私有子网、EC2在公有子网的话,要保证路由表能让EC2正常访问到RDS的私有IP。
- 查看RDS的「Public accessibility」设置:如果EC2用私网访问RDS,这个选项可以设为No;如果要通过公网访问RDS,必须把这个选项设为Yes。(更推荐私网访问,安全性更高)
DNS解析是否正常
在EC2实例上执行命令nslookup ********.rds.amazonaws.com,看看能不能返回RDS实例的正确IP地址。如果解析失败,大概率是EC2的DNS配置出了问题,比如用了自定义DNS但没配置AWS的VPC DNS服务(通常是VPC网段的第二个IP,比如10.0.0.2这类)。EC2本地防火墙限制
检查EC2实例自身的防火墙规则,比如Linux系统的iptables或者ufw:- 执行
sudo iptables -L -n查看是否存在禁止出站访问3306端口的规则。 - 可以临时关闭防火墙(比如
sudo systemctl stop firewalld)测试连接,确认问题后再重新配置合规的防火墙规则。
- 执行
RDS实例状态与端口验证
- 确认RDS实例处于「Available」状态,没有在维护、重启或者故障中(直接去RDS控制台查看实例状态即可)。
- 检查RDS的配置端口,默认是3306,但如果修改过端口,连接命令要加上
-P 端口号参数,比如mysql -h xxx.rds.amazonaws.com -P 3307 -u 用户名 -p 数据库名。
内容的提问来源于stack exchange,提问作者Swapnil B.
相关产品推荐
相关产品推荐

