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

dot*_*dot 287 mysql linux ubuntu

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

# mysqld_safe --skip-grant-tables &
Run Code Online (Sandbox Code Playgroud)

我永远不会得到提示.我试图按照这些说明恢复密码.

屏幕看起来像这样:

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
Run Code Online (Sandbox Code Playgroud)

我没有得到提示开始键入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!
Run Code Online (Sandbox Code Playgroud)

如果我重试命令并保留足够长的时间,我会得到以下一系列消息:

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#
Run Code Online (Sandbox Code Playgroud)

但是如果我尝试以root身份登录:

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

我收到以下错误消息:

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

我检查过,/var/run/mysqld/mysqld.sock文件不存在.该文件夹,但不是文件.

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

/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder
Run Code Online (Sandbox Code Playgroud)

我是Linux和MySQL的新手,所以我不知道这是否正常.但我会包含这些信息以防它有所帮助.

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

apt-get remove mysql-server
apt-get remove mysql-client
apt-get remove mysql-common
apt-get remove phpmyadmin
Run Code Online (Sandbox Code Playgroud)

以与上面相同的顺序再次重新安装所有软件包后,在phpmyadmin安装期间,我得到了同样的错误:

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

所以我再次尝试卸载/重新安装.这次,在我卸载软件包之后,我还手动将所有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
Run Code Online (Sandbox Code Playgroud)

然后我试图重新安装mysql-servermysql-client试.但我注意到它没有提示我输入密码.是不是应该要求管理员密码?

Joe*_*eng 225

试试这个命令,

sudo service mysql start
Run Code Online (Sandbox Code Playgroud)

  • 如果你遇到这个问题,一定要在测试其他东西之前先运行这个简单的命令,它只需要一秒钟,如果服务器没有运行,并且在你启动它之后没问题,那就意味着它没有自动启动,这将是要解决的实际问题. (14认同)
  • ```sudo apt-get install mysql-server```如果你还没有安装它:) (9认同)
  • 良好的开始:作业无法启动:( (3认同)
  • 我不得不使用`sudo service mysqld start` (2认同)
  • 如果服务无法启动怎么办? (2认同)

Ray*_*Ray 181

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

sudo find / -type s
Run Code Online (Sandbox Code Playgroud)

我的Mysql服务器系统打开了套接字 /var/lib/mysql/mysql.sock

找到套接字的打开位置后,使用套接字文件的路径在/etc/my.cnf文件中添加或编辑该行:

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

有时,启动命令行可执行文件的系统启动脚本会指定一个标志--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
    • 两步(最不喜欢):
      • 找到的MySQL进程ID或者pgrep mysqlps aux | grep mysql | grep -v grep
      • 假设进程id 4969终止于kill -9 4969

执行此操作后,您可能希望查找pid文件/var/run/mysqld/并将其删除

确保套接字上的权限是这样的,即任何用户mysqld正在运行,因为它可以读/写它.一个简单的测试是打开它以完全读/写,看看它是否仍然有效:

chmod 777 /var/run/mysqld/mysqld.sock
Run Code Online (Sandbox Code Playgroud)

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

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

  • 请不要建议使用`kill -9`; 在实现这一目标之前,有几种方法应该尝试. (14认同)
  • @dot运行`ps -aux | grep mysqld`并查看是否正在运行任何其他mysql进程 (2认同)

Ham*_*aza 115

由于多次安装mysql而发生此错误.运行命令:

ps -A|grep mysql
Run Code Online (Sandbox Code Playgroud)

使用以下方法终止进程:

sudo pkill mysql
Run Code Online (Sandbox Code Playgroud)

然后运行命令:

ps -A|grep mysqld
Run Code Online (Sandbox Code Playgroud)

同时运行以下命令终止此过程:

sudo pkill mysqld
Run Code Online (Sandbox Code Playgroud)

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

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

有很好的工作mysql了

  • 在整个网络上运行近 4 个多小时后,这终于奏效了。应该是最佳答案:+1: (6认同)
  • mysql.service的作业失败,因为控制进程退出并显示错误代码。有关详细信息,请参见“ systemctl状态mysql.service”和“ journalctl -xe”。 (3认同)
  • mysql.service 作业失败,因为控制进程退出并出现错误代码。有关详细信息,请参阅“systemctl status mysql.service”和“journalctl -xe”。 (3认同)
  • mysql.service 作业失败,因为控制进程退出并出现错误代码。有关详细信息,请参阅“systemctl status mysql.service”和“journalctl -xe”。 (2认同)

Ioa*_*tef 38

解决方案更容易.

  1. 首先,您必须找到(在终端中使用"sudo find/-type s")mysql.sock文件所在的位置.在我的情况下它是在/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:)

  • 如果`sudo find/-type s`的输出不包含任何`mysql.sock`怎么办? (31认同)
  • 你如何找到mysql.sock文件?我试过找/ -name'mysql.sock',但它什么也没有返回. (4认同)
  • @MatthewLock首先关闭,确保mysql正在运行(通过"ps aux | grep mysql"),否则,不会出现mysql.sock.其次,使用"sudo find/-type s",它可以让你系统上的所有套接字找到mysql.sock (2认同)
  • 如果通过“find / -type s”获取 mysql.sock 的位置很痛苦 - 尝试使用“mysql_config --socket”命令。您可以使用 sudo apt-get install libmysqlclient-dev 安装它 (2认同)

Pra*_*til 25

安装后只需启动MySQL服务:

对于Ubuntu:

sudo service mysql start;
Run Code Online (Sandbox Code Playgroud)

对于CentOS或RHEL:

sudo service mysqld start;
Run Code Online (Sandbox Code Playgroud)


coo*_*994 14

好吧,只需复制并粘贴这些代码:这应该在终端,服务器内部,当你的mysql数据库没有正确安装时,以及当你收到这个错误时:'无法通过套接字连接到本地MySQL服务器'/ var/run/mysqld/mysqld.sock'(2)'.

停止MySql

sudo /etc/init.d/mysqld stop
Run Code Online (Sandbox Code Playgroud)

重启或启动它

sudo /etc/init.d/mysqld restart or sudo /etc/init.d/mysqld start
Run Code Online (Sandbox Code Playgroud)

建立这样的链接并将其提供给系统

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

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

/usr/bin/mysql_secure_installation
Run Code Online (Sandbox Code Playgroud)


mot*_*aby 12

使用MySQL 5.6和5.7的Ubuntu上有一个错误,var/run/mysqld/只要MySQL服务停止或重新启动,它就会消失.这可以防止MySQL运行.找到这个解决方法,这不是完美的,但至少它在停止/重启后运行:

mkdir /var/run/mysqld/
chown mysqld /var/run/mysqld/
Run Code Online (Sandbox Code Playgroud)


Sad*_*dee 12

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

$ sudo /etc/init.d/mysqld stop
Run Code Online (Sandbox Code Playgroud)

如果进程仍在运行;

$ sudo pkill -9 mysqld
Run Code Online (Sandbox Code Playgroud)

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

$ sudo mkdir -p /var/run/mysqld
Run Code Online (Sandbox Code Playgroud)

将所有权设置为目录

$ sudo chown mysql:mysql /var/run/mysqld
Run Code Online (Sandbox Code Playgroud)

启动mysql

$ sudo /etc/init.d/mysql start
Run Code Online (Sandbox Code Playgroud)

尝试连接mysql

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


Tai*_*aiz 11

我遇到了同样的错误,发现这是由于软件包的升级,所以在重启系统后我解决了错误.

我认为由于sql库/包更新发生了错误,所以如果你正在做一些升级尝试这个:)


小智 8

这个问题有很多原因,但有时只是重新启动mysql服务器,它将解决问题.

sudo service mysql restart
Run Code Online (Sandbox Code Playgroud)


Muh*_*eed 8

为什么会出现这个错误

我收到了 mysql 库的新更新,所以我在收到这些错误后更新了我的 Kubuntu 操作系统。


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

MySql-server 运行正常,但是当我尝试连接它时

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'.
Run Code Online (Sandbox Code Playgroud)

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

我也尝试过这些命令进行连接,但对我不起作用。

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

 sudo service mysql start
Run Code Online (Sandbox Code Playgroud)

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

sudo apt-get clean
sudo apt-get update
sudo apt-get upgrade -f
Run Code Online (Sandbox Code Playgroud)

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


小智 6

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

[client]
password = your_mysql_root_password
port  = 3306
host  = 127.0.0.1
socket  = /var/lib/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)

  • 太棒了 - 这对我和我的 docker 环境很有用 - 我只需要调整 ip,在我的例子中是 docker mysql 容器 ip 172.17.xx (2认同)

Bil*_*lal 6

临时解决方案

也许有人面临这个问题。我在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
Run Code Online (Sandbox Code Playgroud)

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

所以,我刚刚在tmp目录中创建了一个指向这个文件的链接。

sudo ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
Run Code Online (Sandbox Code Playgroud)

请注意,这是一个临时解决方案,因为创建的文件将位于/tmp. 请参阅其他答案以获取永久解决方案。


Rob*_*och 6

在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. 如果服务器尚未运行,请启动它,然后尝试再次执行程序。

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


小智 6

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

#services mysql start
Run Code Online (Sandbox Code Playgroud)

或者

#/etc/init.d/mysql start
Run Code Online (Sandbox Code Playgroud)


小智 5

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

解决方案

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

  • sudo apt-get删除mysql-server
  • sudo apt-get删除mysql-client
  • sudo apt-get删除mysql-common
  • sudo apt-get删除phpmyadmin

然后再安装

  • sudo apt-get install mysql-server-5.6

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

  • 你想继续吗?[是/否] Y按YES进行完整安装

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

  • 最后你会得到这些线......

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

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

  • 然后

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

  • 输入密码:

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

    然后输入

  • 使用rahul_db(数据库名称);

谢谢.**


小智 5

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]
Run Code Online (Sandbox Code Playgroud)

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

这对我有用

  • 在 Ubuntu 18.04.4 LTS 中,位置应为 `/etc/mysql/mysql.cnf` (2认同)

Jac*_*ble 5

这已经被提到过几次了,但这对我来说立即起作用:

重启mysql服务


xsc*_*rp7 5

我有完全相同的问题。经过一个小时的奋斗,我找到了一种无需重新安装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/
Run Code Online (Sandbox Code Playgroud)

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

要完全关闭服务,请使用

# pkill -9 mysqld
Run Code Online (Sandbox Code Playgroud)

进程被终止后,尝试使用以下命令重新启动它

# /etc/init.d/mysql start
Run Code Online (Sandbox Code Playgroud)

你会发现它效果很好!而且阻止它也不会有问题。