【问题标题】:Right way to connect to Google Cloud SQL from Node.JS从 Node.JS 连接到 Google Cloud SQL 的正确方法
【发布时间】:2017-08-09 18:40:55
【问题描述】:

我按照如何设置 Node.JS 以使用 Cloud SQL 的示例进行操作,并且通常可以使其正常工作,但在如何连接到 SQL 服务器方面提供了一些解决方法。对于createConnection() 方法,我无法以正确的方式将INSTANCE_CONNECTION_NAME 传递给options 变量的socketPath 选项。相反,作为临时解决方法,我目前指定服务器的 IP 地址并将我的 VM IP 地址放入服务器的防火墙设置中以使其通过。

这一切都有效,但我现在正在尝试在发布到 AppEngine 之前将它们正确地组合在一起。

我怎样才能让它工作?

以下代码可以正常工作:

function getConnection ()
{
  const options = 
  {  
    host: "111.11.11.11", //IP address of my Cloud SQL Server
    user: 'root',
    password: 'somePassword',
    database: 'DatabaseName'
  };
  return mysql.createConnection(options);
}

但是,我从教程中提到的TutorialGithub page 组合的以下代码给出了错误:

function getConnection ()
{
  const options = 
  {  
    user: 'root',
    password: 'somePassword',
    database: 'DatabaseName',
    socketPath: '/cloudsql/project-name-123456:europe-west1:sql-instance-name'
  };
  return mysql.createConnection(options);
}

这是我得到的错误:

{ [Error: connect ENOENT /cloudsql/project-name-123456:europe-west1:sql-instance-name]
  code: 'ENOENT',
  errno: 'ENOENT',
  syscall: 'connect',
  address: 'cloudsql/project-name-123456:europe-west1:sql-instance-name',
  fatal: true }

我做错了什么?我担心如果我使用 IP 地址将应用程序发布到 AppEngine,我将无法允许传入流量进入 SQL 服务器?

【问题讨论】:

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


    【解决方案1】:

    我在测试“coud sql”时遇到了类似的错误。

    • 错误消息:错误:连接 ENOENT /cloudsql/xxx-proj:us-central1:xxx-instance
    • 解决方案:

    +--------------------------------------------- ------------+
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    chmod +x cloud_sql_proxy
    sudo mkdir /cloudsql; sudo chmod 777 /cloudsql
    ./cloud_sql_proxy -dir=/cloudsql &

    => now node js server can connect to mysql

    参考指南:https://cloud.google.com/appengine/docs/flexible/nodejs/using-cloud-sql

    【讨论】:

      【解决方案2】:

      您是否将 AppEngine 应用部署到与 SQL 数据库相同的区域? (欧洲西部1)

      https://cloud.google.com/sql/docs/mysql/connect-app-engine 的文档指出“您的应用程序必须与您的 Cloud SQL 实例位于同一区域。

      【讨论】:

      • 好点,是的,看起来它恰好在 Europe-West1-C,尽管我没有考虑过......
      • 正确答案?
      • 还不知道。最终在 Compute Engine 上运行它作为一种解决方法...
      猜你喜欢
      • 1970-01-01
      • 2020-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 2021-03-27
      相关资源
      最近更新 更多