从Node.JS连接到Google Cloud SQL的正确方法
我遵循关于如何设置Node.JS以使用Cloud SQL的示例,并且通常可以使用它,但是有一些解决方法可以连接到SQL服务器。我无法以正确的方式连接INSTANCE_CONNECTION_NAME
到变量的socketPath
选项,用于createConnection()
方法。相反,作为临时解决方法,我目前指定服务器的IP地址,并将我的虚拟机IP地址放入服务器的防火墙设置中,以便让它通过。从Node.JS连接到Google Cloud SQL的正确方法
这一切都有效,但我现在试图在发布到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服务器?
您是否将AppEngine应用程序部署到与SQL数据库相同的区域? (欧洲west1)
文档在https://cloud.google.com/sql/docs/mysql/connect-app-engine状态“您的应用程序必须在同一个区域作为您的Cloud SQL实例。”
在测试“coud的sql”我遇到了类似的错误。
- error message : Error: connect 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
感谢您的建议。我们会很快尝试... –
好一点,是的,看起来它正好是在欧洲West1-C ,即使我没有想过它...... –
正确答案? – Gary
还不知道。作为解决方法,在Compute Engine上结束运行... –