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

问题描述 投票:358回答:69

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

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

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

mysql phpmyadmin lamp forgot-password mysql-error-2002
69个回答
219
投票

我曾经有过这个问题并通过安装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

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


19
投票

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

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

  1. 检查文件-h <hostname>是否存在。如果没有,请通过输入my.cnf手动创建它(这是我必须要做的)。
  2. 所以MySQL进程可以使用这个文件。输入socket = /var/run/mysqld/mysqld.sock 更改所述文件的所有权。
  3. 完成'2'后,输入/var/run/mysqld/mysqld.socktouch /var/run/mysqld/mysqld.sock重启MySQL服务。

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


15
投票

你的mysql服务器可能没有运行。通过在终端中键入chown mysql /var/run/mysqld/mysqld.sock确保它运行。


12
投票

检查my.cnf中的service mysql restart参数。

否则尝试使用命令:

/etc/init.d/mysql restart
  • -h为主机mysql.server start,即localhost
  • 端口"bind-adress"的-P(注意-P为大写),即MySQL的默认端口

11
投票

这对我有用:

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

这会创建一个链接。


10
投票

如果您正在使用127.0.0.1,并且您在实例上遇到此问题,那么您只需要:

3306

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

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

检查是否有效。


9
投票

我想每当你收到错误

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

我建议先检查你的Amazon EC2守护进程是否正在运行......大多数情况下它默认不运行。您可以通过sudo yum install mysql-server sudo service mysqld restart 查看。

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

 mysql -u root -p

我打赌它会110%起作用。


9
投票

而不是使用localhost:

mysql

使用127.0.0.1

/etc/init.d/mysqld status

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

请享用 :)


8
投票

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

.../etc/init.d/mysqld start.

然后再次安装:

mysql -u myuser -pmypassword -h localhost mydatabase

这对我有用,数据保存。

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

mysql -u myuser -pmypassword -h 127.0.0.1 mydatabase

7
投票

如果您的Linux机器上安装了apt-get remove --purge mysql\* ,请尝试将apt-get install mysql-server mysql-client 文件从apt-get install php5-fpm php5-mysql 复制到XAMPP

然后,再次运行my.cnf ...您现在应该拥有正确的套接字并能够运行MySQL客户端。


7
投票

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

/opt/lampp/etc/my.cnf

它对我有用。


180
投票

试试这个:

mysql -h 127.0.0.1 -P 3306 -u root -p <database>

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

telnet 127.0.0.1 3306 

可能它只是在my.cnf文件中的错误配置,在/etc/somewhere(取决于Linux distribution)。


7
投票

我也面临同样的问题,如果你的/etc/my.cnf没有默认运行会发生它会在一段时间后再次停止所以你再次运行(mysql -u root)命令你可以改变,如果知道。

对于该使用命令

sudo service mysql restart 

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

$ sudo service mysql start

现在你有了数据库


6
投票

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


6
投票

在我的情况下,默认端口3306正被其他一些进程使用,因此它没有启动。在我停止了其他服务并做了$ sudo service mysql start 之后,它运行良好。顺便说一句,你可以使用类似sudo的东西来查看谁可能正在使用该端口。


6
投票

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

我可以使用连接到MySQL

$ sudo mysql -u root -p          (put user password if required )

但它不适用于sudo service mysql start

我在my.cnf中没有找到任何sudo lsof -Pn -iTCP:3306。所以我在root-debian#mysql -h 127.0.0.1 -u root -p 中对参数mysql -u root -p进行了评论,这导致了登录问题。

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

bind-address

6
投票

我找到了解决方案

在发射命令之前:socket=/var/lib/mysql/mysqld.sock

  • 第1步:my.cnf
  • 第2步: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)
  • 第3步:mysql_secure_installation

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


6
投票

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

sudo systemctl stop mariadb

sudo systemctl start mariadb

而已。


5
投票

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


5
投票

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

mysql_secure_installation

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

所以这有帮助

/etc/init.d/mysql stop

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

/etc/init.d/mysql start

然后更新root密码:

sudo service mysql stop
ps -ef | grep mysql

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

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 &

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


5
投票

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

UPDATE user SET authentication_string=password('YOURPASSWORDHERE') WHERE user='root';
FLUSH PRIVILEGES;

以root用户身份


4
投票

我有同样的问题。经过多次搜索,我没有找到任何答案。

最后,我检查了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"; 目录,它的权限是755.我将其权限更改为777,mysqld启动没有任何问题。


111
投票

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


重置密码

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

  1. 停止mysql sudo /etc/init.d/mysql stop 或者对于其他分发版本: sudo /etc/init.d/mysqld stop
  2. 以安全模式启动MySQL sudo mysqld_safe --skip-grant-tables &
  3. 使用root登录MySQL mysql -uroot
  4. 选择要使用的MySQL数据库 use mysql;
  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';
  6. 冲洗特权 qazxsw poi
  7. 重启服务器 flush priveleges;
  8. 停止并再次启动服务器 Ubuntu和Debian: quit 在CentOS,Fedora和RHEL上: sudo /etc/init.d/mysql stop ... sudo /etc/init.d/mysql start
  9. 使用新密码登录 sudo /etc/init.d/mysqld stop ... sudo /etc/init.d/mysqld start
  10. 输入新密码,再次享受您的服务器,就像什么都没发生一样

这是从mysql -u root -p


4
投票

打开终端并输入:

mysql -u super

MySQL数据库核心客户端和MySQL服务器包都将是相同的版本5.5。 MySQL Client 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软件包。重要的是客户端和服务器版本号在任何一种情况下都匹配。

这对我有用。


63
投票

我尝试了以下步骤:

  1. 以qazxsw poi身份登录或使用qazxsw poi
  2. 使用Reset a MySQL root password打开super user
  3. 找到sudo,并将其值更改为数据库服务器主机的IP地址。对我来说,它是/etc/mysql/my.cnfgedit
  4. 保存并关闭文件。
  5. 回到终端并执行bind-address

它对我有用。


37
投票

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

localhost

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

127.0.0.1

30
投票

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

sudo service mysql start

如果我禁用apparmor:

mysql.server start

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

brew services start mysql

27
投票

我通过杀死sudo service mysql start start: Job failed to start 进程解决了这个问题:

sudo aa-complain /etc/apparmor.d/*

然后我再次启动服务器:

/run/mysqld/mysqld.pid rw,
/run/mysqld/mysqld.sock rw,

mysql的作用也是如此:

ps -ef | grep mysql
kill [the id]

然后我登录为sudo /etc/init.d/mysql restart ,我完成了。


27
投票

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

尝试重启mysql服务。

service mysql restart

要么

服务mysql停止

服务mysql启动

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

检查磁盘空间

df -h


19
投票

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

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

如果MySQL确实正在运行并在本地运行,请检查您的sudo /etc/init.d/mysql start 文件。应该有像这样的一条线

admin

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

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

© www.soinside.com 2019 - 2024. All rights reserved.