乐趣区

关于node.js:踩坑nodejs-mysql

前几天闲暇工夫利用 node + express + mysql 写了一套订单管理系统。我的项目跑在本地测试均未发现问题,部署到服务器上也没啥问题;奇怪的是比方我早晨部署下来,部署完测试没问题,所有拜访都失常,然而睡一觉起来,查问就 502 了;重启服务当前又好了,放着过段时间,又挂了 …..

起初通过查看日志发现了如下谬误

原来是数据库的谬误,然而这是为什么?

咱们先来看看 mysql 模块的应用办法,官网举荐咱们这样建设连贯

问题就是出在这!!!因为常识的盲区,我本来认为建设一次连贯当前将该实例保留下来,当前每次查问都应用这个实例,可能为零碎节俭开销

但起初通过多方的材料收集,发现 mysql 在闲暇肯定的工夫(大略是 8 小时)会断开连接,后教训证也的确如此,只不过工夫如同不是八小时

过后的验证办法是在呈现谬误的时候将 connection 对象中的 state 状态记录到日志文件,果然,呈现谬误的时候 connection 对象还存在,然而此时的连贯状态曾经变为了断开连接,难怪会产生下面的谬误!

找到了问题那么胜利解决问题的几率就有了 90%;看到网上有说写一个定时工作,每隔一小时,对数据库进行一次查问(此查问实际上是无用的查问,目标只是为了不让数据库连贯断开,有点相似于心跳包的感觉)这不失为一个解决的方法,然而集体总感觉这不是解决的最佳计划,于是乎又从头到尾读了一遍 mysql 的文档,在这下面找到了答案

应用连接池,当查问实现后将该连贯返回到连接池,以便于其余连贯持续应用
接下来革新代码,改为池连贯

目前我的项目部署在阿里云曾经有快一星期了问题没有再复现;写下这篇文章记录一下这个坑,文笔不好,多多包涵!

退出移动版