解决Can 't connect to local MySQL server through socket '/tmp/mysql.sock '(2) ";

最近项目出现问题,数据库连不上,出现了这个问题:

root@iZufkfljcZ:~# mysql -uroot -p

Enter password: 

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

为了解决这个问题,在网上找了很多资料终于找到了解决方案。

首先先运行一下

find / -name mysql.sock

能查到结果的话,只需将查到的结果做一个软连接到/tmp目录下即可解决。但是我的没有

连接localhost通常通过一个Unix域套接字文件进行,一般是/tmp/mysql.sock。如果套接字文件被删除了,本地客户就不能连接。这可能发生在你的系统运行一个cron任务删除了/tmp下的临时文件。

如果你因为丢失套接字文件而不能连接,你可以简单地通过重启服务器重新创建得到它。因为服务器在启动时重新创建它。

如果和我一样,重启服务器还是没有任何变化,你可以先执行下面的语句:

mysql -uroot -h 127.0.0.1 -p 

不出意外,这句话应该是可以执行的,你现在不能用套接字建立连接因为它不见了,所以可以建立一个TCP/IP连接
如果套接字文件被一个cron任务删除,问题将重复出现,除非你修改cron任务或使用一个或使用一个不同的套接字文件,我的解决办法是重新指定一个不同的套接字,或者说,我现在没有mysql.sock文件,所以要想办法生成一个。

首先,更改my.cnf文件,我的服务器中的目录为/etc/my.cnf,如果没有的话可以用find去查找,

 

解决Can 't connect to local MySQL server through socket '/tmp/mysql.sock '(2)

保存退出,确保这个目录存在,修改目录一下,如果不存在,一定要新建哦!

# chmod 777 /var/lib/mysql

准备步骤做好,然后就是mysql和mysqld服务重启


# service mysql  restart

# service mysqld restart

重启成功,进入刚才新建的目录发现多了 mysqld.sock,尝试登陆。ok可以登陆,将所有配置改回原来的即可。

怎样保护“/tmp/mysql.sock ”不被删除?

如果你有这个问题,事实上任何人可以删除MySQL通讯套接字“/tmp/mysql.sock”,在Unix的大多数版本上,你能通过为其设置sticky(t)位来保护你的“/tmp”文件系统。作为root登录并且做下列事情: chmod +t /tmp
这将保护你的“/tmp”文件系统使得文件仅能由他们的所有者或超级用户(root)删除。
你能执行ls -ld /tmp检查sticky位是否被设置,如果最后一位许可位是t,该位被设置了。

 

 

 

你可能感兴趣的:(解决Can 't connect to local MySQL server through socket '/tmp/mysql.sock '(2) ";)