当我尝试连接mysql时,我得到以下错误:

无法通过套接字/var/lib/ MySQL / MySQL连接到本地MySQL服务器。袜子”(2)

有解决这个错误的方法吗?背后的原因可能是什么?


当前回答

在我的情况下,我已经将套接字文件移动到/etc/my.cnf内的另一个位置 从/var/lib/mysql/mysql.Sock到/tmp/mysql.sock

即使在重新启动mysqld服务后,当我尝试连接时,我仍然看到错误消息。 错误2002 (HY000):无法通过套接字/var/lib/ MySQL / MySQL连接到本地MySQL服务器。袜子”(2)

问题在于客户端的配置方式。运行诊断将实际显示正确的套接字路径。Eg ps aux | grep mysqld

工作原理:

mysql -uroot -p -h127.0.0.1
mysql -uroot -p --socket=/tmp/mysql.sock

不工作:

mysql -uroot -p
mysql -uroot -p -hlocalhost

你可以通过在mysql配置的[client]部分中添加相同的套接字行来解决这个问题。

其他回答

如果你改变了/var/lib/mysql中的文件[像复制或替换它],你必须将文件的所有者设置为mysql,如果mariadb。服务重启失败

chown -R mysql:mysql /var/lib/mysql/* chmod -R 700 /var/lib/mysql/*

MySQL服务器没有运行,或者那不是它的套接字文件的位置(检查my.cnf)。

注意,当mysql从my.cnf文件中读取套接字文件的位置信息时,mysql_secure_installation程序有时似乎不能正确地这样做。

所以,如果你像我一样,在安装时到处乱放东西,你可能会遇到这样的情况:你可以用mysql连接到数据库,但东西不能被保护(无论如何不使用那个脚本)。

为了解决这个问题,sreddy的建议很有效:从脚本期望套接字的位置到它实际所在的位置创建一个软链接。例子:

ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

(我使用/tmp/作为套接字的默认位置)

它告诉你找不到/var/lib/mysql/mysql。sock的套接字文件

你要做的就是连接mysql。Sock文件可能在/tmp/mysql目录下。如果文件不存在,使用Sock创建它

touch /tmp/mysql.sock

然后执行

Sudo ln -s /tmp/mysql。袜子/var/lib/mysql/mysql.sock

注意,如果/var/lib中没有mysql目录,请创建它

mkdir mysql

刷新应用

以下是对我有效的方法:

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysqld restart