284

尝试连接 mysql 时出现以下错误:

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

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

4

36 回答 36

246

您是连接到“localhost”还是“127.0.0.1”?我注意到,当您连接到“localhost”时,使用了套接字连接器,但是当您连接到“127.0.0.1”时,使用了 TCP/IP 连接器。如果套接字连接器未启用/工作,您可以尝试使用“127.0.0.1”。

于 2010-12-15T09:47:31.360 回答
199

确保您的 mysql 服务正在运行

service mysqld start

然后,尝试以下操作之一:

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

mysql -u root

如果您已经设置了密码

mysql -u root -p
于 2012-12-13T14:01:32.723 回答
31

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

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

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

mysqladmin -u root -p status

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

sudo chmod -R 777 /var/lib/mysql/

为我解决了

于 2011-11-10T19:04:58.683 回答
24

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

于 2010-12-15T09:34:23.257 回答
23

很可能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

这解决了我的问题

于 2012-02-21T20:29:50.063 回答
22

如果您使用的是最近的 RHEL,您可能需要启动 mariadb(一个开源 mysql 数据库)而不是 mysql 数据库:

yum remove mysql
yum -y install mariadb-server mariadb
service mariadb start

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

mysql -u root -p
于 2016-05-26T23:08:13.490 回答
18

只需编辑将以下行/etc/my.cnf 添加到my.cnf

[mysqld]

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

[client]

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

重启mysql并再次连接

mysql -u 用户 -p 密码数据库 -h 主机;

于 2013-11-13T17:31:54.997 回答
15

在我的情况下,我已将套接字文件移动到内部的/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

不工作:

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

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

于 2013-10-21T17:23:57.517 回答
14

检查您的 mysqld 服务是否正在运行,如果没有运行,请启动该服务。

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

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

改成

socket=/opt/lampp/var/mysql/mysql.sock -u root
于 2011-06-13T08:21:58.803 回答
10

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

所以首先你应该开始,

$ sudo systemctl start mariadb

如果这失败了,不如试试,

$ sudo systemctl start mysqld

然后启动mysql,

$ mysql -u root -p

到今天为止,在 Fedora 中,这个包被命名为mariadb 而在 Ubuntu 中,它被命名为mariadb-server.

因此,如果您的系统中尚未安装它,您可能必须安装它。

于 2016-10-23T12:18:15.360 回答
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

这将帮助您降低磁盘使用率。

于 2013-05-14T15:37:08.580 回答
5

请检查是否有另一个mysql服务正在运行。

于 2013-06-15T17:45:19.063 回答
5

这对我有用:

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysqld restart
于 2015-02-25T00:20:50.297 回答
4

确保您启动了服务器:

mysql.server start

然后连接root用户:

mysql -uroot
于 2014-03-31T22:07:53.397 回答
3

如果您的 mysql 之前正在工作并且突然停止,只需“重新启动”服务器。

在我的 CentOS VPS 上遇到这个问题。->

不断得到

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

尝试了所有技术,最后重新启动服务器解决了问题->

shutdown -r now

希望这可以帮助 !!

于 2012-11-12T05:15:25.387 回答
3

尝试

echo 0 > /selinux/enforce
于 2013-09-16T16:20:17.900 回答
3

重现此错误的一种方法:如果您打算连接到外部服务器,但连接到不存在的本地服务器:

eric@dev ~ $ mysql -u dev -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through 
socket '/var/lib/mysql/mysql.sock' (2)
eric@dev ~ $

所以你必须像这样指定主机:

eric@dev ~ $ mysql --host=yourdb.yourserver.com -u dev -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 235
Server version: 5.6.19 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+-------------------------+
| Database                |
+-------------------------+
| information_schema      |
| mysql                   |
| performance_schema      |
+-------------------------+
3 rows in set (0.00 sec)

mysql> exit
Bye
eric@dev ~ $
于 2014-07-28T14:12:13.050 回答
3

如果您更改 /var/lib/mysql 中的文件 [例如复制或替换该文件],则必须将文件所有者设置为 mysql 如果 mariadb.service 重启失败,这一点非常重要

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

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

于 2015-11-12T22:11:18.280 回答
2

首先输入“service mysqld start”并登录

于 2013-05-07T03:30:02.410 回答
2

请确保您已正确安装 MySQL 服务器,我多次遇到此错误,我认为从套接字调试很复杂,我的意思是重新安装它可能更容易。

如果您使用的是 CentOS 7,以下是正确的安装方法:

首先添加mysql社区源
yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

然后你可以安装它yum install mysql-community-server

使用 systemctl 启动它:systemctl start mysqld

于 2015-08-13T09:32:10.713 回答
1

我的问题是我成功安装了mysql并且运行良好。

但是有一天,同样的错误发生了。

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

并且不存在 mysql.sock 文件。

这个解决方案解决了我的问题,mysql 再次启动并运行:

以 root 身份登录:

sudo su -

跑:

systemctl stop mysqld.service
systemctl start mysqld.service
systemctl enable mysqld.service

以root身份测试:

mysql -u root -p

mysql 现在应该启动并运行。

我希望这也可以帮助其他人。

于 2013-10-03T09:30:41.827 回答
1

请注意,虽然 mysql 从 my.cnf 文件中读取套接字文件的位置信息,但 mysql_secure_installation 程序有时似乎无法正确执行此操作。

因此,如果您像我一样在安装时随机播放,您可能会遇到这样的情况:您可以使用 mysql 连接到数据库就好了,但无法确保事情的安全(无论如何都不使用该脚本)。

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

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

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

于 2013-10-14T21:50:18.713 回答
1

通过以下更改对我有用

[mysqld] 中提到的套接字路径和 my.cnf 中的 [client] 中的相同路径并重新启动 mysql

[mysqld] socket=/var/lib/mysql/mysql.sock

[客户端] socket=/var/lib/mysql/mysql.sock

于 2014-02-13T04:13:01.580 回答
1

这可能是一个愚蠢的建议,但要 100% 确保您的数据库仍然托管在本地主机上。例如,如果网络管理员选择(或更改为)亚马逊数据库托管,您将需要该主机名!

于 2016-04-15T15:52:45.117 回答
1

就我而言,我正在导入一个新数据库,之后我无法再次连接。最后我意识到这是一个空间问题。

所以你可以删除最后一个数据库并扩展你的硬盘驱动器或我所做的,恢复我的虚拟机的快照。

以防万一有人认为这很有用

于 2019-01-21T09:20:45.037 回答
1

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

因为我已经配置了mysqld的socket in /etc/my.cnf,mysql的socket in/etc/my.cnf.d/client.cnf有自定义的路径。

所以安装后mysql客户端找不到mysql的socket conf,所以尝试使用默认的socket路径连接msyqld,就会出现这个问题。

以下是查找此问题的一些步骤。

  1. 检查mysqld是否正在运行ps -aef | grep mysqld
$ps -aef | grep mysqld | grep -v grep
mysql    19946     1  0 09:54 ?        00:00:03 /usr/sbin/mysqld
  1. 如果 mysqld 正在运行,请显示它使用的套接字netstat -ln | grep mysql
$netstat -ln | grep mysql
unix  2      [ ACC ]     STREAM     LISTENING     560340807 /data/mysql/mysql.sock
  1. 检查套接字是否是 mysql 客户端尝试连接。如果没有,请编辑 /etc/my.conf.d/client.cnf 或 my.conf 以使套接字与 mysqld 中的套接字相同
[client]
socket=/data/mysql/mysql.sock

你也可以编辑mysqld的socket,但是你需要重启或者重新加载mysqld。

于 2020-12-04T02:58:57.443 回答
0

只是遇到同样的问题——这就是我解决它的方法。

假设 mysqld 正在运行,那么问题可能只是 mysql 客户端不知道在哪里查找套接字文件。

解决此问题的最直接方法是将以下行添加到用户的配置文件 .my.cnf 文件(在 Linux 上,通常位于 /home/myusername 下):

socket=<path to the mysql socket file>

如果那里没有 .my.cnf 文件,请创建一个包含以下内容的文件:

[mysql]
socket=<path to the mysql socket file>

就我而言,由于我将 mysql 默认数据文件夹 (/var/lib/mysql) 移动到了不同的位置 (/data/mysql),因此我在 .my.cnf 中添加了以下内容:

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

希望这可以帮助。

于 2013-08-26T06:27:42.160 回答
0

尝试在 SSH 客户端中连接 mysql 时遇到此问题,发现在需要在套接字之间切换时将套接字路径添加到命令中很有帮助。

> mysql -u user -p --socket=/path/to/mysql5143.sock
于 2014-01-24T14:47:05.673 回答
0

如果磁盘空间不足,这是一个问题。解决方案是从 HDD 中释放一些空间。

请阅读更多以获得解释:

如果您在 LINUX 上运行 MySQL,请使用命令 disk free 检查硬盘的可用空间:

 df 

如果你得到类似的东西:

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2              5162828   4902260         0 100% /
udev                    156676        84    156592   1% /dev
/dev/sda3              3107124     70844   2878444   3% /home

那么这就是问题所在,现在您有了解决方案!

由于 mysql.sock 想要创建在几乎总是在根文件夹下的 mysql 文件夹中,因为空间不足而无法实现。

如果您定期在 mysql 目录下执行 ls 命令(在 openSUSE 11.1 中位于 /var/lib/mysql),您将得到如下信息:

hostname:/var/lib/mysql #
.protected  IT     files        ibdata1             mysqld.log  systemtemp
.tmp        NEWS   greekDB      mysql               mysqld.pid  test
ARXEIO      TEMP1  ib_logfile0  mysql.sock          polis
DATING      deisi  ib_logfile1  mysql_upgrade_info  restore

mysql.sock 文件经常出现和消失(您必须尝试使用​​ ls 分配才能使用文件夹中的 mysql.sock 文件命中实例)。

这是由于磁盘空间不足造成的。

我希望我能帮助一些人!!!!谢谢!

于 2014-02-13T19:49:48.010 回答
0

我不得不explicit_defaults_for_timestamp从 my.cnf 禁用。

于 2014-06-01T10:13:29.870 回答
0

尝试前 2、3 个解决方案。错误仍然是弹出窗口&如果你找不到/var/lib/mysql/mysql.sock

find /var/ -name mysql.sock

检查 /var/ 中的可用空间

df

如果目录已满,请删除一些无用的文件/目录

rm /var/cache/*

可能您的问题现在将得到解决。

于 2015-02-13T15:56:27.107 回答
0

如果您在sf.net的外壳中,请尝试:

mysql --host=mysql-{LETTER} --user={LETTER}{GROUP ID}admin -p

更改 {LETTER} 和 {GROUP ID},如项目管理员配置文件的 MySQL 数据库中所示。

于 2016-01-03T18:49:02.273 回答
0

我没有从上述所有答案中找到任何解决方案,我确实安装了从 Debian 11 中的源代码安装的 mariadb 安装(而不是从 Debian apt 包)。所以每当我在终端触发 mysql 命令时,我都会收到这个错误:

ERROR 2002 (HY000): Can't connect to local server through socket '/run/mysqld/mysqld.sock' (2)

并且mysql错误日志只显示上面相同的错误套接字,我很难知道这背后的原因

我所做的是删除mailutils我的发行版中包含 mariadb 依赖文件的包。

所以,我只需要触发这两个命令

apt -y remove mailutils
apt -y autoremove

当我在终端中运行 mysql 命令时,我不再有那个套接字错误

于 2021-10-22T06:01:05.330 回答
-1

我有同样的问题,当我挖掘日志时:

sudo tail -f /var/log/mysqld.log

InnoDB: mmap(137363456 bytes) failed; errno 12
200610  6:27:27 InnoDB: Completed initialization of buffer pool
200610  6:27:27 InnoDB: Fatal error: cannot allocate memory for the buffer pool
200610  6:27:27 [ERROR] Plugin 'InnoDB' init function returned error.
200610  6:27:27 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
200610  6:27:27 [ERROR] Unknown/unsupported storage engine: InnoDB
200610  6:27:27 [ERROR] Aborting

显然没有足够的内存并停止 InnoDB 启动。我意识到我从来没有设置交换文件......

我按照这个来设置交换文件并且它可以工作。

于 2020-06-10T06:45:06.237 回答
-2

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

Ubuntu16.04,如果 mysql 服务器正在运行并且 /etc/mysql 中的配置如下:

[mysqld] 套接字 = /var/run/mysqld/mysqld.sock

然后 Navicat15 localhost 默认设置为:“/var/lib/mysql/mysql.sock”

您可以像这样提前编辑:

在此处输入图像描述

于 2020-06-05T09:56:49.353 回答
-3

所以它告诉你他们在'/var/lib/mysql/mysql.sock'中找不到套接字文件

你要做的是你需要将 mysql.sock 文件连接到它,/tmp/mysql.sock如果文件不存在,它很可能是在创建它使用

touch /tmp/mysql.sock

然后执行

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

注意如果里面没有mysql目录/var/lib创建它

mkdir mysql

刷新您的应用

于 2016-04-07T07:20:45.417 回答