我的是centos6.3 mysql5.1.57,重启一次服务器后,使用mysql -u root -p登录时出现以下错误:
ERROR 2002 (HY000): Can't connect to local Mysql server through socket '/tmp/mysql.sock' (2)
所以,我检查了mysql的状态:
/etc/rc.d/init.d/mysqld status
显示停止,不运行。
/etc/rc.d/init.d/mysqld restart
Stopping mysqld: [ OK ]
MySQL Daemon failed to start.
Starting mysqld: [ FAILED]
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 .sock
/var/lib/mysql/mysql。 Socks also don't exist.
find/-name mysql.sock
显示为空,找不到mysql.sock文件,mysql.sock文件丢失。
我觉得网上有人说只要重启服务器就可以重新创建mysql.sock socket文件。
Init 6重启命令
重启后发现错误还是一样,没有变化。mysql.sock重启服务器不是自动生成的。
接下来我了解到mysql.sock是一个临时文件,在mysql启动的时候会自动生成。由于我的服务器没有启动,自然没有mysql.sock文件。
我尝试了安全启动模式,mysqld_safe尝试通过工作目录找到服务器和数据库,但是mysqld_safe还是失败了。
mysqld_safe
Starting mysqld daemon with databases from ./mysql/var
STOPPING server frompid file .pid
130802 15:17:11 mysqld ended
在各种命令尝试失败的时候,我开始了这次最大的收获——学习读取错误日志。
在错误日志中,启动失败的原因极其明显,文件’。/MySQL-bin。' 000004 '找不到,打开失败!
Mysql开启了bin log功能,所以存在查看数据库根目录下的文件,可能是文件权限的问题。
chown -R mysql:mysql /./mysql/var
mysqld_safe
/etc/rc.d/init.d/mysqld restart
Stopping mysqld: [ OK ]
Starting mysqld: [OK]
成功启动了!~
此时,mysql.sock文件出现在/var/lib/mysql/mysql .sock中,如下图所示,所有以“s”开头的文件都是socket文件。
mysql -u root -p
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
/tmp/mysql.sock
解决这个错误非常简单,因为/tmp/mysql.sock不存在。使用此方法:
ln -s /var/lib/mysql/mysql .sock /tmp/mysql .sock
以“l”开头的文件是软链接文件。也可以通过修改/etc/my.cnf文件来修改。
成功解决!~
就是这样一个困扰我这么久的问题,错误日志让它藏了起来。看错误日志就能发现问题,而不是像我之前那样盲目找错。
俗话说,授人以鱼不如授人以渔。学会查日志,可以方便快捷的解决问题。
错误使人进步。这个错误我纠结了四个多小时,对linux中“一切都是文件”这句话有了更深刻的理解,对我学习文件系统管理(目录树)有很大的帮助,让我的思维真正从windows操作系统转变到linux系统。
并最终解决问题,很有成就感,我喜欢这种感觉。