当前位置: 首页 > 后端技术 > Node.js

踩node.js+mysql

时间:2023-04-03 22:53:42 Node.js

前几天空闲时间用node+express+mysql写了一个订单管理系统。项目本地测试没有发现问题,部署到服务器也没有问题;奇怪的是,比如我是晚上部署的,部署测试没问题,访问都正常,但是一觉醒来,查询是502;重启服务后又好了,过一会又挂了。。。后来通过查看日志,发现下面的错误,本来是数据库错误,可是为什么呢?我们先来看看如何使用mysql模块。官方推荐我们这样建立连接,就是问题所在!!!因为知识的盲点,本来以为建立连接后,把实例保存下来,以后每次查询都用这个实例,这样可以节省系统开销。但是经过多方搜集资料,发现mysql空闲一定时间(大概8小时)就会断开,经验证确实如此,但时间好像不是八小时。当时的验证方式是在发生错误时将connection对象中的state状态记录到日志文件中。果然,报错时连接对象依然存在,只是此时的连接状态已经变成了断开连接,难怪会出现上面的错误!找到问题,成功解决问题的概率是90%;在网上看到说是写一个定时任务,每小时查询一次数据库(这个查询其实是一个无用的查询,目的只是为了防止数据库连接断开,有点类似的感觉ofaheartbeatpacket)这是一个解决方案,但是我总觉得这不是最好的解决方案,于是从头到尾看了下mysql的文档,找到了答案使用连接池。当查询完成后,将连接返回到连接池中,以便其他连接继续使用。接下来修改代码,改成poolconnection。目前项目在阿里云上部署快一周了,问题没有再出现;写这篇文章记录下这个坑,文笔不好,还请见谅!