在使用localhost登陆mysql时经常会出现错误提示:Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’
由于localhost登陆mysql会通过Unix域的套接字进行,一般为/tmp/mysql.sock。而/tmp文件夹为临时文件夹,系统会不定期的删除其文件夹下的文件,因而会不定期的出现上述提示。
在本人机器上,mysql.sock默认的是在/data/mysql, 如果发现确实是在该目录下,可以在[mysqld]下面加入mysql.sock的path,不清楚mysql.sock文件在哪里的也可以通过find / -name mysql.sock命令查找mysql.sock文件。
vi /etc/my.cnf(my.cnf也可能在其他路径下)
[mysqld]
port = 3306
socket = /data/mysql/mysql.sock
但是要保证使用mysql的用户具有对该目录的写权限,否则这样的改动由于权限限制仍然会报错。
所以为了避免权限问题也可以使用软链接为/data/mysql/mysql.sock创建一个到/tmp/mysql.sock的联接
ln -s /data/mysql/mysql.sock /tmp/mysql.sock
由于/tmp/文件夹默认对other有w权限,这样就可以避免权限问题。
在测试中,通过其他用户建立软连接ln -s /data/mysql/mysql.sock /tmp/mysql.sock后,发现虽然/tmp/mysql.sock为777权限,但只有建立该软连接的用户可以使用mysql -uuser -p 登陆,而root用户却依然会报标题所述错误。而通过root用户建立软连接之后所有用户均可正常登陆mysql。
故,可通过root用户建立该软连接解决该问题,至于为什么必须要root用户,有待进一步深究。