Can’t connect to local MySQL server through socket /tmp/mysql.sock

2,312 阅读1分钟

在新的服务器安装了MySQL,结果使用

mysql -hlocalhost -uroot -p 

命令登录的时候提示

Can’t connect to local MySQL server through socket /tmp/mysql.sock

发现那个目录下没有这个文件

一开始也没当回事,因为我把localhost换成127.0.0.1 就行了

mysql -h127.0.0.1 -uroot -p 

似乎看起来第一种通过socket登录的方式有问题。用第二种IP登录的没问题。

然后今天在看书的时候了解到
连接MySQL数据库的操作其实是一个连接进程和MySQL数据库实例之间的通信,本质上是进程间通信。而进程间通信的方式则有管道命名管道、TCP/IP套接字、UNIX域套接字等。所以很明显,我上面的第二种登录方式就是TCP/IP套接字登录方式。而第一种方式是Unix域套接字的方式,只能在Linux和Unix环境下使用。然后我去看了一下配置文件中

socket=/var/lib/mysql/mysql.sock

似乎并没有按照这个配置找,还是去了/tmp/mysql.sock 下面找的。
PS:这里也可以使用-S参数手动指定socket文件,这样也是可以的。

mysql -hlocalhost -uroot -p -S /var/lib/mysql/mysql.sock

然后从网上发现了问题,

用rpm安装的话,mysql客户端sock默认是去读取/var/lib/mysql/mysql.sock
采用源码安装,mysql客户端sock默认是去读取/tmp/mysql.sock

所以需要在配置文件中添加客户端的socket配置

[client] socket = /var/lib/mysql/mysql.sock 重启即可。