mysql - AppEngine 和 Cloud SQL 连接错误

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

我正在使用来自 Google Cloud 的 App Engine 和 Cloud SQL。 它们都在同一个项目中,这应该足以与 SQL 建立连接。

If your App Engine application is in the same project as your Cloud SQL instance, you can skip this section and go to Setting up your local environment. Otherwise, proceed to the next step.

如果我在我的 Mac 上本地启动 Node.js - 它可以轻松连接到 Cloud SQL,因为我的 IP 地址已列入白名单。

一旦我将它部署到 App Engine,它就无法工作,因为它无法连接到数据库。我正在为 Cloud SQL 使用公共(public) IP 地址。

看了很多教程,也看了谷歌云提供的文档。我可以看到关于 socketPath 的内容。

但我不想使用 Knex。我想使用标准的 mysql。

我一直在尝试以下内容:

var db_config = {
  host: 'PUBLIC IP',
  user: 'root',
  password: 'PASSWORD!',
  database: 'DB_NAME',
  socketPath: '/cloudsql/CONNECTION_NAME'
};

错误:

error when connecting to db: { Error: connect ENOENT /cloudsql/CONNECTION_NAME-209415:europe-west1:DB_NAME
    at PipeConnectWrap.afterConnect [as oncomplete] (net.js:1174:14)
    --------------------
    at Protocol._enqueue (/Users/root/API/Node-API/node_modules/mysql/lib/protocol/Protocol.js:145:48)
    at Protocol.handshake (/Users/root/API/Node-API/node_modules/mysql/lib/protocol/Protocol.js:52:23)
    at Connection.connect (/Users/root/API/Node-API/node_modules/mysql/lib/Connection.js:130:18)
    at handleDisconnect (/Users/root/API/Node-API/src/App.ts:44:14)
    at Object.<anonymous> (/Users/root/API/Node-API/src/App.ts:60:1)
    at Module._compile (internal/modules/cjs/loader.js:654:30)
    at Module.m._compile (/Users/root/API/Node-API/node_modules/ts-node/src/index.ts:435:23)
    at Module._extensions..js (internal/modules/cjs/loader.js:665:10)
    at Object.require.extensions.(anonymous function) [as .ts] (/Users/root/API/Node-API/node_modules/ts-node/src/index.ts:438:12)
    at Module.load (internal/modules/cjs/loader.js:566:32)
  errno: 'ENOENT',
  code: 'ENOENT',
  syscall: 'connect',
  address: '/cloudsql/CONNECTION_NAME-209415:europe-west1:DB_NAME',
  fatal: true }

任何建议,如何解决这个问题?如果我从 db_config 中删除 socketPath,那么它会在本地工作 - 但在部署时不会。

最佳答案

好的,似乎错误是在应用 localhost 和 socketPath 时引起的。在没有 Knex 的情况下一切正常,对于 mysql 使用以下 db_config

db_config = {
     user: 'root',
     password: 'PASSWORD!',
     database: 'DB_NAME',
     socketPath: '/cloudsql/CONNECTION_NAME'
};

最后记得在app.yaml中加入cloud_sql_instance

beta_settings:
    cloud_sql_instances: CONNECTION_NAME

关于mysql - AppEngine 和 Cloud SQL 连接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51222821/

相关文章:

mysql - Applescriptable mySQL 客户端 - 低成本还是免费?

mysql - 选择 MYSQL 之后进行连接

javascript - 在 PEG.js 语法中使用 Node.JS 语句

node.js - 从输入流 CLI 读取数据 - NodeJS

django - App Engine/Django - 交错多个请求干扰 GAE session

php - 仅当单击提交按钮两次时登录才有效

php - AWS 与 RDS 数据库共享 Cognito 用户 ID?

node.js - --save 和 --save-dev 有什么区别?

java - 从另一个 Java Servlet 激活一个 Java Servlet

java - GAE : Unable to set session values inside interceptor 上的 Struts 2