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

无法从EC2实例连接到RDS,配置安全组规则后仍失败求助

排查步骤

第一步:先验证网络层连通性

在EC2实例上执行以下命令测试端口连通性:
nc -zv rdsdb.abcdefg.us-east-1.rds.amazonaws.com 3306
如果返回连接失败,属于网络层面问题,按以下方向排查:

  • 确认RDS实例的公网访问属性:如果RDS未开启公网访问,仅允许同VPC内资源访问。若EC2与RDS不在同一VPC,即使配置了安全组规则也无法连通。
  • 核对RDS安全组入站规则:确认源地址为EC2私有IP+/32后缀,协议为TCP、端口为3306,规则状态为生效。
  • 确认EC2网络能力:如果RDS开启了公网访问,需确认EC2具备公网访问能力(绑定了弹性公网IP/所在子网有NAT网关),否则RDS域名解析到公网地址后EC2无法访问。你配置的EC2安全组3306出站规则是合理的,无需修改。
  • 检查VPC DNS配置:确认EC2所在VPC开启了DNS解析与DNS主机名选项,避免RDS域名解析错误。

第二步:网络连通正常时排查上层配置

如果上述端口测试返回连通成功,属于应用/权限层面问题,按以下方向排查:

  • 核对RDS账号访问权限:本地登录RDS后执行SELECT host, user FROM mysql.user WHERE user='root';,确认root账号允许访问的主机列表包含EC2的IP,或配置了%通配规则。
  • 核对EC2 Python依赖版本:执行pip list | grep -E "PyMySQL|SQLAlchemy",确认EC2上安装的PyMySQL、SQLAlchemy版本和本地运行正常的版本一致,避免版本兼容问题。
  • 用原生pymysql测试连接:可以直接运行以下简化脚本排查sqlalchemy配置问题:
import pymysql
try:
    conn = pymysql.connect(
        host='rdsdb.abcdefg.us-east-1.rds.amazonaws.com',
        port=3306,
        user='root',
        password='password',
        database='database'
    )
    print("连接成功")
    conn.close()
except Exception as e:
    print(f"连接报错:{e}")

根据返回的具体报错信息即可定位最终问题,比如报access denied就是账号权限问题,报未知数据库就是库名填写错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 07:12:02