我正在使用Node.js为我的Web应用程序运行Web服务器。我还使用node-mysql模块与MySQL服务器进行连接,以满足我所有的持久数据库需求。Node.js和MySQL“太多连接”错误
每当我的Node.js应用程序中发生严重错误,导致应用程序崩溃时,我会收到一封电子邮件。所以,我一直收到这封电子邮件,上面写着“连接太多”的错误。下面是错误的一个例子:
Error: Too many connections
at Function.Client._packetToUserObject (/apps/x/node_modules/mysql/lib/client.js:394:11)
at Client._handlePacket (/apps/x/node_modules/mysql/lib/client.js:307:43)
at Parser.EventEmitter.emit (events.js:96:17)
at Parser.write.emitPacket (/apps/x/node_modules/mysql/lib/parser.js:71:14)
at Parser.write (/apps/x/node_modules/mysql/lib/parser.js:576:7)
at Socket.EventEmitter.emit (events.js:96:17)
at TCP.onread (net.js:396:14)
正如你所看到的一切告诉我的是,该错误是从MySQL模块来了,但它并没有告诉我,在我的应用程序代码中的问题发生。
我的应用程序随时打开数据库连接,我需要运行一个或多个查询。在收集到所有查询和数据后,我立即关闭连接。所以,我不明白我能超过151 max_connections的限制。
除非在我的代码中有一个地方忘记调用db.end()
来关闭连接,否则我不会看到我的应用程序如何泄漏。即使出现这样的错误,我也不会收到几十个人发送的这些电子邮件。昨天,我收到了近100封电子邮件,其错误大致相同。这怎么可能发生?如果我的应用程序随着时间流逝泄漏并分配了连接,一旦发生第一个错误,应用程序进程就会崩溃,所有连接都将丢失,从而阻止应用程序再次崩溃。由于我收到了大约100封电子邮件,这意味着应用程序在短时间内崩溃了100次,并且全部都在短时间内崩溃。这只能意味着在我的应用程序的某个地方有很多连接在短时间内建立,对吗?
我怎么能避免这个问题?这是非常令人沮丧的。所有的帮助是高度赞赏。谢谢
有点难以分辨没有实际的代码。但看看[连接池](https://github.com/felixge/node-mysql#pooling-connections)来查看它是否有帮助。 – robertklep 2013-05-13 19:40:13
我会尽力实施这个看看是否有帮助。如果没有,我该如何回到这个帖子?我想解决这个问题,我希望这篇文章成为解决这个问题的中心。 – Sam 2013-05-13 19:48:12
至少显示你如何使用mysql模块进行查询的代码(和一些上下文)。不必是一个完整的应用程序或任何东西,只是为了让其他人了解您如何使用它。另外,你可以发布你正在使用哪个模块吗?因为它看起来不像你使用[这个](https://github.com/felixge/node-mysql/)(编辑:啊等待,你使用它的一个古老的版本。尝试更新它到一个更新的版本)。 – robertklep 2013-05-13 19:49:36