无法通过套接字'/var/lib/mysql/mysql.sock'连接到本地MySQL服务器(2)

Atu*_*tul 245 mysql sockets connect

我尝试连接到mysql时收到以下错误:

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

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

Jan*_*omä 215

您是否连接到"localhost"或"127.0.0.1"?我注意到当你连接到"localhost"时,会使用套接字连接器,但是当你连接到"127.0.0.1"时,会使用TCP/IP连接器.如果套接字连接器未启用/工作,您可以尝试使用"127.0.0.1".

  • 在这种情况下,您应该检查您的MYSQL服务器是否实际运行. (25认同)
  • 您还可以强制使用带有套接字参数的套接字(-S和/ usr/bin/mysql)并通过提供端口(-P和/ usr/bin/mysql)强制TCP/IP. (3认同)
  • cygwin用户注意:例如,如果cygwin mysql客户端试图挂钩到本地WAMP mysql服务器,请使用-h <hostname而不是localhost>.不要尝试创建一个mysql.sock文件,并在my.cnf文件中声明它,它将无法正常工作. (2认同)

小智 184

确保您的mysql服务正在运行

service mysqld start
Run Code Online (Sandbox Code Playgroud)

然后,尝试以下之一:

(如果你还没有为mysql设置密码)

mysql -u root
Run Code Online (Sandbox Code Playgroud)

如果你已经设置了密码

mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

  • 在较新版本的debian上:“ service mariadb start”,因为https://mariadb.org/debian-9-released-mariadb-mysql-variant/ (3认同)
  • 给那个家伙一块奖牌。 (2认同)

mar*_*maf 27

如果您的文件my.cnf(通常在etc文件夹中)已正确配置

socket=/var/lib/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令检查mysql是否正在运行:

mysqladmin -u root -p status
Run Code Online (Sandbox Code Playgroud)

尝试将您的权限更改为mysql文件夹.如果您在本地工作,您可以尝试:

sudo chmod -R 777 /var/lib/mysql/
Run Code Online (Sandbox Code Playgroud)

这解决了我


Dan*_*man 21

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

  • Homebrew安装在哪里? (3认同)

小智 18

最有可能mysql.sock不存在/var/lib/mysql/.

如果您在其他位置找到相同的文件,则将其符号链接:

例如:我有它 /data/mysql_datadir/mysql.sock

将用户切换到mysql并执行如下所述:

su mysql

ln -s /data/mysql_datadir/mysql.sock /var/lib/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题


duh*_*ime 15

如果你是最近的RHEL,你可能需要启动mariadb(一个开源的mysql db)而不是mysql db:

yum remove mysql
yum -y install mariadb-server mariadb
service mariadb start
Run Code Online (Sandbox Code Playgroud)

然后你应该能够以通常的方式访问mysql:

mysql -u root -p
Run Code Online (Sandbox Code Playgroud)


Dej*_*jan 13

在我来说,我已经搬到套接字文件到另一个位置,里面/etc/my.cnf/var/lib/mysql/mysql.sock/tmp/mysql.sock

即使重新启动mysqld服务后,我仍然会在尝试连接时看到错误消息. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

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

作品:

mysql -uroot -p -h127.0.0.1
mysql -uroot -p --socket=/tmp/mysql.sock
Run Code Online (Sandbox Code Playgroud)

不起作用:

mysql -uroot -p
mysql -uroot -p -hlocalhost
Run Code Online (Sandbox Code Playgroud)

您可以通过在mysql config中的部分下添加相同的套接字行来解决此问题.[client]


VKG*_*KGS 11

检查你的mysqld服务是否正在运行,如果没有运行,启动服务.

如果您的问题仍未解决,请查看/etc/my.cnf并修改如下,其中您会看到以socket.开头的行.在执行此更新之前,请备份该文件.

socket=/var/lib/mysql/mysql.sock  
Run Code Online (Sandbox Code Playgroud)

改成

socket=/opt/lampp/var/mysql/mysql.sock -u root
Run Code Online (Sandbox Code Playgroud)


min*_*s23 11

只需编辑/etc/my.cnf 添加以下行即可my.cnf

[mysqld]

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

[client]

socket=/var/lib/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)

重新启动mysql并再次连接

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


小智 7

确保你有足够的空间/var.如果Mysql恶魔无法向驱动器写入其他信息,则mysql服务器将无法启动并导致错误Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

考虑使用

expire_logs_days = 10
max_binlog_size = 100M
Run Code Online (Sandbox Code Playgroud)

这将有助于您降低磁盘使用率.


Gay*_*tti 7

MariaDB是一个社区开发的MySQL分支,已成为许多发行版中MySQL的默认实现.

所以首先你应该开始,

$ sudo systemctl start mariadb
Run Code Online (Sandbox Code Playgroud)

如果这失败了,请尝试,

$ sudo systemctl start mysqld
Run Code Online (Sandbox Code Playgroud)

然后启动mysql,

$ mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

截至今天,在Fedora中,该软件包被命名为mariadb And.在Ubuntu中它被称为mariadb-server.

因此,如果系统中尚未安装它,则可能必须安装它.


Den*_*ger 6

确保您启动了服务器:

mysql.server start
Run Code Online (Sandbox Code Playgroud)

然后与root用户连接:

mysql -uroot
Run Code Online (Sandbox Code Playgroud)


Kis*_*ngi 5

请检查是否有其他 mysql 服务正在运行。


Use*_*ser 5

这对我有用:

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysqld restart
Run Code Online (Sandbox Code Playgroud)