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
相关产品推荐
相关产品推荐

