微擎-mysql数据库崩溃

微擎-mysql数据库崩溃

orzlee
2019-02-22 / 0 评论 / 4,223 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年03月17日,已超过1128天没有更新,若内容或图片失效,请留言反馈。

v2-7b659cd9a7543201194db43858cf4f13_1200x500.jpg

前言

公司目前有两个微擎搭建的商场项目,是购买的插件。就在前几天出现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
取消
扫码打赏
支付金额随意哦!

评论 (0)

取消