【问题标题】:nodeJS app cannot connect to google MySQL data instancenodeJS 应用程序无法连接到谷歌 MySQL 数据实例
【发布时间】:2020-01-17 02:57:08
【问题描述】:

我在 Google 控制台中的付费帐户下托管了一个 nodeJS 应用程序。当我尝试将我的 nodeJS 应用程序连接到 localhost 服务器中的 MySQL db 时,它正在工作,但是一旦我将其配置为在谷歌云控制台中工作,它就会说无法连接到数据库。我成功创建了一个谷歌 SQL 实例,并确定了用户名和密码,因为我可以通过云控制台连接到数据库。 我参考了互联网上的许多教程,无法找到方法....

 var con = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '1234',
    database: 'test'
  }); 


  con.connect(function(error){
    if(error){
      console.log('error');
    }
    else{
      console.log('connected');
    }
  });

【问题讨论】:

  • 它是否在本地工作。如果是的话,你能告诉我们谷歌云抛出的错误吗?

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


【解决方案1】:

由于这个问题被标记为google-app-engine,我假设它是您用来部署应用程序的产品。在这种情况下:

App Engine 使用 Unix 套接字连接到 Cloud SQL 实例,因此您需要传递实例的连接名称,如下例所示:

var con = mysql.createConnection({
  host: "localhost",
  socketPath: "/cloudsql/<PROJECT_ID>:<REGION>:<SQL_INSTANCE_NAME>",
  user: "root",
  password: "secret"
});

con.connect(function(err) {
  if (err) throw err;
  console.log("Connected!");
});

您实际上可以通过在本地运行 cloud_sql_proxy 并通过 unix 套接字连接来进行测试。 Using Cloud SQL for MySQL 教程解释了如何做到这一点。

编辑:

如果您使用 App Engine Flex,请务必在 app.yaml 上设置正确的 beta_settings,如下例所示:

beta_settings:
  # The connection name of your instance, available by using
  # 'gcloud beta sql instances describe [INSTANCE_NAME]' or from
  # the Instance details page in the Google Cloud Platform Console.
  cloud_sql_instances: YOUR_INSTANCE_CONNECTION_NAME

【讨论】:

  • 我收到此错误消息,甚至尝试过 pessolato 的方式at Object.exports._errnoException (util.js:849:11) at exports._exceptionWithHostPort (util.js:872:20) at PipeConnectWrap.afterConnect [as oncomplete] (net.js:1060:14)
  • 您是否为 socketPath 使用了正确的连接名称?另外,您是第 1 代还是第 2 代 Cloud SQL 实例?错误告诉我你有连接问题,所以我建议你看一下常见的Connection Issues,用于 Cloud SQL。
  • 它的第二代,我得到了实例连接名称并将其用作连接名称?,套接字路径是否应该以 /cloudsql/ 开头??
  • 是的,SocketPath 应该是 /cloudsql/ + &lt;Your Instance connection name&gt;
  • 同样的错误信息:Error: connect ENOENT /cloudsql/ + &lt;My Instance connection name&gt; at Object.exports._errnoException (util.js:849:11) at exports._exceptionWithHostPort (util.js:872:20) at PipeConnectWrap.afterConnect [as oncomplete] (net.js:1060:14) -------------------- at Protocol._enqueue (/app/node_modules/mysql/lib/protocol/Protocol.js:144:48) at Protocol.handshake (/app/node_modules/mysql/lib/protocol/Protocol.js:51:23)
【解决方案2】:

您的本地机器 sql server 无法连接到 google 控制台,因为它不是 暴露在互联网上。你应该在某个平台上托管你的 mssql 数据库,然后你 可以在谷歌控制台中连接

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-04
    • 2020-04-02
    • 2018-12-03
    • 1970-01-01
    • 2021-02-22
    • 2017-10-10
    • 1970-01-01
    • 2014-07-01
    相关资源
    最近更新 更多