赞
踩
在生产系统中的数据库服务突然在下午崩溃,起初只是以为远程连接失败导致的服务异常。结果在服务器上检查之后发现整个服务都瘫痪了,并且无法进行正常重启和关机操作,于是就开始了漫长的抓鱼生涯,好在最后抓住了鱼,并解决了问题,以此作为记录。
首先遭殃的是网页服务出现了问题,后来定位到是数据库访问失败导致的网页服务问题。于是通过远程管理工具Navicat进行连接发现返回了错误代码为2013的问题,由于以前没有遇到过此类问题,于是先通过百度搜索该错误代码的意思。
大部分的博主反馈说是服务器上的数据库服务异常导致的连接异常,到服务器上一看MySQL进程,果然是有问题的:
遇事不决,即重启。我首先想到的是直接把MySQL服务重启一下,于是直接将上面截图中有诸多问号的那个进程给kill掉,然后再进行启动
service mysql start
这个时候,发现mysql启动不了,返回了如下信息:
start: Job failed to start
心里一凉,难道MySQL的启动命令都失效了,莫非是配置文件遭到了损坏?
使用service mysql status查看了一下MySQL的当前状态,返回如下信息:
mysql stop/waiting
推测是否是之前直接杀进程的方式让MySQL没有正常停止,我使用了如下命令进行启动,返回了关键信息:
/etc/init.d/mysql start
The partition with /var/lib/mysql is too full!
磁盘分区满了。使用df -h命令查看磁盘存储情况
被占用到100%了,难怪出现异常。我将日志数据和冗余备份数据进行了清理之后,磁盘容量恢复到50%以下,直接想登录一下MySQL看看效果怎么样,使用mysql -uroot -p登录之后,又返回了一个错误:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)
查阅相关资料之后,发现是socket路径连接出现异常,在YunWisdom博主的博客ERROR 2002 (HY000): Can’t connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock’的指导下,我选择了第四点故障解决方法的第二种解决方案,执行以下命令重新建立正确的socket链接:
ln -s /storage/db/mysql/mysql.sock /var/lib/mysql/mysql.sock
这个时候我再执行MySQL重启命令:service mysql restart
之后再进行访问数据库发现,已经没有任何问题了。
在整个解决过程中,我的目标很明确,用最简单的方法解决最难的问题。然而就是在采用重启的解决方法过程中碰到了形形色色的问题,不过好在开源社区对于问题的总结和分享帮助了我定位到准确的症结,最后在实践的基础上成功解决了异常,还是比较有成就感。
首先要理解报错反馈信息,因为机器是不会骗人的,通过关键报错信息定位问题是很重要的一项技能。然后才是通过关键报错信息来查找相关解决方案,最后选择最合适的方案解决问题。
参考资料:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。