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

sus*_*mah 395 mysql lamp phpmyadmin forgot-password mysql-error-2002

我在Ubuntu 12.04 LTS(Precise Pangolin)上安装了LAMP,然后在phpMyAdmin上设置root密码.我忘记了密码,现在我无法登录.当我尝试通过终端更改密码时,我得到:

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

我怎样才能解决这个问题?我无法打开LAMP,卸载它或重新安装它.

tow*_*wry 229

我曾经遇到过这个问题并通过安装解决了这个问题mysql-server,所以请确保你已经安装了mysql-server,而不是mysql-client其他东西.

该错误意味着该文件/var/run/mysqld/mysqld.sock不存在,如果您没有安装mysql-server,则该文件将不存在.但是如果mysql-server已经安装并且正在运行,那么您需要检查配置文件.

配置文件是:

/etc/my.cnf
/etc/mysql/my.cnf
/var/lib/mysql/my.cnf
Run Code Online (Sandbox Code Playgroud)

/etc/my.cnf,套接字文件配置可以是/tmp/mysql.sock并且在/etc/mysql/my.cnf套接字文件配置中可以是/var/run/mysqld/mysqld.sock.所以,删除或重命名/etc/mysql/my.cnf,让mysql使用/etc/my.cnf,那么问题可能会解决.

  • `sudo apt-get install mysql-server`在ubuntu上安装mysql (79认同)
  • 如果我必须在技术上解释,我会说1)如果您正在运行"mysql -u <user_name> -h <MySQL_Server_address> -p",您实际上正在运行mysql客户端来访问mysql服务器.如果您没有在'-h'提到的地址/ IP地址上安装mysql服务器,则会弹出上述错误.这是因为它无法通过套接字mysql.sock连接到MySQL服务器2)如果已经安装了Mysql-server,它应该正在运行.如果不是,你会发现同样的错误.因此,让它在您指定的服务器上运行. (8认同)
  • 作为第一步,我建议尝试重新启动服务器进程(请参阅其他服务器与客户端的区别).尝试sudo /etc/init.d/mysql restart.通常,不需要重新安装.我建议你先检查日志文件.不仅仅是mysql的日志文件,还有/ var/log/syslog,因为你可能有服务器崩溃导致mysql作为副作用分解. (3认同)
  • 对我来说它在 `etc/mysql/mysql.conf.d/mysqld.cnf` 中。这是唯一存在“/var/run/mysqld/mysqld.sock”的文件 (3认同)
  • 如果您尝试更改存储数据库的目录,但在配置文件中输入了错误的目录(如拼写错误),也会发生这种情况。它不会告诉您打字错误目录不存在,而是告诉您您没有访问它的权限。 (2认同)

小智 193

试试这个:

mysql -h 127.0.0.1 -P 3306 -u root -p <database>
Run Code Online (Sandbox Code Playgroud)

另外(看看它是否正在运行):

telnet 127.0.0.1 3306 
Run Code Online (Sandbox Code Playgroud)

可能只是my.cnf文件中的配置错误/etc/somewhere(取决于Linux发行版).

  • 我在 docker 上使用 mysql 服务器。localhost 不起作用,但 127.0.0.1 起作用。 (3认同)
  • 我遇到了同样的错误。我已经检查过并且 main 和 my.cnf 中的默认绑定已经设置为 127.0.0.1。但是,使用上面的命令允许我进行连接。将不得不继续寻找为什么只执行“mysql”会给出错误。 (2认同)
  • 我得到 telnet:无法连接到远程主机:由于 telnet 命令,连接被拒绝。但是 apache 仍然运行,因为我可以打开 localhost (2认同)

dav*_*jal 118

我看到所有这些答案,但没有提供重置密码没有接受的答案的选项.实际的问题是他忘记了密码,所以他需要重置,而不是看它是否正在运行(已安装或未安装),因为大多数这些答案都意味着.


重置密码

请按照以下步骤操作(如果您真的忘记了密码,可以提供帮助,即使您目前不在这种情况下也可以随时尝试):

  1. 停止 mysql

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

    或者对于其他分发版本:

    sudo /etc/init.d/mysqld stop
    
    Run Code Online (Sandbox Code Playgroud)
  2. 以安全模式启动MySQL

    sudo mysqld_safe --skip-grant-tables &
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用root登录MySQL

    mysql -uroot
    
    Run Code Online (Sandbox Code Playgroud)
  4. 选择要使用的MySQL数据库

    use mysql;
    
    Run Code Online (Sandbox Code Playgroud)
  5. 重置密码

    -- MySQL version < 5.7
    update user set password=PASSWORD("mynewpassword") where User='root';
    
    -- MySQL 5.7, mysql.user table "password" field -> "authentication_string"
    
    update user set authentication_string=password('mynewpassword') where user='root';
    
    Run Code Online (Sandbox Code Playgroud)
  6. 冲洗特权

    flush privileges;
    
    Run Code Online (Sandbox Code Playgroud)
  7. 重启服务器

    quit
    
    Run Code Online (Sandbox Code Playgroud)
  8. 停止并再次启动服务器

    Ubuntu和Debian:

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

    在CentOS,Fedora和RHEL上:

    sudo /etc/init.d/mysqld stop
    ...
    sudo /etc/init.d/mysqld start
    
    Run Code Online (Sandbox Code Playgroud)
  9. 使用新密码登录

    mysql -u root -p
    
    Run Code Online (Sandbox Code Playgroud)
  10. 输入新密码,再次享受您的服务器,就像什么都没发生一样

这取自重置MySQL root密码.


更新来自@ Daniel的评论如下:

在MySQL 5.7中,mysql.user表字段中的密码字段已被删除,现在字段名称为'authentication_string',因此步骤5应为:

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

  • 在MySQL 5.7中,mysql.user表字段中的密码字段被删除,现在字段名称为'authentication_string',因此(5)应该是`update user set authentication_string = password('mynewpassword')where user ='root'; ` (18认同)
  • 这对我很有用,但我首先必须实施这个解决方案:/sf/ask/2950714161/ (3认同)
  • 对于 MySQL 8,请在步骤 5 中使用以下内容: UPDATE mysql.user SETauthentication_string=null WHERE User='root'; (2认同)
  • @JoeKreydt,在 v.8 中,也可以使用 v.5.7+ 的原始示例,但是稍作修改,提供新密码值,而无需周围的 `passowrd()` 参数。 (2认同)

小智 65

我尝试了以下步骤:

  1. 登录super user或使用sudo
  2. /etc/mysql/my.cnf使用gedit打开
  3. 查找bind-address并将其值更改为数据库服务器主机的IP地址.对我来说,它是localhost127.0.0.1
  4. 保存并关闭文件.
  5. 回到终端并执行 sudo service mysql start

它对我有用.

  • 从这,我刚刚运行sudo服务mysql重启,它工作. (4认同)
  • @rshahriar 在我的 /etc/my.cnf 中没有称为绑定地址的内容,添加该字段是个好主意吗 (2认同)

小智 39

我通过执行以下命令解决了这个问题:

mysql.server start
Run Code Online (Sandbox Code Playgroud)

如果您使用的是mac并使用brew来安装mysql,只需使用:

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

  • `mysql.server start`:找不到命令(Ubuntu) (6认同)

dko*_*oes 33

我遇到了类似的问题.mysql无法启动:

sudo service mysql start
start: Job failed to start
Run Code Online (Sandbox Code Playgroud)

如果我禁用apparmor:

sudo aa-complain /etc/apparmor.d/*
Run Code Online (Sandbox Code Playgroud)

问题消失了.问题是mysqld试图访问/run/mysqld/mysqld.sock但是apparmor配置文件只给了/var/run/mysqld/mysqld.sock的权限(/ var/run符号链接到/ run,所以这些实际上是相同).不确定为什么mysqld没有使用var路径,因为这是在所有配置文件中设置的,但你可以通过将以下内容添加到/etc/apparmor.d/usr.sbin.mysqld来解决问题

/run/mysqld/mysqld.pid rw,
/run/mysqld/mysqld.sock rw,
Run Code Online (Sandbox Code Playgroud)


Mar*_*ltz 30

在我的情况下,磁盘已满,mysqld无法启动.

尝试重启mysql服务.

service mysql restart

要么

服务mysql停止

服务mysql启动

如果它不识别"停止"命令,那么肯定是磁盘空间.您应该在分区mysql中分配一些空间或使磁盘变大.

检查磁盘空间

df -h

  • 同样的事情发生在我身上 - 全盘.清理了一些空间,重新启动并且问题消失了. (2认同)
  • 如果那是您执行的问题:“ /etc/init.d/mysqld start”会告诉您您的磁盘分区已满 (2认同)

小智 28

我通过杀死mysql进程解决了这个问题:

ps -ef | grep mysql
kill [the id]
Run Code Online (Sandbox Code Playgroud)

然后我再次启动服务器:

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

start也有效:

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

然后我登录admin,我完成了.


Wou*_*ter 19

不知何故,MySQL服务器进程没有创建套接字,或者客户端正在寻找错误位置的套接字.

我的第一个建议是检查MySQL服务器是否正在运行.第二个建议可能是MySQL服务器在另一台主机上运行吗?如果是这样,请将-h <hostname>标志添加到终端中的MySQL客户端.

如果MySQL确实正在运行并在本地运行,请检查您的my.cnf文件.应该有像这样的一条线

socket = /var/run/mysqld/mysqld.sock
Run Code Online (Sandbox Code Playgroud)

看看它是否与您在帖子中提到的套接字位置匹配.

根据经验,我认为最可能出现的情况是你的MySQL服务器根本没有运行,或者没有在你从终端运行MySQL客户端的同一主机上运行.


Rob*_*Rob 19

在我不得不重新启动生产服务器后,我刚刚遇到了同样的问题.我在DigitalOcean Droplet上运行Debian 8.1(Jessie).

这就是我为解决我的问题而采取的措施:

  1. 检查文件是否/var/run/mysqld/mysqld.sock存在.如果没有,请通过输入手动创建touch /var/run/mysqld/mysqld.sock(这是我必须做的).

  2. 所以MySQL进程可以使用这个文件.通过输入更改所述文件的所有权chown mysql /var/run/mysqld/mysqld.sock.

  3. 完成'2'后,输入service mysql restart或重启MySQL服务/etc/init.d/mysql restart.

完成上述步骤后,我的问题就解决了.我很少遇到这个问题,而且可能有更好的方法,所以如果需要,请务必提供建设性的反馈:).


小智 15

你的mysql服务器可能没有运行.通过键入mysql.server start终端确保它运行.


小智 13

检查"bind-adress"my.cnf中的参数.

否则尝试使用命令:

mysql -h 127.0.0.1 -P 3306 -u root -p
Run Code Online (Sandbox Code Playgroud)
  • -h表示host 127.0.0.1,即localhost

  • 端口的-P(注意-P为大写)3306,即MySQL的默认端口


M E*_*B O 12

拳头,尝试重新启动它

\n
\n

mysql服务停止

\n
\n
\n

服务mysql启动

\n
\n

如果以上还不能解决问题,那么现在让我们......

\n

完全卸载MySQL

\n
sudo apt-get remove --purge mysql\\*\n
Run Code Online (Sandbox Code Playgroud)\n

重新安装它

\n
sudo apt install mysql-server mysql-client\n
Run Code Online (Sandbox Code Playgroud)\n

测试是否运行

\n
sudo mysql\n
Run Code Online (Sandbox Code Playgroud)\n

安装 PHP 驱动程序

\n
sudo apt install php7.4 php7.4-fpm php7.4-mysql php7.4-cgi php7.4-cli php7.4-common\n
Run Code Online (Sandbox Code Playgroud)\n

您可以用 php7.x 或 php8.0.12 或更高版本替换 php7.4\n非常好!

\n

\xe2\x9d\x97\xef\xb8\x8f请小心,如果不保存数据,您将丢失数据。如果可能的话,请备份您的数据。

\n

  • 谨防数据丢失 (4认同)
  • 这不行。你甚至会丢失数据 (2认同)

Use*_*ser 11

这对我有用:

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

这会创建一个链接.


Mur*_*ala 11

如果您正在使用Amazon EC2,并且您在实例上遇到此问题,那么您只需执行以下操作:

sudo yum install mysql-server
sudo service mysqld restart
Run Code Online (Sandbox Code Playgroud)

Amazon EC2没有安装服务器(仅安装了客户端),因此如果需要在您的实例上安装它,之后尝试

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

检查是否有效.


小智 9

我想每当你收到错误

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

我建议先检查你的mysql守护进程是否正在运行......大多数情况下它默认不运行.你可以检查一下/etc/init.d/mysqld status.

如果它没有运行,那么先启动它:

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

我打赌它会110%起作用.


use*_*468 9

确保您拥有重要数据库的备份,然后尝试卸载MySQL相关的东西:

apt-get remove --purge mysql\*
Run Code Online (Sandbox Code Playgroud)

然后再次安装:

apt-get install mysql-server mysql-client
Run Code Online (Sandbox Code Playgroud)

这对我有用,数据保存.

如果PHP MySQL显示错误,您可能需要重新安装PHP MySQL:

apt-get install php5-fpm php5-mysql
Run Code Online (Sandbox Code Playgroud)


mpi*_*dio 9

而不是使用localhost:

mysql -u myuser -pmypassword -h localhost mydatabase
Run Code Online (Sandbox Code Playgroud)

使用127.0.0.1

mysql -u myuser -pmypassword -h 127.0.0.1 mydatabase
Run Code Online (Sandbox Code Playgroud)

(另请注意,-p和mypassword之间没有空格)

请享用 :)


Rok*_*oko 8

我也面临着同样的问题,如果mysql server默认情况下您没有运行它,它将再次出现,几秒钟后它将再次停止,因此您再次运行($ sudo service mysql start )命令,如果知道,可以更改。

对于该使用命令

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

(如果需要,请输入用户密码,因为我们使用sudo),然后运行

$ sudo mysql -u root -p          (put user password if required )
Run Code Online (Sandbox Code Playgroud)

现在您有了数据库


Arm*_*eri 8

看来您的 MYSQL 已停止。使用以下命令再次启动 MySQL

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


小智 7

如果您的安装是最新的,则应确认安装的是SERVER ...作为mysql-server-5.5 ..也许您只安装了“ mysql” ..这仅是客户端而不是服务器。


小智 7

如果您的Linux计算机上安装了XAMPP,请尝试将my.cnf文件从中复制/opt/lampp/etc/my.cnf/etc/my.cnf.

然后,mysql -u root再次运行...你现在应该有正确的套接字,并能够运行MySQL客户端.


Ken*_*Ong 7

我也遇到了这个问题,但我刚刚做了:

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

它对我有用.


Bha*_*kar 6

在我的情况下,默认端口3306正被其他一些进程使用,因此它没有启动.我停止了其他服务并做了之后sudo service mysql start,它工作正常.顺便说一句,您可以使用类似的东西sudo lsof -Pn -iTCP:3306来查看谁可能正在使用该端口.


小智 6

在我的情况下,它通过做一些研发工作:

我可以使用连接到MySQL

root-debian#mysql -h 127.0.0.1 -u root -p
Run Code Online (Sandbox Code Playgroud)

但它没有合作mysql -u root -p.

bind-addressmy.cnf中找不到任何内容.所以我outcommented参数socket=/var/lib/mysql/mysqld.sockmy.cnf这是害我一个问题登录.

重新启动服务后,它很好:

root@debian:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.6.19 MySQL Community Server (GPL)
Run Code Online (Sandbox Code Playgroud)


小智 6

我找到了解决方案

在触发命令之前:mysql_secure_installation

  • 步骤1: sudo systemctl stop mariadb
  • 第2步: sudo systemctl start mariadb
  • 第3步: mysql_secure_installation

然后它将询问root密码,您只需 Enter键并设置新的root密码即可.


Jaz*_*uly 6

我用重启mysql解决了这个问题

/etc/init.d/mysql stop

/etc/init.d/mysql start

而已。


Nam*_*ind 6

您缺少创建 /var/run/mysqld 目录的权限。因此,请按如下方式创建并授予权限。

  • mkdir -p /var/run/mysqld
  • chown mysql:mysql /var/run/mysqld


小智 5

根据经验,我说您需要先检查服务器是否正在运行,然后再尝试配置MySQL。最后一种解决方案是重新安装MySQL。


小智 5

检查您是否具有正确的权限:

sudo chmod 755 /var/lib/mysql/mysql
Run Code Online (Sandbox Code Playgroud)

我遇到了同样的问题,这对我有用。完成此操作后,我能够启动MySQL。


小智 5

在 Ubuntu 14.04 (Trusty Tahr) 上也是如此。

如果您安装了 XAMPP,安装 mysql-server 不是解决方案,因为您将访问另一个 MySQL!

您必须使用正确的套接字才能访问。通常是这样的:

/opt/lampp/var/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)

相反,将其更改为:

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


小智 5

我遇到过同样的问题.如果您的MySQL服务被拒绝,有时会发生这种情况.

所以你必须开始它:

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


Aks*_*hay 5

打开终端并输入:

sudo apt-get purge mysql-client-core-5.6

sudo apt-get autoremove

sudo apt-get autoclean

sudo apt-get install mysql-client-core-5.5

sudo apt-get install mysql-server  
Run Code Online (Sandbox Code Playgroud)

MySQL数据库核心客户端和MySQL Server软件包都将是相同的5.5版本。MySQL客户端5.5和MySQL Server 5.5是Ubuntu 14.04中这些软件包的“最佳”版本,具体由软件包维护者确定。

如果您想安装MySQL Client 5.6和MySQL Server 5.6,也可以在Ubuntu软件中心中找到mysql-client-core-5.6和mysql-server-5.6软件包。重要的是,在任何情况下,客户端和服务器版本号均匹配。

这对我有用。


vim*_*imx 5

mysqld stop
mysql.server start
Run Code Online (Sandbox Code Playgroud)


Buk*_*ksy 5

在我的情况下,当我运行时,似乎我真的无法杀死mysql进程

sudo service mysql stop
ps -ef | grep mysql
Run Code Online (Sandbox Code Playgroud)

mysql进程总是在那里,它看起来像是阻塞了套接字文件而新的mysql进程本身无法创建它.

所以这有帮助

cd /var/run
sudo cp mysqld/ mysqld.bc -rf
sudo chown mysql:mysql mysqld.bc/
sudo service mysql stop
sudo cp mysqld.bc/ mysqld -rf
sudo chown mysql:mysql mysqld -R
sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &
Run Code Online (Sandbox Code Playgroud)

现在我可以使用登录数据库了

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

然后更新root密码:

UPDATE user SET authentication_string=password('YOURPASSWORDHERE') WHERE user='root';
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

PS:我无法更新root passwod,看起来像"auth_socket"插件有问题,所以我不得不创建具有完全权限的新用户

insert into user set `Host` = "localhost", `User` = "super", `plugin` = "mysql_native_password", `authentication_string` = NULL, `password_expired` = "N", `password_lifetime` = NULL, `account_locked` = "N", `Select_priv` = "Y",
`Insert_priv` = "Y", `Update_priv` = "Y", `Delete_priv` = "Y", `Create_priv` = "Y", `Drop_priv` = "Y", `Reload_priv` = "Y", `Shutdown_priv` = "Y", `Process_priv` = "Y", `File_priv` = "Y",
`Grant_priv` = "Y",  `References_priv` = "Y", `Index_priv` = "Y", `Alter_priv` = "Y", `Show_db_priv` = "Y", `Super_priv` = "Y", `Create_tmp_table_priv` = "Y", `Lock_tables_priv` = "Y",
`Execute_priv` = "Y", `Repl_slave_priv` = "Y",  `Repl_client_priv` = "Y",  `Create_view_priv` = "Y", `Show_view_priv` = "Y", `Create_routine_priv` = "Y", `Alter_routine_priv` = "Y",
`Create_user_priv` = "Y",  `Event_priv` = "Y", `Trigger_priv` = "Y", `Create_tablespace_priv` = "Y";
Run Code Online (Sandbox Code Playgroud)

这会创建没有密码的用户"超级",然后您可以连接 mysql -u super


Tho*_*ber 5

在Debian服务器Jessie上,我的工作解决方案就是这样做

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

以root用户身份


小智 5

对于 CentOS Linux 版本 7.3 mysql.sock 文件路径为/var/lib/mysql/mysql.sock

编辑/etc/my.cnf文件并将其放在条目下面这将解决您的问题。

[client]
user=root
password=Passw0rd
port=3306
socket=/var/lib/mysql/mysql.sock
[mysqld]
bind-address=0.0.0.0
Run Code Online (Sandbox Code Playgroud)

此后重新启动服务

service mysql restart
Run Code Online (Sandbox Code Playgroud)

  • 这个答案实际上解释了错误的根本原因是什么 (2认同)

归档时间:

查看次数:

1401784 次

最近记录:

6 年,3 月 前