从Node.JS连接到Google Cloud SQL的正确方法

时间:2017-02-28 12:18:50

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

我按照关于如何设置Node.JS以使用Cloud SQL的示例,并且通常使其工作,但有一些关于如何连接到SQL服务器的变通方法。我无法以正确的方式将INSTANCE_CONNECTION_NAME传递给socketPath方法的options变量的createConnection()选项。相反,作为临时解决方法,我当前指定服务器的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服务器?

2 个答案:

答案 0 :(得分:2)

我在测试'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

答案 1 :(得分:1)

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

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