我目前正在使用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 }
有人有解决方案可以解决这个问题吗?
谢谢
答案 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