我的基于React的MERN应用程序在Google app engine上运行。这也有一个MYSQL连接,它在localhost (XAMPP MYSQL数据库)上工作良好。我在Google Cloud上创建了一个SQL实例,并具有实例连接名称。但是我变得无法连接错误。
Error: getaddrinfo ENOTFOUND
code: 'ENOTFOUND',
errno: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'MyGoogleProject-1537065009201:asia-south1:MyProj',
host: 'MyGoogleProject-1537065009201:asia-south1:MyProj',
port: 3306,
fatal: true }
at errnoException (dns.js:50:10)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:92:26)这是我在Local上工作的应用程序代码。下面是我的env.js
"MYSQL_HOST": "localhost",
"MYSQL_USER": "GoogleDBUser",
"MYSQL_PASSWORD": "GoogleDBPassword",
"MYSQL_DATABASE": "GoogleDB1",下面是MYSQL连接的代码:
// RETUNS MYSQL DATABASE
const mysql = require('mysql'),
{ error } = require('handy-log'),
{ MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE } = process.env
const options = {
user: MYSQL_USER,
password: MYSQL_PASSWORD,
database: MYSQL_DATABASE,
}
options.socketPath = `/cloudsql/<Instance_Conn_Name>`
const db = mysql.createConnection(options)
module.exports = db连接到Google MYSQL还需要什么?我不知道在上面的代码中添加Google SQL实例名称的位置。
当我使用Google Cloud SQL时,上面有没有不同于普通Xamp MYSQL的代码需要添加?
发布于 2018-09-25 23:50:29
您没有正确地构建连接。您需要使用/cloudsql/连接字符串格式。从App Engine连接到云SQL时,这是必需的。看一下tutorial code class的20到30行:
const options = {
user: config.get('MYSQL_USER'),
password: config.get('MYSQL_PASSWORD'),
database: 'bookshelf'
};
if (config.get('INSTANCE_CONNECTION_NAME') && config.get('NODE_ENV') === 'production') {
options.socketPath = `/cloudsql/${config.get('INSTANCE_CONNECTION_NAME')}`;
}
const connection = mysql.createConnection(options);我建议您查看完整的tutorial文档,以便更好地了解Cloud SQL - NodeJs。
还有一种方法可以授权所有IP地址连接到Cloud SQL (仍然需要用户名和密码),方法是将0.0.0.0/0添加到authorized networks,并在主机参数代码中使用MySQL公共实例IP地址。您不能授权特定的App Engine IP,因为它们会随时间变化“App Engine当前不提供将静态IP地址映射到应用程序的方法”。如here所述。这不是推荐的方法,因为任何人都可以向您的实例发送连接请求(尽管他们仍然需要用户名、密码、数据库名称等)。
https://stackoverflow.com/questions/52489523
复制相似问题