标准App Engine部署Django应用连接CloudSQL出现Connection refused错误
App Engine标准环境连接Cloud SQL故障排查方案
- 优先核对配置一致性:你提供的配置中,settings.py里填写的Cloud SQL实例连接名为
asim800:us-central1:django-mysql-1,但实际日志加载的host路径为/cloudsql/asim800:us-central1:django-app1,二者实例后缀名不一致,请先核对Cloud SQL控制台中实例的正式连接名,确保settings.py、app.yaml中填写的连接名和控制台完全一致。 - 修复App Engine部署配置:你报错中出现localhost的根本原因是未在
app.yaml中配置Cloud SQL实例挂载规则,GAE标准环境不会自动创建/cloudsql/下的Unix socket文件,MySQL驱动找不到指定的socket路径时会默认回退到连接localhost 3306端口,就会出现你遇到的111错误。请在app.yaml中添加如下配置:
beta_settings: cloud_sql_instances: "asim800:us-central1:django-mysql-1"
如果需要同时连接多个实例,用英文逗号分隔即可。
- 核对服务账号权限:进入GCP IAM控制台,确认App Engine默认服务账号(格式为
[你的项目ID]@appspot.gserviceaccount.com)已被授予Cloud SQL Client角色,缺少该权限会导致socket连接被拒绝。 - 确认驱动依赖正确:确认你的
requirements.txt中包含正确的MySQL驱动,推荐使用mysqlclient>=2.1.0,如果使用PyMySQL需要额外的兼容配置,可能会导致路径识别异常,优先使用官方的mysqlclient驱动。 - 本地连接名报错说明:本地使用
/cloudsql/前缀的连接名连接失败是正常现象,本地环境没有GAE的自动挂载机制,要在本地用连接名访问Cloud SQL,需要手动启动Cloud SQL Auth Proxy工具创建对应socket路径后才能连接,本地测试直接使用公网IP即可,不需要纠结该报错。 - 公网IP连接超时说明:GAE标准环境的出站公网IP为动态池,你没有将GAE的全量出站IP段添加到Cloud SQL的公网访问白名单中,自然会出现连接超时,标准环境优先推荐使用Unix socket方式连接,不需要配置白名单,安全性和性能都更优。
- PostgreSQL故障适配:你提到PostgreSQL也出现相同故障,以上排查步骤完全适用,PostgreSQL连接Cloud SQL同样需要配置
app.yaml的cloud_sql_instances,权限要求也完全一致。
内容的提问来源于stack exchange,提问作者Asim Ahmed
相关产品推荐
相关产品推荐

