我的是centos6.3 mysql5.1.57,重启一次服务器后,用mysql -u root -p登录出现以下错误:
错误2002 (HY000):无法通过套接字'/tmp/mysql.sock' (2)连接到本地Mysql服务器
所以,我检查了mysql的状态:
/etc/rc.d/init.d/mysqld状态
停下来,不要跑。
/etc/rc.d/init.d/mysqld重新启动
停止mysqld: [好]
MySQL守护程序无法启动。
正在启动mysqld: [失败]
ps -ef | grep mysql
root 28221 27474 0 14:18 pts/0 00:00:00 grep MySQL只有这一个。
至此,我可以确定mysql无法启动。
我开始排查,首先发现/tmp/mysql.sock不存在。
vim /etc/my.cnf
socket=/var/lib/mysql/mysql。短袜
/var/lib/mysql/mysql。袜子也不存在。
find/-name mysql.sock
显示为空,没有找到mysql.sock文件,mysql.sock文件丢失。
我在网上看到有人说mysql.sock socket文件只要重启服务器就可以重新创建,
6初始化重启命令
重启后,错误还是一样,没有变化。mysql.sock重启服务器不会自动生成。
接下来我了解到mysql.sock是一个临时文件,在mysql启动的时候会自动生成。我的服务器没有启动,自然没有mysql.sock文件。
我尝试了安全引导模式,mysqld_safe尝试通过工作目录找到服务器和数据库,但是mysqld_safe还是失败了。
mysqld_safe
使用数据库启动mysqld守护程序./mysql/var
从pid文件停止服务器.pid
130802 15:17:11 mysqld结束
在各种命令都失败的时候,我开始了这次最大的收获——学习读取错误日志。
在错误日志中,启动失败的原因极其明显,文件’。/mysql-bin。' 000004 '找不到,打开失败!
Mysql开启了bin log功能,它的存在是为了检查数据库根目录下的文件。可能是文件权限问题。
chown -R mysql:mysql /./mysql/var
mysqld_safe
/etc/rc.d/init.d/mysqld重新启动
停止mysqld: [好]
正在启动mysqld:[好]
成功启动了!~
此时,mysql.sock文件出现在/var/lib/mysql/mysql.sock中,如下图所示,所有以“s”开头的文件都是socket文件。
mysql -u root -p
错误2002 (HY000):无法通过套接字'/tmp/mysql.sock' (2)连接到本地MySQL服务器
/tmp/mysql.sock
解决这个错误非常简单,因为/tmp/mysql.sock不存在。使用此方法:
ln -s /var/lib/mysql/mysql。sock /tmp/mysql。短袜
以“L”开头的文件是软链接文件。或者可以通过修改/etc/my.cnf文件来修复它。
成功解决了!~
就是这样一个困扰我这么久的问题,错误日志让它隐形了。查错误日志找出问题,而不是像我之前那样盲目找错。
俗话说,授人以鱼不如授人以渔。学会查日志,可以方便快捷的解决问题。
错误使人进步。我为这个错误纠结了四个多小时,对linux中“一切都是文件”这句话有了更深的理解。对我学习文件系统管理(目录树)帮助很大,把我的思路从windows操作系统转到了linux系统。并且最终解决问题,很有成就感。我喜欢这种感觉。