错误:“无法通过套接字'/var/run/mysqld/mysqld.sock'(2)连接到本地MySQL服务器” —缺少/var/run/mysqld/mysqld.sock


322

我的问题始于我无法再以root用户身份登录mysql安装程序。我试图在不打开密码的情况下运行mysql ...但是每当我运行命令时

# mysqld_safe --skip-grant-tables &

我永远也回不了提示。我试图按照以下说明恢复密码

屏幕如下所示:

root@jj-SFF-PC:/usr/bin# mysqld_safe --skip-grant-tables
120816 11:40:53 mysqld_safe Logging to syslog.
120816 11:40:53 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

而且没有提示您开始输入SQL命令来重置密码。

当我按CTRL+ 杀死它时C,会收到以下消息:

error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'

Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!

如果重试该命令并将其保留足够长的时间,则会收到以下一系列消息:

root@jj-SFF-PC:/run/mysqld# 120816 13:15:02 mysqld_safe Logging to syslog.
120816 13:15:02 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120816 13:16:42 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

[1]+  Done                    mysqld_safe --skip-grant-tables
root@jj-SFF-PC:/run/mysqld#

但是,如果我尝试通过以下方式以root用户身份登录:

# mysql -u root

我收到以下错误消息:

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

我检查过,/var/run/mysqld/mysqld.sock文件不存在。文件夹可以,但文件不能。

另外,我不知道这是否有帮助,但是我跑find / -name mysqld了出来,想出了:

/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder

我是Linux和MySQL的新手,所以我不知道这是否正常。但我会包含此信息,以防万一。

我终于决定卸载并重新安装mysql。

apt-get remove mysql-server
apt-get remove mysql-client
apt-get remove mysql-common
apt-get remove phpmyadmin

按照上述相同的顺序重新安装所有软件包后,在phpmyadmin安装过程中,出现了相同的错误:

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

所以我再次尝试卸载/重新安装。这次,在卸载软件包之后,我还手动将所有mysql文件和目录重命名为mysql.bad它们各自的位置。

/var/lib/mysql 
/var/lib/mysql/mysql
/var/log/mysql
/usr/lib/perl5/DBD/mysql
/usr/lib/perl5/auto/DBD/mysql
/usr/lib/mysql
/usr/bin/mysql
/usr/share/mysql
/usr/share/dbconfig-common/internal/mysql
/etc/init.d/mysql
/etc/apparmor.d/abstractions/mysql
/etc/mysql

然后,我尝试重新安装mysql-servermysql-client再次。但是我注意到它不会提示我输入密码。它不是应该要求管理员密码吗?


我遇到了同样的问题。我刚刚解决了 stackoverflow.com/questions/18150858/…–
罗伯特


只需重新启动服务器即可解决,然后重新启动mysql服务
bowpunya

@Anto这不是重复的。这一个/var/run/mysqld/mysqld.sock失踪了。您链接的问题有该文件。
motorbaby

在这里或其他任何我找不到的答案都无法解决我的问题。因为这是一个新项目,所以我改用了PostgreSQL,它也可以正常工作!:-)
詹姆斯·布拉德伯里

Answers:


194

要在系统上查找所有套接字文件,请运行:

sudo find / -type s

Mysql服务器系统在以下位置打开了套接字 /var/lib/mysql/mysql.sock

找到套接字所在的位置后,将其添加或编辑到/etc/my.cnf文件中,并带有套接字文件的路径:

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

有时,启动命令行可执行文件的系统启动脚本会指定一个标志--socket=path。该标志可能会覆盖my.cnf位置,这将导致在my.cnf文件指示应在的位置找不到套接字。然后,当您尝试运行mysql命令行客户端时,它将读取my.cnf来查找套接字,但是由于它与服务器创建位置不同,因此找不到该套接字。因此,除非您关心套接字所在的位置,否则只需更改my.cnf使其匹配即可。

然后,停止mysqld进程。您的操作方式将因系统而异。

如果您是linux系统的超级用户,如果您不知道Mysql设置使用的特定方法,请尝试以下方法之一:

  • service mysqld stop
  • /etc/init.d/mysqld stop
  • mysqladmin -u root -p shutdown
  • 某些系统未设置为具有优雅的方式来停止mysql(或由于某些原因mysql无法响应),因此您可以使用以下任一方法强制终止mysql:
    • 一步: pkill -9 mysqld
    • 两步(最不推荐):
      • 使用pgrep mysql或找到mysql的进程IDps aux | grep mysql | grep -v grep
      • 假设进程ID以4969终止kill -9 4969

完成此操作后,您可能想要在其中查找pid文件/var/run/mysqld/并将其删除

确保套接字上的许可权允许运行mysqld的任何用户都可以对其进行读取/写入。一个简单的测试是将其打开以进行完全读/写,然后查看它是否仍然有效:

chmod 777 /var/run/mysqld/mysqld.sock

如果这样可以解决此问题,则可以根据安全设置根据需要调整套接字的权限和所有权。

另外,运行mysqld进程的用户必须可以访问套接字所在的目录。


15
请不要建议使用kill -9; 必须先尝试几种方法。
伊格纳西奥·巴斯克斯

@dot在文件root'find中运行它。-名称mysqld.sock'。我在/ var / run以外的其他地方看到过套接字文件。找到它后,您可能需要编辑my.cnf文件以指向找到它的位置。

@ray,我尝试以其他方式运行原始命令(我在另一个站点上找到了ubuntu特定的帖子。)。这是我运行的命令:“ sudo服务mysql stop”和“ sudo mysqld --skip-grant-tables”。执行第二条命令后,出现以下错误:“ InnoDB:无法锁定./ibdata1,错误:11”。我找不到此./ibdata1文件... InnoDB:检查您是否还没有另一个mysqld进程

2
@dot run ps -aux | grep mysqld并查看是否正在运行其他任何mysql进程
Ray

@射线。我把我的头发撕碎了。我决定将mysql删除,然后重试...请注意我更新的帖子。
2012年

251

试试这个命令

sudo service mysql start

+1 my.cnf指向正确的目录,通过mysql服务已死亡
wruckie 2014年

我尝试了接受的答案,但是找不到mysql.sock,这对我有用。谢谢
Giovanne Afonso

1
我不得不使用sudo service mysqld start
加文·米勒

10
sudo apt-get install mysql-server如果您尚未安装它:)
aimme '16

17
如果您一定要解决此问题,请在测试其他内容之前先运行此简单命令,仅需一秒钟,并且如果服务器根本没有运行,并且在启动后就可以了,那就意味着它没有不会自动启动,这将是要解决的实际问题。
蜥蜴人

137

由于多次安装mysql,因此发生此错误。运行命令:

ps -A|grep mysql

使用以下方法终止该进程:

sudo pkill mysql

然后运行命令:

ps -A|grep mysqld

还可以通过运行以下命令终止此过程:

sudo pkill mysqld

现在您已完全设置好,只需运行以下命令:

service mysql restart
mysql -u root -p

再次有很好的工作mysql


大家好,我在网上跑来解决这个问题。我的问题是我正在尝试设置docker。我希望它使用docker之外mysql以前使用的mysql数据目录... ps命令是最好的!
迈克尔

3
在整个网络上运行了近4个小时以上后,此方法终于成功了。应该是最高答案:+1:
Shivam Gaur's

4
mysql.service的作业失败,因为控制进程退出并显示错误代码。有关详细信息,请参见“ systemctl状态mysql.service”和“ journalctl -xe”。
约翰·乔布

1
mysql.service的作业失败,因为控制进程退出并显示错误代码。有关详细信息,请参见“ systemctl状态mysql.service”和“ journalctl -xe”。
阿迪布·阿鲁伊

Tnx,您节省了我的时间。
Aleksandur Atanasov

41

解决方案更简单。

  1. 首先,您必须找到mysql.sock文件所在的位置(在终端中为“ sudo find / -type s”)。就我而言/opt/lampp/var/mysql/mysql.sock
  2. 启动终端并发出问题 sudo Nautilus
    这将以超级用户权限启动您的文件管理器
  3. 从Nautilus导航到mysql.sock文件所在的位置
  4. 右键单击该文件,然后选择“ 建立链接”
  5. 链接文件重命名mysqld.sock的文件,然后右击剪切
  6. 转到/var/run创建一个文件夹,mysqld然后输入
  7. 现在右键单击并粘贴链接文件
  8. 瞧!您现在将mysqld.sock/var/run/mysqld/mysqld.sock:) 拥有一个文件。

4
您如何找到mysql.sock文件?我尝试查找/ -name'mysql.sock',但未返回任何内容。
马修·洛克

2
@MatthewLock首先,请确保mysql正在运行(通过“ ps aux | grep mysql”),否则,将不会出现mysql.sock。其次,使用“ sudo find / -type s”,它为您提供系统上的所有套接字来定位mysql.sock
narengi 2013年

35
如果输出sudo find / -type s不包含任何内容mysql.sock怎么办?
jeff 2015年

1
有用。但是我不知道为什么这些开发人员在过去的几年中从来没有做过这项工作?
易江

2
如果很难通过“ find / -type s”来获取mysql.sock的位置,请尝试使用“ mysql_config --socket”命令。您可以使用sudo apt-get install libmysqlclient-dev
alexche8 '16

26

安装后只需要启动MySQL服务:

对于Ubuntu:

sudo service mysql start;

对于CentOS或RHEL:

sudo service mysqld start;

首先检查此sudo systemctl status mysql.servicesudo systemctl start mysql.service。这对我
有用

16

Ubuntu的MySQL 5.6和5.7版存在一个错误,var/run/mysqld/只要MySQL服务停止或重新启动,该错误就会消失。这完全阻止了MySQL运行。找到了这种解决方法,虽然它并不完美,但是至少在停止/重新启动后,它可以运行:

mkdir /var/run/mysqld/
chown mysqld /var/run/mysqld/

谢谢-为我修复了它,我必须重新制作目录并在每次重新启动mysql服务时重新设置所有权-未能在任何地方正式发现报告的错误,否则我将在此处发布链接:)
djoe

1
还没有尝试过,但是也许可以帮到您:创建一个新文件/etc/tmpfiles.d/mysql.conf: # systemd tmpfile settings for mysql # See tmpfiles.d(5) for details 然后, d /var/run/mysqld 0755 mysql mysql - 重新启动后,mysql应该可以正常启动。这是来自bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1435823的注释3。如果您在MySQL 5.7上遇到此问题,请在Launchpad上进行注释。解决问题的用户越多,得到的关注就越多。
motorbaby

为我工作...必须使用mysql作为用户名而不是mysqld
Evan Parsons

/etc/tmpfiles.d/mysql.conf每个Motorbaby的评论中添加行为 我解决了此问题。在Centos 7操作系统上并使用mysql Ver 15.1 Distrib 10.3.11-MariaDB,
turrican_34 '18

这为我解决了这个问题。
shikata

14

好的,只需复制并粘贴以下代码:当未正确安装mysql数据库以及出现以下错误时,应在服务器内的终端中完成此操作:'无法通过套接字连接到本地MySQL服务器'/ var / run / mysqld / mysqld.sock'(2)'。

停止MySql

sudo /etc/init.d/mysqld stop

重新启动或启动

sudo /etc/init.d/mysqld restart or sudo /etc/init.d/mysqld start

进行这样的链接并将其提供给系统

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

运行安全安装,指导您配置mysql所需的所有过程

/usr/bin/mysql_secure_installation

Can't connect当我尝试运行上面的命令时,出现相同的错误。
cjmling

对于那些运行ubuntu的人来说,这只是我发现的东西。如果使用/etc/init.d/mysqld start启动mysqld,则无论如何都会遇到此问题。使用服务mysql start代替,它将很好。真气,但我最终想出了。
亚当·肖特

11

我遇到了同样的错误,发现这是由于软件包升级所致,因此,在重新启动系统后,我解决了错误。

我认为由于sql库/软件包更新导致发生此错误,因此,如果您要进行一些升级,请尝试以下操作:)


1
我在重新安装(或升级)后执行了此操作,现在它可以工作了。没有更多的套接字消息。谢谢!
wraithie

8

出现此问题的原因很多,但有时只需重启mysql服务器,即可解决此问题。

sudo service mysql restart

7

在ubuntu上使用XAMPP:

  1. / var / run目录中创建一个名为mysqld的文件夹。您可以使用命令完成此操作。sudo mkdir /var/run/mysqld

  2. 创建一个指向XAMPP服务器启动时创建的mysql.sock文件的符号链接。您可以使用命令sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock

注:的mysql.sock在服务器启动时创建和删除服务器时停止,所以有时链接创建可能会出现被打破,但只要你开始使用服务器它应该工作的文件,无论是sudo /opt/lampp/lampp start或任何其他手段。

  1. 如果服务器尚未运行,请启动它,然后尝试再次执行程序。

祝好运!希望您这次能摆脱它。


@MohsinKhan转到localhost / phpmyadmin并从那里导入数据库
Robert Odoch

6

用户负载步骤的答案对我有用。有时需要在/etc/mysql/my.cnf客户端添加行中编辑文件

[client]
password = your_mysql_root_password
port  = 3306
host  = 127.0.0.1
socket  = /var/lib/mysql/mysql.sock

这给了我:mysql: unknown variable 'Host=127.0.0.1'
Splaktar 2014年

@Splaktar:有错字。Host需要小写host,它将起作用。此外,此解决方案对我也有效。
Mohammad Faisal 2014年

出色-这对我和我的docker环境都有效-我只需要调整IP,就我而言,就是docker mysql容器ip 172.17.xx
InforMedic

6

*错误:“无法通过套接字'/var/run/mysqld/mysqld.sock'(2)连接到本地MySQL服务器”

解决方案

最后卸载并重新安装mysql。**

  • sudo apt-get删除mysql服务器
  • sudo apt-get删除mysql-client
  • sudo apt-get删除mysql-common
  • sudo apt-get删除phpmyadmin

然后通过再次安装

  • 须藤apt-get install mysql-server-5.6

此操作后,将使用164 MB的额外磁盘空间。

  • 你要继续吗?[Y / n] Y按YES完成安装

...... .......

  • 最后您将获得这些行。

    设置libhtml-template-perl(2.95-1)...

    设置mysql-common-5.6(5.6.16-1〜exp1)...正在处理libc-bin的触发器(2.19-0ubuntu6)正在处理Uradadahead的触发器(0.100.0-16)...

  • 然后

    root @ ubuntu1404:〜#mysql -u root -p(对于每个应该先使用的密码)

  • 输入密码:

  • 注意:输入的密码应与mysql的安装时间密码相同(如.root,system,admin,rahul等...)

    然后输入

  • USE rahul_db(数据库名称);

谢谢。**


请提高答案的质量
2014年

这对我有用,因为安装了多个mysql版本。还要删除mysql-server-5.6/5.5, mysql-client-5.6/5.5。谢谢!
Luuk Skeur '16

得到了E: Package 'mysql-server-5.6' has no installation candidate,它在Ubuntu 18.04中不存在
juliocesar

6

确保您无法访问的套接字文件路径与“ /var/run/mysqld/mysqld.sock”相同,否则请将该路径更改为您的路径。停止mysqld

$ sudo /etc/init.d/mysqld stop

如果进程仍在运行;

$ sudo pkill -9 mysqld

删除要在其中创建套接字的mysql目录。对我来说,它不允许删除,所以我不得不强行删除。

$ sudo mkdir -p /var/run/mysqld

将所有权设置为目录

$ sudo chown mysql:mysql /var/run/mysqld

启动mysql

$ sudo /etc/init.d/mysql start

尝试连接mysql

$ sudo mysql -u dbuser -p

是的,那与我在19年2月14日11:56(见下文)给出的答案相同

您是救生员。
Sahib Khan

5

我认为您的MySQL服务器尚未启动。因此,请使用以下命令之一启动服务器。

#services mysql start

要么

#/etc/init.d/mysql start

5

临时解决方案

也许有人面临这个问题。我在Ubuntu 14上使用Mysql Workbench并收到此错误。

mysqldump: Got error: 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) when trying to connect

通过运行查找套接字文件sudo find / -type s,在我的情况下是/run/mysqld/mysqld.sock

因此,我刚刚在tmp目录中创建了指向该文件的链接。

sudo ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock

如您所见,文件的位置在文件/tmp夹下,因此可以确定将其删除。您可以更改.sock文件位置。参见@ user3002884答案。
比拉勒

我知道,我只是在完成您的回答,所以其他用户才知道该解决方案只是临时的,例如文件夹
Alex Burdusel

您救了我的命:)
Mashpy Rahman

4

你可以找到mysqld.sock/var/run/mysqld,如果你已经安装了mysql-serversudo apt-get install mysql-server


4

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

/etc/my.cnf添加以下行:

[client]
socket=/var/lib/mysql/mysql.sock <= this path should be also same as is[mysqld]

并使用以下命令重新启动服务: service mysql restart

这对我有用



3

以我为例,两个mysqld进程正在运行..通过使用pkill -9 mysqld杀​​死了可选进程


我需要添加“ sudo”杀死进程。
noti 2014年

3

如果您的系统上有很多数据库和表,并且已innodb_file_per_table在my.cnf中进行设置,则您的mysql服务器可能已用完打开的对象/文件(或者这些对象的描述符)。与

open-files-limit = 2048

并重启mysql。当根本不创建套接字时,这种方法可能会有所帮助,但实际上这可能不是真正的问题,存在潜在的问题。


2

我在Ubuntu 14.10上遇到了这个问题

mysql-server不再安装的转弯(以某种方式已被删除),但我不能仅仅安装它,因为存在一些损坏的程序包和依赖性问题/冲突。

最后我不得不重新安装mysql

sudo apt-get remove mysql-client
sudo apt-get install mysql-server


2

我的解决方案;

Ubuntu 18.04(WSL)

/etc/mysql/my.cnf

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

/etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306

我改变了端口。对我有用。您可以写另一个端口。示例3355


2

为什么会出现此错误

我收到了mysql库的新更新,因此在得到这些错误之后,我更新了Kubuntu OS。


我尝试过的命令以及如何修复它。

MySql服务器运行正常,但是当我尝试连接它给

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'.

我检查了/var/run/mysqld/mysqld.sock'.这个目录。我的文件不存在。

我也尝试使用这些命令进行连接,但对我没有用。

 mysql -h 127.0.0.1 -P 3306 -u root -p

 sudo service mysql start

浪费了大约2个小时后,我找到了解决方案

sudo apt-get clean
sudo apt-get update
sudo apt-get upgrade -f

之后,一切都为我解决了。


这帮助我解决了问题。我不明白它是如何与停飞问题,我...
迷彩

1

更改host127.0.0.1对我有用。

编辑其中的文件,/etc/mysql/my.cnf并将以下提到的行添加到该部分:client

[client]
port  = 3306
host  = 127.0.0.1
socket  = /var/lib/mysql/mysql.sock

完成后。执行以下命令。

sudo service mysql start

这是我的朋友,帮助了我:)
巴尔加夫·纳内卡尔瓦

@NBhargav我很高兴ü可以解决乌尔问题..干杯哥们..😇😇
Dulith德科斯塔

1

我还将检查mysql配置。我在自己的服务器上遇到了这个问题,但是我太匆忙了,为我的机器错误配置了innodb_buffer_pool_size。

innodb_buffer_pool_size = 4096M

它通常可以很好地运行到2048,但我想我没有足够的内存来支持4演出。

我想这也可能与其他mysql配置设置一起发生。


1

我在CentOS VPS上有类似的问题。如果MySQL无法启动或在启动后立即崩溃,请尝试以下步骤:

1)找到my.cnf文件(我的文件位于/etc/my.cnf中)并添加以下行:

innodb_force_recovery = X

用1到6的数字替换X,从1开始,如果MySQL无法启动,则递增。设置为4、5或6可以删除您的数据,因此请谨慎阅读,并在此之前阅读http://dev.mysql.com/doc/refman/5.7/en/forcing-innodb-recovery.html

2)重新启动MySQL服务。仅SELECT将运行,这是正常的。

3)用mysqldump一步一步地转储所有数据库/方案,不要压缩转储,因为无论如何以后都必须解压缩它们。

4)仅移动(或删除!)/ var / lib / mysql中bd的目录,并在根目录中保留单个文件。

5)停止MySQL,然后取消注释1)中添加的行。启动MySQL。

6)恢复3)中所有转储的bd。

祝好运!


1

在终端提示下尝试以下操作:

sudo mysql

一旦允许您进入,您可以创建一个新用户并在他们需要访问的特定数据库上授予您想要的特权。

Mysql 5.7进行了一些更改,默认情况下,使用auth_socket插件(与mysql_native_password相对)来保护根用户免受黑客入侵。您可以通过将插件字段设置为root来覆盖此设置,但是除非您有充分的理由,否则您可能不应该绕过保护措施。特别是当sudo mysqlmysql -u root -p任何时候都容易的时候。

我从Raspberry Pi帮助站点中找到了所有位置的信息。在Lubuntu 18.04惹恼了我几个小时之后,他像魅力一样工作。


1

首先创建dir / var / run / mysqld

使用命令:

mkdir -p /var/run/mysqld

然后将rigths添加到目录

chown mysql:mysql /var/run/mysqld

经过这个尝试

mysql -u root

1

我有完全一样的问题。经过一个小时的努力,我发现了一种无需重新安装mysql-common,mysql-client,mysql-server即可纠正它的方法。

首先,转到“ / var / run / mysqld”。您会发现mysql.sock不存在。只需删除整个mysqld目录并重新创建它并提供必要的特权即可。

# rm -rf /var/run/mysqld && mkdir /var/run/mysqld && chown mysql /var/run/mysqld/

现在,完全杀死mysql进程。即使关闭该服务,运行“ /etc/init.d/mysql status”命令时,也可能会显示“正在等待页面清理程序”。

要完全关闭服务,请使用

# pkill -9 mysqld

一旦进程终止,请尝试使用重新启动

# /etc/init.d/mysql start

您会发现它运作良好!而且也不会停止它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.