【问题标题】:Google App engine and Cloud sql connection refusedGoogle App 引擎和 Cloud sql 连接被拒绝
【发布时间】:2019-03-29 07:12:43
【问题描述】:

我在我的 Node JS 应用程序中使用 Google App Engine 和 Cloud SQL(My SQL 2nd Gen Instance),但遇到了问题。

我使用云代理在本地连接良好,但一旦我部署它就会失败。

我正在使用 Sequelize 连接到云 SQL。

我确实有正确的密码/用户名/实例连接名称。 我已启用 API,否则我将无法从代理连接。

在我的“app.yaml”中,我确实有正确的“beta_settings”标签和正确的“cloud_sql_instances”值。

来自 Cloud SQL 的消息:

`{insertId:  "s=7560d77466cb46cebc3933acc1c41082;i=1a5ff5;b=30867f100f0d483ea84a5718c3948aed;m=886b8bfcbb;t=578fd8d7ad54f;x=a821eba2c35efe29-0@a1"  
 logName:  "projects/[CORRECT PROJECT]/logs/cloudsql.googleapis.com%2Fmysql.err"  
 receiveTimestamp:  "2018-10-24T18:21:25.190291090Z"  
 resource: {
  labels: {
   database_id:  "[CORRECT DB ID]"    
   project_id:  "[CORRECT PROJECT ID]"    
   region:  "us-central"    
  }
  type:  "cloudsql_database"   
 }
 severity:  "ERROR"  
 textPayload:  "2018-10-24T18:21:19.249532Z 53509 [Note] Access denied for user 'root'@'cloudsqlproxy~66.85.23.1' (using password: NO)"  
 timestamp:  "2018-10-24T18:21:19.249743Z"  }`

来自APP Engine的消息(Express,Sequelize):

`Error: connect ECONNREFUSED 127.0.0.1:3306 at TCPConnectWrap.afterConnect [as oncomplete]`

类似的问题似乎已经被问过很多次了,我已经阅读了 10 多个 * 问题和答案,但我仍然没有正确的答案。

我能得到一些帮助吗?

谢谢。

【问题讨论】:

  • 你指的哪些文章也找不到?

标签: mysql node.js google-app-engine sequelize.js google-cloud-sql


【解决方案1】:

我知道这是旧的 - 但我的 NodeJS 应用程序连接到 CloudSQL Postgres 时遇到了同样的问题。对 AppEngine 实例的一点挖掘最终表明,虽然文档显示 127.0.0.1 作为主机,但它实际上正在运行 CloudSQL 代理 docker 映像 - 所以虽然它来自实例本身的 127.0.0.1,但我的数据库主机名实际上需要是应用容器中的“cloudsql”。

尝试连接到 cloudsql:3306 看看是否有效!

【讨论】:

  • 你能详细说明一下吗?你在哪里设置你的 cloudsql:3306 信息?进入 env_variables ?
  • 无论您在何处设置应用配置。对我来说,这是在 knex 初始化属性中(因为它是 Node.JS)。 CloudSQL 代理主机通过 DNS 公开为 cloudsql,因此这是您的应用需要连接到的 URL