SpringTool Suite项目部署AWS时RDS数据库连接失败求助
AWS RDS MySQL连接失败排查方案
问题场景
将SpringTool Suite开发的项目部署到AWS平台,原使用本地MySQL数据库,现已创建AWS RDS MySQL实例,配置的DataSource代码如下:
@Bean public DataSource dataSource(){ DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setUrl("jdbc:mysql://carinsurance.cheqj6hez0p4.us-east-2.rds.amazonaws.com:3307/carinsurance"); dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); dataSource.setUsername("admin"); dataSource.setPassword("admin123"); return dataSource; }
部署后在PUTTY中出现连接错误日志:
2024-04-06T13:42:31.674Z WARN 26618 --- [ main] o.h.e.j.e.i.JdbcEnvironmentInitiator : HHH000342: Could not obtain connection to query metadata
com.mysql.cj.jdbc.exceptions.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.
排查步骤
- 核对RDS实例端口:AWS RDS MySQL默认端口是3306,登录AWS控制台进入RDS实例的「连接与安全性」页面,确认实例实际使用的端口是否为3307,若不一致则修改JDBC URL中的端口。
- 检查安全组入站规则:确保RDS实例关联的安全组已添加允许项目部署服务器(或PUTTY所在服务器)IP访问的规则,规则需指定TCP协议、对应RDS端口,来源为服务器公网IP或EC2安全组(若部署在EC2)。
- 测试网络连通性:在PUTTY连接的服务器上执行命令测试端口连通性:
若连接超时或失败,说明网络层面存在拦截,重点排查安全组、VPC子网路由、NACL规则。telnet carinsurance.cheqj6hez0p4.us-east-2.rds.amazonaws.com 3307 # 或使用nc命令(若已安装) nc -zv carinsurance.cheqj6hez0p4.us-east-2.rds.amazonaws.com 3307 - 验证数据库账号密码:确认RDS实例的主用户名是
admin,密码为admin123,注意密码区分大小写,可在AWS控制台尝试通过查询编辑器连接验证账号有效性。 - 确认RDS实例状态:在AWS控制台查看RDS实例状态是否为「可用」,若处于创建、维护或备份状态,需等待实例恢复可用后再尝试连接。
- 检查目标数据库是否存在:登录RDS实例确认
carinsurance数据库已创建,若未创建需先通过SQL客户端执行CREATE DATABASE carinsurance;创建。 - 兼容JDBC驱动与RDS版本:确认项目中MySQL驱动版本与RDS实例的MySQL版本兼容,若RDS为MySQL 5.x版本,使用
com.mysql.jdbc.Driver(旧版驱动)或保持com.mysql.cj.jdbc.Driver均可,但需确保驱动版本适配。 - 添加时区参数(可选):若使用MySQL 8.0+驱动,可在JDBC URL后添加时区参数尝试,例如:
jdbc:mysql://carinsurance.cheqj6hez0p4.us-east-2.rds.amazonaws.com:3307/carinsurance?serverTimezone=UTC
内容的提问来源于stack exchange,提问作者user18837808
相关产品推荐
相关产品推荐

