NodeJS:MySQL有时会引发ETIMEDOUT错误

Nap*_*ars 5 mysql error-handling node.js express

我目前正在使用NodeJS开发应用程序。

但是,服务器通常会抛出此错误,并且我无法与mysql交互。

 [Error: read ETIMEDOUT]
  code: 'ETIMEDOUT',
  errno: 'ETIMEDOUT',
  syscall: 'read',
  fatal: true }
{ [Error: Cannot enqueue Query after fatal error.] code: 'PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR', fatal: false }
Run Code Online (Sandbox Code Playgroud)

有人有解决此问题的解决方案吗?

谢谢

EMX*_*EMX 2

从你的问题来看,我假设你可以完美地使用你的数据库,但是这个错误经常在连接启动的给定时间后发生......

\n\n

假设您正在使用node-mysql
\n来源: https: //github.com/felixge/node-mysql#error-handling
\n您的错误终止了与数据库的连接:

\n\n
\n

err.fatal:布尔值,指示此错误是否是连接对象的终端错误。
\n 如果错误不是来自 MySQL 协议操作,则不会定义此属性。

\n\n

注意:“错误”事件在节点中是特殊的。如果它们在没有附加侦听器的情况下发生,则会打印堆栈跟踪并终止您的进程。

\n\n

tl;dr:该模块不希望您处理静默故障。您应该始终为您的方法调用提供回调。如果您想忽略此建议并抑制未处理的错误,您可以执行以下操作:

\n
\n\n
    // I am Chuck Norris:\nconnection.on(\'error\', function() {});\n
Run Code Online (Sandbox Code Playgroud)\n\n

您可以从中检查连接状态并在需要时执行重新连接。

\n\n
\n\n

您还可以尝试手动连接到 mysql 服务并更改请求超时:

\n\n
wait_timeout\xe2\x80\x9d : the amount of seconds during inactivity that MySQL will wait before it will close a connection on a non-interactive connection in seconds.\n
Run Code Online (Sandbox Code Playgroud)\n\n

http://www.serveridol.com/2012/04/13/mysql-interactive_timeout-vs-wait_timeout/\n
https://support.rackspace.com/how-to/how-to-change-the-mysql-​服务器超时/

\n