ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock’(2) 是一个比较常见的数据库报错,而昨天我们的服务器也报了这个错误,所有服务全挂,而且恰逢阿里云升级,以为是升级的缘故,重启了下服务器,发现各种报错,之后稳定下来了ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock’(2) 这个错误。而本文也主要是讲解本次故障排查的经历。
首先有必要了解一下 “mysql.sock” 。 在linux与unix系统中的socket文件是为了建立两个程序之间的连接使用的 , 而在mysql中,当mysql启动成功时,会根据配置文件中设定的路径(如:tmp/mysql.sock),在tmp中生成mysql.sock,用于连接数据库使用。而如果没有此文件,造成的结果可想而知。
说说本人这次的经历,记得午餐回来,突然同事跑过来问我,为什么网站登陆不上了,总是显示错误,而恰逢阿里云当时给我发了一条短信,即服务器升级维护有可能造成云服务不能正常使用,于是作为小白的我重启了服务器,发现静态资源可以访问了,但是数据库好像有点问题,比如登陆的时候输入错误密码,会提示密码或用户名错误,输入正确密码的时候又会重定向到登陆页面,查看了错误日志,显示session存储错误,貌似存不下session信息,之后赶紧查看配置文件,又没有查看到明显的错误,于是又重启了一下,查看了一下进程,发现mysql又没有启动起来。这错误还不停的换,也挺有意思的,这次重新进入登陆页面,输入任意用户名密码,直接抛出数据库连接失败的异常,即 ‘ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock’(2)’ ,于是针对这一错误的排场开始。
通过两次重启,以及原来系统正常使用可以推断,有可能是数据库损坏。于是输入命令 rpm -qa | grep mysql ,发现出现很多错误,如下图:
这是不是意味着rpm数据库损坏呢,于是进行rpm数据库修复 ,继续输入命令 rpm --rebuilddb ,重启服务器,发现还是报那个错误,猜测会不会是猜测是虚拟磁盘出现了
问题。
首先cd / ,然后输入df , 果然 100%占用。
换一个比较友好的显示。du -sh * :
总共20g的系统盘,文件超过10G的无疑算是大文件了,不用想,也知道是日志文件了,
cd /home/wwwlogs ,du -sh * ,果然
发现日志文件比较大,而且暂时无用,于是清空>access.log。启动mysql service mysql start , 果然启动成功,问题成功解决。
另外,在排查此错误是在网上看了几篇文档,虽然跟我遇到的情况不一致,不过还是贴出来一下,供大家参考。
http://blog.youkuaiyun.com/ixidof/article/details/5958904/