首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL在node.js服务器上空闲时间后出现“读取ECONNRESET”错误

MySQL在node.js服务器上空闲时间后出现“读取ECONNRESET”错误
EN

Stack Overflow用户
提问于 2014-04-06 22:43:14
回答 4查看 26.7K关注 0票数 20

我正在运行一个节点服务器,通过节点- MySQL模块连接到mysql。连接和查询MySQL最初运行良好,不会出现任何错误,但是,在节点服务器闲置几个小时后的第一个查询将导致错误。错误是熟悉的read ECONNRESET,来自于节点-mysql模块的深度。

堆栈跟踪(注意,跟踪的三个条目属于我的应用程序的错误报告代码):

代码语言:javascript
运行
复制
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服务器上,也发生在两者的本地设置上。

我的问题:

  1. 这个问题似乎是因为节点与我的MySQL服务器的连接断开,可能是由于连接生存期的限制吗?
  2. 当使用连接池时,节点-mysql应该优雅地处理断开连接,并将它们从池中剪除。在我进行查询之前,它是否意识到断开连接,从而使错误不可避免?
  3. 考虑到我在其他StackOverflow文章中经常看到“阅读ECONNRESET”错误,我应该从MySQL的其他地方去诊断这个问题吗?

更新:经过更多的浏览,我想我的问题是复制了这一个。他的连接似乎也断开了,但没有人建议如何保持连接活动,或者如何在第一个查询返回失败的情况下解决错误。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-04-07 07:34:39

我联系了他们的Github页面上的mysql节点,得到了一些明确的答案。

  1. MySQL确实会修剪空闲连接。有一个MySQL变量"wait_timeout“,它设置超时前的秒数,默认为8小时。我们可以将默认值设置为大得多。使用show variables like 'wait_timeout';查看超时设置,使用set wait_timeout=28800;更改超时设置。
  2. 根据本期的说法,在这种断开连接之后,node不会修剪池连接.模块开发人员建议使用心跳来保持连接正常,例如间隔调用SELECT 1;。他们还建议使用节点池模块及其idleTimeoutMillis选项自动修剪空闲连接。
票数 21
EN

Stack Overflow用户

发布于 2016-05-19 14:18:05

如果在建立单个重用连接时发生这种情况,则可以通过建立连接池来避免这种情况。

例如,如果你在做这样的事情.

代码语言:javascript
运行
复制
var db = require('mysql')
  .createConnection({...})
  .connect(function(err){});

这样做反而..。

代码语言:javascript
运行
复制
var db = require('mysql')
  .createPool({...});
票数 11
EN

Stack Overflow用户

发布于 2014-04-06 23:28:35

这个问题似乎是因为节点与我的MySQL服务器的连接断开,可能是由于连接生存期的限制吗?

是。服务器已经关闭了连接的结束。

当使用连接池时,节点-mysql应该优雅地处理断开连接,并将它们从池中剪除。在我进行查询之前,它是否意识到断开连接,从而使错误不可避免?

正确,但它应该在内部处理错误,而不是传回给您。这似乎是节点mysql中的一个bug。报告一下。

考虑到我在其他StackOverflow文章中经常看到“阅读ECONNRESET”错误,我应该从MySQL的其他地方去诊断这个问题吗?

它要么是节点-MySQL连接池实现中的错误,要么是您没有正确配置它以检测故障。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22900931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档