NodeJS:MySQL有时会引发ETIMEDOUT错误

时间:2015-11-30 16:52:28

标签: mysql node.js express error-handling

我目前正在使用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 }

有人有解决方案可以解决这个问题吗?

谢谢

2 个答案:

答案 0 :(得分:2)

根据您的问题,我假设您可以完美地使用您的数据库,但是这个错误经常在该连接的给定时间之后发生...

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

  

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

     

注意:'错误'事件在节点中是特殊的。如果它们没有发生   附加的侦听器,打印堆栈跟踪,您的过程是   杀死。

     

tl; dr:此模块不希望您处理静默失败。您   应始终为您的方法调用提供回调。如果你想   忽略此建议并抑制未处理的错误,您可以这样做:

    // I am Chuck Norris:
connection.on('error', function() {});

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

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

wait_timeout” : the amount of seconds during inactivity that MySQL will wait before it will close a connection on a non-interactive connection in seconds.

http://www.serveridol.com/2012/04/13/mysql-interactive_timeout-vs-wait_timeout/
https://support.rackspace.com/how-to/how-to-change-the-mysql-timeout-on-a-server/

答案 1 :(得分:0)

尝试通过mysql npm pakcage使用mysql2。它会解决您的问题。

完整说明here