今天朋友的网站mysql连接超过限制,网站基本上动不了了,分析过他的流量后发现不是流量暴增或者黑客攻击引起的。于是登录他的mysql服务器,做了以下检查:
1、用show processlist查看mysql正在执行的线程。发现大量的sleep和超时的线程。
2、kill掉所有sleep的或者超时的线程。但发现连接数马上又暴增。仔细观察一些超时的连接所执行的sql语句,发现跟它的user表相关的查询超时的情况特别多。
3、使用check table user发现表有损坏。使用了repair table user修复表后也没什么好转。没办法了只好把该表mysqldump出来,然后再用source的方式导入进去。观察了一下连接数发现已经恢复到平常的水平了。搞定,哈哈。
总结:
1、数据库跟汽车一样,时常也要用维护一下。myisamchk、CHECK TABLE、 OPTIMIZE TABLE都可以,尤其是optimize这对大量更新的变长行的表非常重要。
2、如果你对mysql的状态监测的命令不熟悉的话,可以使用官方的mysql adminiistrator的GUI工具,可以很清楚看到mysql的运行状态。