我按照关于如何设置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);
}
但是,我从教程中引用的Tutorial和Github 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服务器?
答案 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实例位于同一区域。”