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

AWS环境下Python3+Flask开发网站登录时遇sqlalchemy.exc.OperationalError连接MySQL失败问题的解决咨询

解决AWS RDS MySQL连接失败(DNS解析错误)的步骤

你遇到的[Errno -2] Name or service not known错误,核心是你的Flask应用所在环境无法解析RDS实例的域名,我给你一步步排查解决:

  • 第一步:先确认RDS端点绝对正确
    别依赖手动输入的端点!直接去AWS控制台的RDS服务页面,找到你的MySQL实例,在「Connectivity & security」标签下复制完整的「Endpoint」地址,替换代码里的域名。那些随机生成的字符(比如cl8czkqyfcpi)很容易打错,复制粘贴是最稳妥的方式。

  • 第二步:测试域名解析能力
    登录到运行Flask应用的服务器(比如EC2实例),执行以下命令测试能不能解析RDS域名:

    nslookup example.cl8czkqyfcpi.ap-southeast-1.rds.amazonaws.com
    

    如果返回server can't find ...,说明DNS解析出问题了:

    • 如果你用的是AWS EC2,检查对应VPC的设置:在VPC控制台找到你的VPC,确认「Enable DNS hostnames」和「Enable DNS support」都是Yes。这两个选项关闭的话,EC2无法使用AWS的DNS服务解析RDS内网域名。
    • 如果是本地开发环境,检查你的网络是否能正常访问公网,有没有防火墙或代理拦截了DNS请求。
  • 第三步:确认网络连通性(解析成功后仍无法连接的情况)
    如果域名能解析到IP,但还是连不上,再排查:

    • RDS实例的公有访问权限:如果你的Flask应用在AWS外部(比如本地),需要在RDS实例设置里开启「Publicly accessible」。
    • 安全组配置:RDS的安全组要允许Flask应用所在的IP/安全组访问3306端口。比如把EC2的安全组ID加到RDS安全组的入站规则里,端口选3306,来源设为EC2的安全组。
    • 网络ACL:VPC的网络ACL要允许出站的3306流量和入站的响应流量(默认ACL是允许的,但如果自定义过要检查)。
  • 第四步:核对数据库连接URI格式
    确保Flask配置里的数据库URI没有格式错误:

    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://<用户名>:<密码>@<RDS端点>:3306/<数据库名>'
    

    注意默认端口是3306,不要漏写;如果你的RDS实例改了端口,要对应替换。

如果以上步骤都试过还是不行,可以补充你的Flask应用运行环境(EC2/ECS/本地?)和VPC网络配置细节,我再帮你细化排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 05:12:37