You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS EC2实例无法连接RDS数据库问题求助

EC2无法连接RDS MySQL/MariaDB的排查与解决

核心现象

  • EC2上Apache运行正常,PHP通过mysqli()连接RDS超时并返回504错误
  • EC2通过SSH执行mysql命令连接RDS同样超时(ERROR 2003)
  • 本地Mac的DBeaver可正常连接目标RDS实例

排查与解决步骤

1. 检查RDS安全组入站规则

这是最常见的原因:RDS安全组仅允许了你的本地IP访问,未开放EC2的访问权限。

  • 登录AWS控制台→进入RDS服务→选择目标实例→切换到「连接与安全性」标签
  • 点击关联的安全组ID,进入安全组编辑页面
  • 添加一条入站规则:
    • 类型:MySQL/Aurora(端口3306)
    • 来源:选择EC2实例所在的安全组ID(优先推荐,避免EC2 IP变动导致失效),或直接填写EC2的私网IP/公网IP
  • 注意:测试完成后不要保留0.0.0.0/0的开放规则,避免安全风险

2. 验证EC2安全组出站规则

确保EC2允许向3306端口发起出站请求:

  • 进入EC2控制台→选择目标实例→查看关联的安全组
  • 检查出站规则是否包含:
    • 类型:MySQL/Aurora(端口3306)
    • 目标:可暂时设置为0.0.0.0/0测试,后续改为RDS的私网IP或安全组ID

3. 测试EC2与RDS的网络连通性

在EC2上通过SSH执行以下命令,确认端口是否可达:

# 使用telnet测试
telnet silkweb-maria.chwegpctvkzc.us-east-2.rds.amazonaws.com 3306

# 或使用nc命令(若已安装)
nc -zv silkweb-maria.chwegpctvkzc.us-east-2.rds.amazonaws.com 3306
  • 若命令超时,回到安全组/VPC配置排查;若能建立连接,继续检查数据库权限

4. 检查数据库用户权限

本地能连接但EC2不能,可能是数据库用户的访问IP限制:

  • 通过DBeaver登录RDS,执行SQL查看用户权限:
SELECT user, host FROM mysql.user WHERE user='xxxxx';
SHOW GRANTS FOR 'xxxxx'@'你的本地IP';
  • 若用户的host仅为你的本地IP,执行以下命令开放权限(测试用,生产环境需限制具体IP):
GRANT ALL PRIVILEGES ON *.* TO 'xxxxx'@'%' IDENTIFIED BY '你的数据库密码';
FLUSH PRIVILEGES;

5. 排查PHP代码与环境问题

  • 确认dbinfo.inc文件中的DB_USERNAME和DB_PASSWORD与DBeaver使用的一致(可通过页面输出的连接信息验证)
  • 检查EC2上的PHP是否安装了mysqli扩展:
php -m | grep mysqli
  • 若未安装,根据系统版本安装:
    • Amazon Linux:sudo yum install php-mysqli
    • Ubuntu/Debian:sudo apt install php-mysql
  • 可在代码中添加连接超时设置,避免长时间等待:
$conn = mysqli_init();
mysqli_options($conn, MYSQLI_OPT_CONNECT_TIMEOUT, 10); // 设置10秒超时
$conn->real_connect($db_server, DB_USERNAME, DB_PASSWORD);

内容的提问来源于stack exchange,提问作者user761100

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:06:32