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

时间:2012-08-16 15:34:18

标签: mysql linux ubuntu

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

# mysqld_safe --skip-grant-tables &

我永远不会得到提示。我试图关注these instructions to recover the password

屏幕看起来像这样:

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。但我注意到它没有提示我输入密码。是不是应该要求管理员密码?

47 个答案:

答案 0 :(得分:208)

尝试此命令,

sudo service mysql start

答案 1 :(得分:164)

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

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 mysqlps aux | grep mysql | grep -v grep
      • 查找mysql的进程ID
      • 假设进程ID 4969kill -9 4969
      • 终止

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

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

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

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

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

答案 2 :(得分:104)

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

ps -A|grep mysql

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

sudo pkill mysql

然后运行命令:

ps -A|grep mysqld

同样通过运行

来终止此过程
sudo pkill mysqld

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

service mysql restart
mysql -u root -p

再次使用mysql非常好

答案 3 :(得分:36)

解决方案更容易。

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

答案 4 :(得分:24)

安装后只需启动MySQL服务:

对于Ubuntu:

sudo service mysql start;

对于CentOS或RHEL:

sudo service mysqld start;

答案 5 :(得分:12)

好吧,只需复制并粘贴这些代码:这应该在终端,服务器内部,当你的mysql数据库没有正确安装时,以及当你收到这个错误时:'无法连接到本地MySQL服务器socket'/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

答案 6 :(得分:11)

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

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

答案 7 :(得分:11)

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

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

答案 8 :(得分:8)

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

sudo service mysql restart

答案 9 :(得分:6)

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

中编辑文件
[client]
password = your_mysql_root_password
port  = 3306
host  = 127.0.0.1
socket  = /var/lib/mysql/mysql.sock

答案 10 :(得分:5)

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

<强>解决方案

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

  • sudo apt-get remove mysql-server
  • sudo apt-get remove mysql-client
  • sudo apt-get remove mysql-common
  • sudo apt-get remove 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(首先是每个密码u 应该使用)

  • 输入密码:

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

    然后输入

  • USE rahul_db(数据库名称);

感谢。**

答案 11 :(得分:5)

在ubuntu上使用XAMPP:

  1. / var / run 目录中创建名为 mysqld 的文件夹。您可以使用命令sudo mkdir /var/run/mysqld

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

  4.   

    注意: mysql.sock 文件是在服务器启动时创建的,当服务器停止时会被删除,因此有时您创建的链接可能会被破坏但只要您使用sudo /opt/lampp/lampp start或任何其他方式启动服务器,它就应该有效。

    1. 启动服务器(如果尚未运行)并再次尝试执行程序。
    2. 祝你好运!我希望你这次能逃脱它。

答案 12 :(得分:4)

如果您已安装mysqld.sock,则可以在/var/run/mysqld中找到mysql-serversudo apt-get install mysql-server

答案 13 :(得分:4)

也许有人面临这个问题。我在 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

答案 14 :(得分: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

这对我有用

答案 15 :(得分:4)

这已经提到了几次,但这对我来说很有效:

service mysql restart

答案 16 :(得分:3)

为什么会出现此错误

我收到了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

之后,一切对我来说都是固定的。

答案 17 :(得分:3)

如果你的系统上有很多数据库和表,如果你在my.cnf中设置了innodb_file_per_table,那么你的mysql服务器可能已用完已打开的对象/文件(或者更确切地说是这些对象) 使用

设置新的最大数字
open-files-limit = 2048

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

答案 18 :(得分:3)

在我的情况下,两个mysqld进程正在运行.. 使用了杀死可选进程 pkill -9 mysqld

答案 19 :(得分:2)

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

#services mysql start

#/etc/init.d/mysql start

答案 20 :(得分:2)

我刚刚在Ubuntu 14.10上遇到过这个问题

转而认为mysql-server已不再安装(不知何故已被删除)但我无法安装它,因为存在一些破坏的包和依赖性问题/冲突。

最后我不得不重新安装mysql

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

答案 21 :(得分:2)

答案 22 :(得分:1)

你必须安装mysql-server

apt install mysql-server

答案 23 :(得分: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。

祝你好运!

答案 24 :(得分:1)

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

sudo mysql

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

MySQL 5.7进行了一些更改,默认情况下,root用户使用auth_socket插件(与mysql_native_password相对)来保护帐户免遭黑客攻击。您可以通过将插件字段设置为root来覆盖此设置,但是除非您有充分的理由,否则您可能不应该绕过保护措施。无论如何,尤其是sudo mysqlmysql -u root -p容易的时候。

我从Raspberry Pi帮助站点中找到了所有地方的此信息。在Lubuntu 18.04使我烦恼了两个小时之后,他像魅力一样工作。

答案 25 :(得分:1)

我还会检查mysql配置。我在使用自己的服务器时遇到了这个问题,但是我的机器有点过于草率和错误配置了innodb_buffer_pool_size。

innodb_buffer_pool_size = 4096M

它通常可以运行到2048年,但我想我没有必要的内存来支持4场演出。

我想这也可能发生在其他mysql配置设置中。

答案 26 :(得分:1)

我在Ubuntu的虚拟机上运行MySQL,所以发生的事情是当我重新启动主机和VM时,IP已经改变了。我已将mysql配置为在IP 192.168.0.5上运行,现在由于动态分配IP,我的新IP为192.168.0.8

如果您遇到同样的问题,只需使用命令ifconfig检查您的IP。

使用命令cat /etc/mysql/my.cnf | grep bind-address

检查MySQL绑定

如果两个IP相同,则重新安装mysql服务器

如果没有,请使用nano,vi,vim或您喜欢的任何内容在/etc/network/interfaces中更改您的IP。

我更喜欢sudo nano /etc/network/interfaces

并输入以下内容

auto eth0
iface eth0 inet static
address 192.168.0.5
netmask 255.255.255.0

保存interfaces文件,重新启动界面sudo ifdown eth0&amp;&amp; sudo ifup eth0替换&#34; eth0&#34;使用您的网络接口

重新启动MySQL sudo service mysql stop,然后重启sudo service mysql start

如果你遇到与我相同的问题,你很高兴!

答案 27 :(得分:1)

host更改为127.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

答案 28 :(得分:0)

我在Ubuntu上使用XAMPP。通过终端连接数据库时发现此错误。我无需任何配置即可解决该问题,因为XAMPP中的默认套接字文件路径写在“ /opt/lampp/etc/my.cnf”中,如下所示:

[client]
#password   = your_password
port        = 3306
socket      = /opt/lampp/var/mysql/mysql.sock

现在您只需在终端上通过mysql命令将此套接字路径参数提供即可进行连接:

mysql -u root --socket /opt/lampp/var/mysql/mysql.sock

并且无需任何配置即可完成

如果您不想每次都键入套接字路径,请通过“ /var/run/mysqld/mysqld.sock”更改my.cnf中的默认路径。提供权限并重新启动mysql服务器。

答案 29 :(得分:0)

我的情况是/ etc /目录中的mysql重命名为mysql_bk,只需复制mysql_bk

sudo cp -r /etc/mysql_bk/ /etc/mysql/

然后

service mysql restart

答案 30 :(得分:0)

与Ubuntu 18.04相同

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

  1. mysqld.sock = 实际上位于文件夹/run/mysqld/
  2. ⋊> / ll /var/run
    lrwxrwxrwx 1 root root 4 Nov 1 2018 /var/run -> /run/

hmmm ...这是否意味着符号链接不起作用?太奇怪了...

答案 31 :(得分:0)

只是与你们分享,我遇到了同样的问题并使用以下命令解决了

<块引用>

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

我从 my.cnf 和错误中硬链接了两个位置

我得到了这个答案 enter link description here

答案 32 :(得分:0)

我的解决方案;

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

答案 33 :(得分:0)

请确保您无法访问的套接字文件路径与“ /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

答案 34 :(得分:0)

我遇到了完全相同的问题。经过一个小时的努力,我发现了一种无需重新安装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

您将看到它很好用!而且也不会停止它。

答案 35 :(得分:0)

有时只是您的服务器上没有足够的空间,只是释放了一些空间(例如清除日志文件),然后启动mysql:

/etc/init.d/mysql start

答案 36 :(得分:0)

首先创建dir / var / run / mysqld

使用命令:

mkdir -p /var/run/mysqld

然后在目录中添加约束

chown mysql:mysql /var/run/mysqld

尝试之后

mysql -u root

答案 37 :(得分:0)

对于那些通过 Vitess 使用 MySql 的人。

由于传递给 ; 的语法错误(忘记将 init_db.sql 添加到 SQL 命令的末尾),我在 vttablet 组件中收到此错误,该错误被指定为 { {3}} 入门example

apiVersion: v1
kind: Secret
metadata:
  name: my-cluster-config
type: Opaque
stringData:
  users.json: |
    {
      "user": [{
        "UserData": "user",
        "Password": "pass"
      }]
    }
  init_db.sql: |
    # This file is executed immediately after mysql_install_db,
    # to initialize a fresh data directory.
    CREATE DATABASE IF NOT EXISTS my_db <--- No ';' at the end

完整的错误日志:

<块引用>

TabletManager.ReplicationStatus()(on zone1from) 错误: net.Dial(/vt/socket/mysql.sock) 到本地服务器失败:dial unix /vt/socket/mysql.sock: 连接: 没有这样的文件或目录 (errno 2002)

答案 38 :(得分:0)

当MariaDB启动时创建mysql.sock文件,并在MariaDB关闭时删除。如果MariaDB没有运行,它就不会存在。 也许你没有安装MariaDB。 您可以遵循以下说明: https://www.linode.com/docs/databases/mariadb/how-to-install-mariadb-on-centos-7 BEST

答案 39 :(得分:0)

在archlinux上我遇到了这个错误,问题是mysqld - 服务没有运行。

但是我无法按照Archlinux文档中的说明使用systemctl start mysqld启用mysql-service。我认为错误就像是

  

未找到mysqld.service

我首先需要重启系统。

然后我再次输入命令(并输入systemctl enable mysqld),现在mysql能够找到创建的mysql.sock

答案 40 :(得分:0)

当我在digitalocean上调整Droplet的大小时,我遇到了这种类型的问题。我升级了mysql版本并为我工作。这是我应用的教程 - https://serverpilot.io/community/articles/how-to-upgrade-mysql-5.5-to-5.6-on-ubuntu-14.04.html

答案 41 :(得分:0)

在我的情况下,问题是/etc/mysql/my.cnf中的绑定地址,然后:

nano /etc/mysql/my.cnf

搜索绑定地址并删除特定的主机ip(不是127.0.0.1)

答案 42 :(得分:0)

我尝试了几乎所有列出的解决方案,直到我重新启动机器然后在我发出命令&#34; service mysql restart&#34;时重新启动mysql服务器时,没有一个能为我工作。

答案 43 :(得分:-1)

使用mysql配置找到my.cnf文件我的是/etc/mysql/my.cnf (相应地更改套接字的位置)

port            = 3306
socket          = /tmp/mysql.sock

以下是某些特定计划的条目 以下值假设您至少有32M ram

这正式名称为[safe_mysqld]。目前两个版本都已解析。

[mysqld_safe]
socket          = /tmp/mysql.sock
nice            = 0

答案 44 :(得分:-1)

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

有时它是由于mysql服务器出现故障时,在实时服务器中我认为你应该重新启动服务器而且在localhost中你需要重新启动mysql服务器。

答案 45 :(得分:-1)

此解决方案可以帮助其他人,有时修复非常简单。

在你的实时环境中重启mysql server和apache

sudo service mysql restart
sudo apache services restart

这是安装插件或执行任何数据库命令时的常见问题。

答案 46 :(得分:-1)

在lampp中我认识到它不能识别mysql命令。 试试

sudo /opt/lampp/bin/mysql

它会打开你可以与数据库通信的mysql终端..