问题描述
当前在做的一个项目中,采取前后台完全分离的开发模式,各自分工来共同完成项目的正常运转。在配置文件中设置了一个MySQL数据库的最大连接数为100,然后在测试时发现问题。只要多刷新几次页面,后台就会报一个错误,错误信息为:too many connections 直译为连接太多。出现这个问题后,就会自动退出登录,导致项目无法正常运行。
解决方案
我自己寻找很久都没有找到问题的原因,然后请求同事帮忙解决这个问题。直接原因是设置的MYSQL的连接数太小导致的,根本原因是使用的node的一个连接MySQL数据库的包的方式存在问题,每次操作数据库时都会创建一个新的连接,而且操作完成后没有释放连接进而出现问题,框架的设计者可能没有考虑到这个问题才导致这样的情况。
简单的处理办法为执行下面一段sql:
select CONCAT('kill ',id,';'),INFO from information_schema.`PROCESSLIST` where time > 20 AND INFO IS NOT NULL;这个sql语句的作用是查询执行时间大于20s的SQL语句进程ID,然后拷贝查询结果,打开一个新的查询窗口,杀掉这些进程即可。这种方法治标不治本,临时解决即可。好的解决方案是更换MySQL数据库操作的包为阿里巴巴提供的ali-rds,这个包有一个好处,我们只需要负责增、删、改、查的操作即可,操作完后它会自己释放连接,这样就很好的解决了前面遇到的问题。
总结归纳
从这里学习到的新知识点是MySQL可以杀掉单个连接的进程,如果有需要可以随时杀掉,一般只干掉查询的进程。操作MYSQL数据库时,操作完成后一定要释放资源,不释放资源就会出现我上面的情况,导致哦mysql不能正常使用,并且性能降低。以前只是在学习MYSQL基础理论时,老师这样讲解过,现在真实遇到了印象会更加的深刻!