GCloud App Engine部署Flask应用无法连接Google Cloud SQL数据库求助
解决方案
1. 补全app.yaml的Cloud SQL关联配置
你需要在app.yaml中通过beta_settings字段声明需要连接的Cloud SQL实例,否则App Engine不会自动生成/cloudsql/路径下的Unix套接字文件,这是90%以上同类报错的诱因:
runtime: python37 entrypoint: gunicorn -b :$PORT main:app beta_settings: # 这里填你报错日志里的完整实例连接名,不要写错区域和实例ID cloud_sql_instances: edge-321919:northamerica-northeast1:edge-2021-test
2. 修正SQLAlchemy连接URI格式
App Engine标准环境下通过Unix套接字连接Cloud SQL的URI格式和本地公网连接格式完全不同,不能带公网IP,正确格式如下:
mysql+pymysql://<数据库用户名>:<数据库密码>@/<数据库名>?unix_socket=/cloudsql/<实例连接名>
对应你的场景示例:
mysql+pymysql://root:你的数据库密码@/blog_db?unix_socket=/cloudsql/edge-321919:northamerica-northeast1:edge-2021-test
如果使用mysqlclient驱动,把URI开头的mysql+pymysql改成mysql+mysqldb即可
3. 确认依赖配置
检查requirements.txt里包含了正确的数据库驱动,新手优先用pymysql,比mysqlclient少了编译依赖,出问题概率更低:
flask flask-sqlalchemy pymysql gunicorn
4. 二次核对基础配置
- Cloud SQL实例开启公网IP即可,不需要添加任何公网授权白名单,App Engine走谷歌内部网络连接,不依赖公网白名单
- 确认Default App Engine服务账号的
Cloud SQL Client权限是项目级或者对应Cloud SQL实例级的,不要只授予库级权限
按以上步骤排查后重新部署即可解决2002/2003连接错误。
内容的提问来源于stack exchange,提问作者Samuel Tremblay
相关产品推荐
相关产品推荐

