在AWS EC2实例部署Web应用:数据库连接困惑求助
问题解决:EC2部署Web应用时MySQL数据库连接失败
先搞懂EC2本地MySQL和RDS MySQL的区别
- EC2本地MySQL:直接安装在你的EC2实例内,与Web应用共享同一台服务器,连接时使用
localhost或127.0.0.1作为主机名,适合测试场景,需自行负责数据库运维。 - AWS RDS MySQL:AWS托管的独立数据库服务,拥有专属访问端点,由AWS负责备份、高可用、运维等工作,适合生产场景。
二选一:修改JDBC连接配置
选项1:连接EC2本地MySQL
把JDBC连接URL修改为:
String url = "jdbc:mysql://localhost:3306/"; // 也可使用EC2的私有IP,效果一致
额外检查项:
- 确保EC2本地MySQL服务处于运行状态:执行
sudo systemctl start mysqld(CentOS/RHEL系统)或sudo systemctl start mysql(Ubuntu系统) - 你已在本地MySQL中创建LOGIN库和users表,此步骤无需重复操作
- 本地MySQL的root用户默认允许本地连接,无需额外授权
选项2:连接AWS RDS MySQL(推荐生产环境使用)
这是你原本的目标方案,按以下步骤修正:
- 修正JDBC URL:将代码中的
{RDS Database Instance endpoint}替换为RDS控制台中实例详情页的实际端点(例如mydb-xxxx.us-east-1.rds.amazonaws.com),修改后的代码如下:String url = "jdbc:mysql://你的RDS实际端点:3306/"; - 核对RDS关键配置:
- RDS实例状态必须为「可用」(Available),新创建的实例需等待数分钟完成初始化
- RDS的安全组需允许EC2实例访问3306端口:在RDS控制台的「安全组」设置中,添加入站规则,类型选择「MySQL/Aurora(3306)」,源选择你的EC2实例安全组或私有IP
- 注意:RDS的root密码与EC2本地MySQL的密码不通用,需使用创建RDS实例时设置的密码
- RDS内的LOGIN库为空!你之前是在EC2本地MySQL中创建的表,需将建表脚本在RDS上执行一遍:
通过EC2终端连接RDS:mysql -h 你的RDS端点 -u root -p LOGIN,输入RDS密码后执行建表SQL:drop table if exists users; create table users ( id int primary key auto_increment, user_name varchar(50), pass varchar(50), email varchar(50), mobile varchar(20) );
连接失败的常见排查点(对应你遇到的con为null问题)
- 网络不通:EC2与RDS之间的安全组规则配置错误,导致3306端口无法访问
- 端点错误:复制RDS端点时遗漏后缀或输入字符错误
- 账号密码错误:混淆了EC2本地MySQL与RDS的密码
- JDBC驱动版本不兼容:确保驱动版本与RDS的MySQL版本匹配(例如MySQL 8.0需使用mysql-connector-java 8.x版本)
你提供的错误信息翻译
com.mysql.cj.jdbc.exceptions.CommunicationsException: 通信链路失败
最后一次成功向服务器发送数据包是0毫秒前。驱动程序未收到来自服务器的任何数据包。
内容的提问来源于stack exchange,提问作者S10000
相关产品推荐
相关产品推荐

