前言
公司目前有两个微擎搭建的商场项目,是购买的插件。就在前几天出现MySql数据库崩溃,出现 mysql too many connection 的错误,在修复过程发现这个微擎就是个巨坑。
修复过程
orzlee使用的是 MySql 5.7 最开始以为访问量太大,调整下MySql配置文件中的 max_connections 选项,然后重启数据库。服务器配置8核16G,目所有站点前访问量足够应付。
调整 max_connection 后不到十分钟,问题依旧出现。进入数据库,使用命令查看当前所有连接:
show processlist;
一看吓一跳,两个微擎数据库全部锁表,由于站点一直在访问,链接数只增不减,难怪数据库崩掉。锁表问题很好解决,进入数据库解锁就好了:
use database; ##database 是数据库名称
unlock tables;
然后并没有解决根本问题,真正的问题是 ims_core_sessions 表索引坏了,微擎自己自检表状态并且执行修复 repair table ims_core_sessions。而且 ims_core_sessions 表读写相当频繁,这样一来后面的查询全部堵塞。
解决办法
解决办法很简单,先把两个微擎系统停掉。orzlee是修改nginx配置文件,停止解析当前两个微擎的业务域名,然后进入数据库手动修复 ims_core_sessions 表索引,大约有个7、8分钟才修复完成:
use database ##database 数据库名称
repair table ims_core_sessions;
在数据连接超出之后,已连接的查询全部会挂起,所以微擎根本不可能修复完成。这也是导致所有站点全挂的主要原因。
结语
这种问题以后肯定还会出现,坑已经填上了。数据库引擎还是使用 innoDB 的好。MySql官方已经使用 innoDB 作为默认数据库引擎。
评论 (0)