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

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

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


当前回答

以下是对我有效的方法:

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

其他回答

我使用MyXQL访问Elixir中的数据库。我的实际错误是使用/tmp/mysql。当/etc/my.conf使用/var/lib/mysql/mysql.sock时。

我的解决方案是在Elixir设置中设置一个环境变量: 出口MYSQL_UNIX_PORT = / var / lib / mysql / mysql。sock,这样MyXQL就不会使用它的默认位置。

这种解决方案的原则是,您可以将MyXQL重定向到另一个位置,以避免这种类型的问题。

编辑/etc/my.cnf即可 在my.cnf中添加以下行

[mysqld]

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

[client]

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

重新启动mysql并重新连接

Mysql -u user -p password database -h host;

无法通过套接字/var/lib/ MySQL / MySQL .sock连接到本地MySQL服务器 有两种解决方法

使用短链接 在客户端和服务器文件中提到套接字文件链接。

方法1: 要做链接你可以用

ln -s /data/mysql_datadir/mysql。袜子/ var / lib / mysql / mysql。袜子

方法2: 要提到客户端和服务器端的套接字文件,您需要为客户端和服务器文件设置套接字文件路径,如下所示。服务器文件名可以是Server .cnf,客户端文件名可以是client.cnf。在这个文件中,你会发现一个类似[client]或[server]的部分。你必须把更新套接字文件路径为服务器和客户端通信。

client.cnf

(客户端) 套接字= / mydata / db / mysql / mysql.sock

server.cnf

(服务器) 插座= mydata / db / mysql / mysql。袜子

我更喜欢用方法2代替方法1。因为链接是一个依赖文件,如果以某种方式删除它,那么你会遇到麻烦。既然你知道更好的选择链接,你应该使用它。

在我的情况下,我导入了一个新的数据库,在那之后我无法再次连接。最后我意识到这是一个空间问题。

你可以删除最后一个数据库,然后扩展硬盘或者像我做的那样,恢复虚拟机的快照。

以防有人觉得这有用

当我用yum重新安装mariadb时,我遇到了这个问题,它将我的/etc/my.cnf.d/client.cnf重命名为/etc/my.cnf.d/client.cnf.rpmsave,但保留/etc/my.cnf不变。

因为我已经在/etc/my.cnf中配置了mysqld的套接字,在/etc/my.cnf.d/client.cnf中设置了自定义路径。

所以安装后,mysql客户端找不到mysql的socket conf,所以它尝试使用默认的socket路径来连接msyqld,这将导致这个问题。

以下是定位此问题的一些步骤。

检查mysqld是否运行ps -aef | grep mysqld

$ps -aef | grep mysqld | grep -v grep
mysql    19946     1  0 09:54 ?        00:00:03 /usr/sbin/mysqld

如果mysqld正在运行,显示它使用的套接字与netstat -ln | grep mysql

$netstat -ln | grep mysql
unix  2      [ ACC ]     STREAM     LISTENING     560340807 /data/mysql/mysql.sock

检查套接字是否是mysql客户端试图连接。 如果不是,编辑/etc/my.conf.d/client.cnf或my.conf使套接字与mysqld中的套接字相同

[client]
socket=/data/mysql/mysql.sock

你也可以编辑mysqld的套接字,但你需要重新启动或重新加载mysqld。