SpringBoot应用连接MySQL RDS实例失败,mvn install及Workbench均报错
MySQL RDS与SpringBoot连接失败排查(通信链路故障)
我创建了一个要和SpringBoot应用连接的MySQL RDS实例,已经把「公开访问」(Publicly accessible)设为「是」,还添加了允许所有IP访问数据库的入站和出站规则,但执行mvn install时出现以下错误:
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
application.properties配置内容
# datasource configuration spring.datasource.url=jdbc:mysql://database-1.cem1nmqwwcw4.ap-northeast-1.rds.amazonaws.com:3306/twtappdb?allowPublicKeyRetrieval=true&&useSSL=false spring.datasource.username=root spring.datasource.password=Pass#1234 # port customization server.port=5000 #Hibernate properties spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect spring.jpa.hibernate.ddl-auto=update
用MySQL Workbench连接该数据库时同样失败,错误提示无法连接到指定RDS实例。
安全组相关配置说明
- 入站规则:配置了允许所有IP(0.0.0.0/0)通过3306端口访问
- 出站规则:配置了允许所有IP(0.0.0.0/0)访问所有端口
- RDS关联安全组:当前RDS实例已关联上述配置的安全组
疑问
是否是安全组规则配置存在错误?
排查与解决建议
1. 优先修正URL参数错误
你的数据库URL里用了&&分隔参数,这是错误的,URL参数分隔符应为单个&,修正后的URL:
spring.datasource.url=jdbc:mysql://database-1.cem1nmqwwcw4.ap-northeast-1.rds.amazonaws.com:3306/twtappdb?allowPublicKeyRetrieval=true&useSSL=false
这个低级错误会直接导致JDBC无法正确解析数据库地址,先改这个再测试。
2. 安全组配置细节检查
- 入站规则核心验证:确认入站规则的协议是TCP,端口范围是
3306,来源是0.0.0.0/0(或你的本地公网IP,更安全)。如果协议选成UDP、端口填错,都会直接阻断连接。 - 安全组关联确认:检查RDS实例是否真的绑定了配置好的这个安全组——有时候会不小心选错安全组,导致规则不生效。
- 出站规则无需调整:当前出站规则允许所有访问是没问题的,RDS只需要能回包给客户端,这个配置不会导致连接失败。
3. RDS实例网络配置验证
- 确认RDS所在的VPC子网具备公网访问能力:如果是私有子网且未配置NAT网关,哪怕开了「公开访问」,外部也无法连接。可以在RDS控制台查看实例的「网络」信息,确认是否有公网IP。
- 确认RDS实例状态为**「可用」**:初始化中或故障中的实例无法正常接受连接。
4. 本地网络连通性测试
在本地终端执行以下命令测试端口连通性:
telnet database-1.cem1nmqwwcw4.ap-northeast-1.rds.amazonaws.com 3306 # 或用nc命令(若已安装) nc -zv database-1.cem1nmqwwcw4.ap-northeast-1.rds.amazonaws.com 3306
如果连接超时,说明本地网络(如公司防火墙、家庭路由器)阻断了3306端口,需要调整本地网络规则,或改用AWS VPN/云服务器连接测试。
5. 数据库账号权限验证
如果上述都没问题,可通过EC2连接RDS后,执行以下SQL检查root账号的访问权限:
SELECT host FROM mysql.user WHERE user='root';
如果结果不是%,说明root账号只允许特定IP访问,需执行以下命令修改:
ALTER USER 'root'@'%' IDENTIFIED BY 'Pass#1234'; FLUSH PRIVILEGES;
内容的提问来源于stack exchange,提问作者spookisukii
相关产品推荐
相关产品推荐

