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

57

我遇到了以下错误:

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

尽管我已经通过Ubuntu命令行成功启动了MySQL。

mysql stop/waiting
mysql start/running, process 17691

然而,当我尝试访问该网站时,出现了数据库连接错误,并且在尝试通过mysql -u root -p访问mysql时出现了上述错误。
我检查了我的错误日志,发现了这个问题。
    131029 12:53:34 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be remo$
    131029 12:53:34 [Note] Plugin 'FEDERATED' is disabled.
    131029 12:53:34 InnoDB: The InnoDB memory heap is disabled
    131029 12:53:34 InnoDB: Mutexes and rw_locks use GCC atomic builtins
    131029 12:53:34 InnoDB: Compressed tables use zlib 1.2.3.4
    131029 12:53:34 InnoDB: Initializing buffer pool, size = 26.0G
    131029 12:53:36 InnoDB: Completed initialization of buffer pool
    131029 12:53:36 InnoDB: highest supported file format is Barracuda.
    131029 12:53:38  InnoDB: Waiting for the background threads to start
    131029 12:53:39 InnoDB: 5.5.34 started; log sequence number 5146431500
    131029 12:53:39 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
    131029 12:53:39 [Note]   - '0.0.0.0' resolves to '0.0.0.0';
    131029 12:53:39 [Note] Server socket created on IP: '0.0.0.0'.
    131029 12:53:39 [Note] Event Scheduler: Loaded 0 events
    131029 12:53:39 [Note] /usr/sbin/mysqld: ready for connections.
    Version: '5.5.34-0ubuntu0.12.04.1-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  (Ubuntu)

这是我第一次看到这个错误,不确定该如何解决,请在这里给我一些帮助。

谢谢

更新

好的,我尝试了glglgl的解决方案,在重启后,错误日志中出现了以下内容:

    131029 13:17:36 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be remo$
    131029 13:17:36 [Note] Plugin 'FEDERATED' is disabled.
    131029 13:17:36 InnoDB: The InnoDB memory heap is disabled
    131029 13:17:36 InnoDB: Mutexes and rw_locks use GCC atomic builtins
    131029 13:17:36 InnoDB: Compressed tables use zlib 1.2.3.4
    131029 13:17:36 InnoDB: Initializing buffer pool, size = 26.0G
    131029 13:17:38 InnoDB: Completed initialization of buffer pool
    131029 13:17:38 InnoDB: highest supported file format is Barracuda.
    131029 13:17:40  InnoDB: Waiting for the background threads to start
    131029 13:17:41 InnoDB: 5.5.34 started; log sequence number 5146431500
    131029 13:17:41 [Note] Server hostname (bind-address): '127.0.0.1'; port: 3306
    131029 13:17:41 [Note]   - '127.0.0.1' resolves to '127.0.0.1';
    131029 13:17:41 [Note] Server socket created on IP: '127.0.0.1'.  
    131029 13:17:41 [Note] Event Scheduler: Loaded 0 events
    131029 13:17:41 [Note] /usr/sbin/mysqld: ready for connections.
    Version: '5.5.34-0ubuntu0.12.04.1-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  (Ubuntu)

在相关栏目中向右看。 - Mihai
我尝试了将近一周的时间,但那里的所有解决方案都没有帮助到我,我已经尝试过它们全部。 - user2028856
我认为这个问题不适合在stackoverflow上,必须移动到http://serverfault.com/。另一方面,请先阅读手册;MySQL在Ubuntu上的安装过程已经被详细描述了很多次(包括故障排除过程),只要不懒,就可以通过谷歌找到答案。 - Roman Podlinov
这个帖子中有一个可行的解决方案:http://forums.mysql.com/read.php?10,561011,561282#msg-561282 - Juan Lanus
重复和不好的答案,请参见https://dev59.com/oWgu5IYBdhLWcg3wASaO。 - Peter Krauss
36个回答

66

我的问题得到解决是因为检查进程是否在Ubuntu 12.04上运行。

ps ax | grep mysql

然后答案是它没有运行,所以我这样做了

sudo service mysql start

或者尝试一下

sudo /etc/init.d/mysql start

它说未识别的服务! - Amanuel Nega
尝试使用sudo /etc/init.d/mysql start启动MySQL。 - Wellington Lorindo
5
sudo /etc/init.d/mysql start 帮了我。谢谢。 - henrywright
8
在/etc/init.d中没有MySQL! - Rodrigo
这个命令帮助我启动了MySQL:sudo /etc/init.d/mysql start。 - Namjith Aravind

52

首先,请确认已安装mysql-server。如果mysql-server已安装但某种原因导致损坏,可能会出现相同的错误。我通过完全卸载mysql并重新安装来解决此问题。

sudo apt-get remove --purge mysql*
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get install mysql-server mysql-client

更新Ubuntu后,我的安装文件损坏了;重新进行干净的安装让我感到很有信心。 - mumair
这对我有用,尽管前三个清理命令不是必要的。 - ze_iliasgr

16
这花了我很长时间才弄明白,但你能尝试同样的方法 -
1 - 更新和升级。
sudo apt-get update
sudo apt-get upgrade

2 - 清除MySQL服务器和客户端(如果已安装)。

sudo apt-get purge mysql-server mysql-client

3 - 安装新的MySQL Server和Client

sudo apt-get install mysql-server mysql-client

4 - 测试 MySQL

mysql -u root -p
> enter root password

*** 应该在 /var/run/mysqld/mysql.sock 中获取套接字未找到错误。

4 - 使用nano或vi配置mysqld.cnf

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

将bind-address从127.0.0.1更改为localhost。

bind-address            = localhost

** 编写并退出

5 - 重新启动MySQL

sudo /etc/init.d/mysql restart

6 - 检查 MySQL

mysql -u root -p
> enter root password

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.13-0ubuntu0.16.04.2 (Ubuntu)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective owners.

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

mysql>

现在你应该进入mysql cli。

希望能对你有所帮助。

Code.Ph0y


14

当我在我的系统上安装xampp时,遇到了同样的问题。MySQL服务器寻找/var/run/mysqld/mysqld.sock,但mysql.sock文件在xampp文件夹中,所以我使用了:

 find / -name '*.sock'

寻找mysql.sock文件并使用它

ln -s <the file location> /var/run/mysqld/mysqld.sock

获取*.sock文件的链接后,尝试了MySQL,且没有出现错误。

记得创建目录,如果它不存在。


2
在访问被拒绝时(用于创建文件夹和符号链接),还应该使用sudo。 - Enrique

12

客户端应该与服务器设置保持一致。

[client]
port        = 3306
socket      = /var/run/mysqld/mysqld.sock

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

3
服务器设置是指在何处进行设置?这是需要编辑的文件,还是应该预先设置好?请解释一下。 - DaveWalley
2
@DaveWalley 我猜他指的是my.cnf文件 - Mark
2
当然,通常它位于 /etc/my.cnf 或 /etc/mysql/my.cnf。 - feuyeux

11

你不需要重新安装MySQL服务器 我曾经遇到过同样的问题,但我通过运行这些命令解决了问题。

  1. ps -A|grep mysql
  2. sudo pkill mysql
  3. ps -A|grep mysqld
  4. sudo pkill mysqld
  5. sudo service mysql restart
  6. sudo mysql -u root -p

  1. mysql -u root -p 这一步应该使用 root 权限,例如 sudo mysql -u root -p
- Kasun Hasanga
1
是的,@KasunHasanga,你说得对,我已经更新了它。 - Chudamani Sanju

7

最近在我的mysql中遇到了这个错误:

ERROR 2002 (HY000):

无法通过套接字连接到本地MySQL服务器

'/var/lib/mysql/mysql.sock' (111)

因为我忘记启动我的mariadb。 只需在终端上键入此命令即可。

systemctl start mariadb.service

6
在Linux终端中,我执行了以下步骤,它们帮助了我。
1.首先列出所有已安装的mysql软件包。
  sudo dpkg -l | grep mysql

2.使用列出的命令删除列出的软件包

  sudo apt-get --purge autoremove <package name>

3. 重新安装 MySQL 服务器

  sudo apt-get install mysql-server

这对我很有效,希望对你也有用。
或者尝试:
sudo apt-get remove --purge mysql-\

然后重新安装,使用以下命令:
sudo apt-get install mysql-server mysql-client

4
我使用以下命令删除了与mysql相关的所有内容:

sudo apt-get remove --purge --auto-remove mysql-client-5.7 mysql-client-core-5.7 mysql-common mysql-server-5.7

sudo rm -r /etc/mysql* /var/lib/mysql* /var/log/mysql*

然后我再次安装了它:

sudo apt-get update

sudo apt-get install mysql-server

最后,我使用以下命令启动它:

mysql -u root -p

并输入密码。

3
这是一个旧的帖子,提出了不同的解决方案,但它们都对我没用。我添加这个答案希望能帮助像我一样苦苦挣扎的人。
我检查了所有现有的答案和解决方案,但对我来说问题是var/run/mysql文件夹上错误的用户权限。
我检查了该文件夹的用户权限,发现设置为root。一旦我将其更改为mysql:mysql,问题就解决了。
因此,请进入/var/run/mysqld并将用户权限更改为:
chown -R mysql:mysql .

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接