我正在使用cloud sql作为数据库的节点js应用程序。我在我的本地主机上开发了应用程序并部署到谷歌云应用程序引擎。在app引擎中,我收到了下面提到的错误。 注意:我验证了数据库凭据是否正确。尝试了许多事情,包括增加连接超时,但同样的错误仍然存在。
A {错误:连接ETIMEDOUT 在Connection._handleConnectTimeout(/app/node_modules/mysql/lib/Connection.js:419:13) at Object.onceWrapper(events.js:313:30) 在emitNone(events.js:106:13) 在Socket.emit(events.js:208:7) 在Socket._onTimeout(net.js:407:8) 在ontimeout(timers.js:475:11) 在tryOnTimeout(timers.js:310:5) 在Timer.listOnTimeout(timers.js:270:5)
A --------------------
A在Protocol._enqueue(/app/node_modules/mysql/lib/protocol/Protocol.js:145:48)
A在Protocol.handshake(/app/node_modules/mysql/lib/protocol/Protocol.js:52:23)
A在Connection.connect(/app/node_modules/mysql/lib/Connection.js:130:18)
A在Connection._implyConnect(/app/node_modules/mysql/lib/Connection.js:461:10)
A在Connection.query(/app/node_modules/mysql/lib/Connection.js:206:8)
A at at。 (/app/code/nodejs/app.js:27:9)
A在Module._compile(module.js:643:30)
A at Object.Module._extensions..js(module.js:654:10)
A在Module.load(module.js:556:32)
在tryModuleLoad(module.js:499:12)
错误号码:'ETIMEDOUT',
代码:'ETIMEDOUT',
系统调用:'connect',
致命:真实}
答案 0 :(得分:1)
应将socketPath设置为“/ cloudsql / {INSTANCE_CONNECTION_NAME}”以解决此问题(例如,本地计算机中不需要socketPath工作)。无需设置主机。示例代码段如下所示
const knex = connect();
function connect () {
const config = {
user: process.env.SQL_USER,
password: process.env.SQL_PASSWORD,
database: process.env.SQL_DATABASE
};
if (process.env.INSTANCE_CONNECTION_NAME && process.env.NODE_ENV === 'production') {
config.socketPath = `/cloudsql/${process.env.INSTANCE_CONNECTION_NAME}`;
}
// Connect to the database
const knex = Knex({
client: 'mysql',
connection: config
});
return knex;
}
参考:https://cloud.google.com/appengine/docs/flexible/nodejs/using-cloud-sql
需要注意的其他要点:
1)应启用Cloud SQL API
2)在app.yaml中,应在beta_settings部分添加cloud_sql_instances
beta_settings:
cloud_sql_instances: YOUR_INSTANCE_CONNECTION_NAME
如果未提供,则会在PipeConnectWrap.afterConnect [as]处的_exceptionWithHostPort(util.js:1044:20)处生成错误(错误:在Object._errnoException(util.js:1022:11)处连接ENOENT instance_name) oncomplete](net.js:1182:14))