EC2部署的Spring Boot应用无法访问RDS(MySQL)数据库问题排查
这种情况我之前部署Spring Boot到EC2时也碰到过,咱们一步步排查,大概率是网络或者配置层面的问题,先从最常见的点开始:
1. 优先检查RDS的安全组配置
这是最容易被忽略的点!本地能连是因为你的本地IP已经加到RDS安全组的入站规则里了,但EC2的IP/安全组可能没被授权:
- 登录AWS控制台,进入RDS服务,找到你的MySQL实例,点击「连接与安全性」,查看关联的安全组。
- 进入该安全组的入站规则页面,确认是否有允许EC2实例的私网IP/EC2所在的安全组访问3306端口(MySQL默认端口)。
- 调试小技巧:在EC2上执行
telnet <你的RDS端点> 3306或者nc -zv <你的RDS端点> 3306,如果返回「Connection refused」,那基本就是安全组没开权限。
2. 检查EC2的网络与安全组配置
- 如果EC2和RDS不在同一个VPC:要确保RDS的「公有可访问性」设置为「是」,同时EC2实例能正常访问公网(比如有公网IP或者配置了NAT网关)。
- 如果是同VPC:优先用RDS的私网端点连接(比公网更安全),同时确认EC2的安全组是否允许出站访问3306端口(大部分默认是全通,但自定义规则的话要注意)。
3. 核对Spring Boot的应用配置
别小看配置文件,部署时很容易带错本地的配置:
- 检查EC2上的
application.properties/application.yml,确认数据库URL是RDS的端点,不是本地的localhost或者本地IP:spring.datasource.url=jdbc:mysql://<RDS端点>:3306/<你的数据库名>?useSSL=false&serverTimezone=UTC spring.datasource.username=<RDS用户名> spring.datasource.password=<RDS密码> - 如果用了环境变量来存储密码/用户名,要确认EC2实例上已经正确设置了这些环境变量(比如通过EC2的用户数据,或者手动export)。
- 一定要看应用日志!登录EC2找到Spring Boot的日志文件(默认在控制台输出,或者
logs目录下),看具体的错误提示:Connection refused:网络不通,回到前面的安全组排查;Access denied for user:用户名/密码错误,或者用户权限不够;Unknown database:数据库名写错了。
4. 检查RDS的MySQL用户权限
MySQL的用户权限是绑定IP的,如果你创建的用户是myuser@localhost,那只能在RDS本地连接,EC2肯定连不上:
- 打开MySQL Workbench(你本地能连的那个),执行以下SQL修改权限:
-- 允许该用户从任何IP连接(生产环境建议换成EC2的私网IP段更安全) GRANT ALL PRIVILEGES ON <你的数据库名>.* TO '<你的用户名>'@'%' IDENTIFIED BY '<你的密码>'; FLUSH PRIVILEGES;
5. 其他小众排查点
- DNS解析:在EC2上执行
nslookup <你的RDS端点>,看能不能正常解析到IP。如果解析失败,检查VPC的DNS服务器设置(默认用VPC内置DNS,一般没问题)。 - EC2本地防火墙:如果EC2开了iptables或者ufw,检查是否禁止了3306端口的出站流量,执行
sudo iptables -L可以查看规则。
按照这个顺序排查,应该很快能找到问题所在!
内容的提问来源于stack exchange,提问作者nigelhs
相关产品推荐
相关产品推荐

