我正在运行一个节点服务器,通过节点- MySQL模块连接到mysql。连接和查询MySQL最初运行良好,不会出现任何错误,但是,在节点服务器闲置几个小时后的第一个查询将导致错误。错误是熟悉的read ECONNRESET,来自于节点-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服务器上,也发生在两者的本地设置上。
我的问题:
更新:经过更多的浏览,我想我的问题是复制了这一个。他的连接似乎也断开了,但没有人建议如何保持连接活动,或者如何在第一个查询返回失败的情况下解决错误。
发布于 2014-04-07 07:34:39
我联系了他们的Github页面上的mysql节点,得到了一些明确的答案。
发布于 2016-05-19 14:18:05
如果在建立单个重用连接时发生这种情况,则可以通过建立连接池来避免这种情况。
例如,如果你在做这样的事情.
var db = require('mysql')
.createConnection({...})
.connect(function(err){});这样做反而..。
var db = require('mysql')
.createPool({...});发布于 2014-04-06 23:28:35
这个问题似乎是因为节点与我的MySQL服务器的连接断开,可能是由于连接生存期的限制吗?
是。服务器已经关闭了连接的结束。
当使用连接池时,节点-mysql应该优雅地处理断开连接,并将它们从池中剪除。在我进行查询之前,它是否意识到断开连接,从而使错误不可避免?
正确,但它应该在内部处理错误,而不是传回给您。这似乎是节点mysql中的一个bug。报告一下。
考虑到我在其他StackOverflow文章中经常看到“阅读ECONNRESET”错误,我应该从MySQL的其他地方去诊断这个问题吗?
它要么是节点-MySQL连接池实现中的错误,要么是您没有正确配置它以检测故障。
https://stackoverflow.com/questions/22900931
复制相似问题