Mysql “给予”;阅读Econreset“;node.js服务器空闲时间后出错
我正在运行一个通过Node-MySQL模块连接到MySQL的节点服务器。连接到MySQL并查询MySQL最初运行得很好,没有任何错误,但是,让节点服务器空闲几个小时后的第一次查询会导致错误。错误是常见的Mysql “给予”;阅读Econreset“;node.js服务器空闲时间后出错,mysql,node.js,connection,node-mysql,econnreset,Mysql,Node.js,Connection,Node Mysql,Econnreset,我正在运行一个通过Node-MySQL模块连接到MySQL的节点服务器。连接到MySQL并查询MySQL最初运行得很好,没有任何错误,但是,让节点服务器空闲几个小时后的第一次查询会导致错误。错误是常见的read ECONNRESET,来自节点mysql模块的深处 堆栈跟踪(请注意,跟踪的三个条目属于我的应用程序的错误报告代码): 此错误发生在我的云节点服务器和MySQL服务器上,以及两者的本地设置上 我的问题是: 这个问题是否可能是由于连接生命周期的限制,导致节点与MySQL服务器的连接断开 当
read ECONNRESET
,来自节点mysql模块的深处
堆栈跟踪(请注意,跟踪的三个条目属于我的应用程序的错误报告代码):
此错误发生在我的云节点服务器和MySQL服务器上,以及两者的本地设置上
我的问题是:
这要么是节点MySQL连接池实现中的一个bug,要么是您没有正确配置它以检测故障 我联系了mysql的同事,得到了一些明确的答案
显示变量,如“wait_timeout”
查看您的超时设置,并设置wait\u timeout=28800代码>以更改它
SELECT 1代码>在一个时间间隔内。他们还建议使用及其idleTimeoutMillis选项自动修剪空闲连接
如果在建立单个重用连接时发生这种情况,可以通过建立连接池来避免 例如,如果你正在做这样的事情
var db = require('mysql')
.createConnection({...})
.connect(function(err){});
改为这样做
var db = require('mysql')
.createPool({...});
谢谢我已经报告了这个问题。我想你是对的,但我想从他们的开发者那里得到绝对的确认,这是一个bug,而不是我应用程序代码中的错误。我对node MySQL一无所知,但其他连接池允许您定义一个伪SQL语句,如“SELECT 1”,池可以使用该语句在将连接返回给您之前测试连接是否仍然处于活动状态。您需要调查您是否正确地执行了此操作,或者根本没有执行此操作。无论是使用单个连接还是池,我仍然遇到此问题。正如我接受的答案所概述的,这是MySQL挂断和节点MySQL没有意识到这一点的症状。从那时起,这可能已经被修复了,因为我已经使用它很多年了。谢谢你的洞察力。我最近遇到同样的错误时发现了这篇文章。切换到使用连接池对我来说解决了这个问题,所以我发布这个帖子是为了帮助其他处于同样情况的人。你的问题和答案确实帮助了我。您是否有试用节点池模块的经验?您可能有具体的例子吗?添加/etc/my.cnf wait_timeout=28800;这是有效的:-)
var db = require('mysql')
.createPool({...});