使用PyMySQL连接AWS RDS数据库报连接超时错误求助
报错核心说明
你的报错属于MySQL连接超时错误,本质是你的本地机器网络无法和AWS RDS实例的3306端口建立TCP连接,和你写的Python连接代码逻辑本身无关,优先排查网络配置问题。
常见原因定位
- RDS关联的安全组未放行入站3306端口请求
- RDS实例部署在私有子网,没有公网路由可达
- 公开访问配置未生效,或实例仍在修改配置的重启过程中
- 本地网络/运营商/防火墙封禁了3306端口的出站请求
- RDS端点、端口配置错误,或实例要求SSL连接未在代码中配置
- VPC网络ACL拦截了3306端口的流量
分步解决方案
- 先做连通性验证
本地终端执行命令测试端口可达性:
telnet <替换为你的RDS实例端点> 3306
如果返回连接失败,直接走网络排查步骤;如果连接成功,走代码参数修正步骤。
2. 安全组配置排查
登录AWS控制台进入RDS实例详情页,找到关联的安全组,编辑入站规则:
- 类型选择
MySQL/Aurora - 端口范围默认填
3306 - 源地址填你当前本地的公网IP(可通过公网搜索「我的IP」获取)
保存规则后等待1分钟重试连接。临时测试可将源地址设为0.0.0.0/0验证是否为IP限制问题,验证完成后务必改回指定IP,避免安全风险。
- RDS网络属性验证
- 确认RDS实例的「公开可访问」属性为
是 - 确认RDS所在子网为公有子网:对应子网的路由表存在
0.0.0.0/0路由指向互联网网关 - 确认RDS实例状态为
可用,没有处于重启、修改配置的过程中 - 如果修改过RDS的默认端口,需要在连接代码中显式指定
port参数
- 本地网络排查
切换网络环境(比如用手机热点)重试连接,如果切换后可以正常连接,说明原局域网的防火墙/运营商封禁了3306端口,联系网络管理员放行即可。 - 代码参数修正
如果RDS要求SSL连接(AWS RDS默认开启SSL验证),需要在连接代码中添加SSL配置,完整示例如下:
import pymysql connection = pymysql.connect( host=host, user=user, password=psswd, database=db_name, port=3306, # 非默认端口替换为实际端口 connect_timeout=10, # 开启SSL的场景添加下面一行,证书可从AWS RDS控制台下载 ssl={'ca': 'global-bundle.pem'} )
内容的提问来源于stack exchange,提问作者Andres Chaves
相关产品推荐
相关产品推荐

