GCP平台App Engine部署的Node.js应用无法连接Cloud SQL问题求助
GAE 部署 Node.js 应用连接 Cloud SQL 失败排查方案
1. 连接方式适配问题说明
- 本地开发时将本地公网IP加入Cloud SQL白名单后可通过公网IP连接,是因为本地出口IP固定。部署在Google App Engine的应用默认出口IP是动态的,无法通过固定白名单实现公网IP连接,官方推荐使用Unix套接字方式连接Cloud SQL,连接更稳定且不需要配置IP白名单。
- 你当前代码中注释了套接字配置,直接使用公网IP作为host,是连接失败的核心原因。
2. 连接配置修改步骤
第一步:配置app.yaml授权Cloud SQL实例
在你的GAE部署配置文件app.yaml中添加以下配置,授权应用访问对应Cloud SQL实例:
beta_settings: cloud_sql_instances: "google.com:ethereal-honor-206415:us-central1:arcade"
第二步:修改数据库连接代码
注释掉host、port参数,放开socketPath配置,同时修正连接回调的参数命名(原参数名connect容易混淆,实际是错误对象),修改后代码如下:
const mysql = require('mysql'); const dbConnection = mysql.createConnection({ user: 'admin', password: 'admin@123', database: 'arcade', socketPath:'/cloudsql/google.com:ethereal-honor-206415:us-central1:arcade' }); dbConnection.connect(err=>{ if(err) { console.error('数据库连接失败,错误信息:', err) return } console.log('数据库连接成功') }); exports.dbConnection = dbConnection;
3. 权限校验
- 确认GAE默认服务账号
[你的GCP项目ID]@appspot.gserviceaccount.com已被授予Cloud SQL 客户端角色,缺少该权限会导致套接字连接被拒绝。 - 确认数据库账号
admin已授权localhost访问权限,可通过以下SQL语句授权:GRANT ALL PRIVILEGES ON arcade.* TO 'admin'@'localhost';
4. 错误日志排查
如果修改配置后仍连接失败,查看GAE运行日志中的错误信息快速定位问题:
- 错误为
connect ENOENT:说明socketPath配置错误,或app.yaml中未正确配置cloud_sql_instances参数 - 错误为
Access denied:说明数据库账号密码错误,或账号权限配置不正确 - 错误为
ETIMEDOUT:说明网络连通性异常,优先检查连接方式和项目权限配置
内容的提问来源于stack exchange,提问作者Shubham Gupta
相关产品推荐
相关产品推荐

