OrzLee

这个世界上只有一个问题
那就是时间问题

微擎-mysql数据库崩溃

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 作为默认数据库引擎。

本原创文章未经允许不得转载 | 当前页面:OrzLee » 微擎-mysql数据库崩溃

评论