我正在运行一个连接到MySQL的Node服务器,通过node-mysql模块来连接。最初连接和查询MySQL都很顺利,没有任何错误,但是在将Node服务器空闲几个小时后的第一次查询将导致出现错误。错误信息是熟悉的read ECONNRESET
,来自node-mysql模块的深处。
以下是堆栈跟踪(请注意,跟踪的三个条目属于我的应用程序的错误报告代码):
Error
at exports.Error.utils.createClass.init (D:\home\site\wwwroot\errors.js:180:16)
at new newclass (D:\home\site\wwwroot\utils.js:68:14)
at Query._callback (D:\home\site\wwwroot\db.js:281:21)
at Query.Sequence.end (D:\home\site\wwwroot\node_modules\mysql\lib\protocol\sequences\Sequence.js:78:24)
at Protocol.handleNetworkError (D:\home\site\wwwroot\node_modules\mysql\lib\protocol\Protocol.js:271:14)
at PoolConnection.Connection._handleNetworkError (D:\home\site\wwwroot\node_modules\mysql\lib\Connection.js:269:18)
at Socket.EventEmitter.emit (events.js:95:17)
at net.js:441:14
at process._tickCallback (node.js:415:13)
这个错误发生在我的云节点服务器和MySQL服务器以及本地设置的两者之间。
我的问题是:
这个问题似乎是由于Node与我的MySQL服务器的连接断开引起的,可能是由于连接寿命限制?
使用连接池时,node-mysql应该优雅地处理断开连接并将其从池中删除。它直到我进行查询才意识到它已经断开连接,因此使错误不可避免吗?
考虑到我在其他StackOverflow帖子中经常看到“读取ECONNRESET”错误,我是否应该从MySQL以外的地方寻找问题的诊断方法?
更新:经过更多浏览,我认为我的问题是这个问题的重复。他的连接也会断开,但没有人建议如何保持连接活动或如何在第一个查询失败之外解决错误。