ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

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

可能重新安装它更容易:stackoverflow.com/a/31984482/763744
通过停止 MySQL 并以安全模式启动它来跳过 --grant 表来重置密码
在您的终端中输入“sudo apt-get install mysql-server”
启动或重启mysql服务并检查。 sudo /etc/init.d/mysql start 或 sudo /etc/init.d/mysql restart
systemctl 启动 mariadb.service

T
Tobias Feil

我曾经遇到过这个问题并通过安装 mysql-server 解决了它,因此请确保您已安装 mysql-server,而不是 mysql-client 或其他东西。

该错误意味着文件 /var/run/mysqld/mysqld.sock 不存在,如果您没有安装 mysql-server,则该文件将不存在。所以在这种情况下,安装它

sudo apt-get install 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,那么问题就解决了。


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

尝试这个:

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

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

telnet 127.0.0.1 3306 

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


我遇到了同样的错误。我已经检查过了,main 和 my.cnf 中的默认绑定已经设置为 127.0.0.1。但是,使用上面的命令允许我连接。将不得不继续寻找,看看为什么只做“mysql”会给出错误。
我得到 telnet:无法连接到远程主机:由于 telnet 命令,连接被拒绝。但是 apache 仍然运行,因为我能够打开 localhost
@cchiera你知道,我以前没有这个错误。但是当我想使用 ssh 隧道通过 iOS 应用程序连接到我的数据库时,我收到了这个 2013 错误。为了解决这个问题,我必须编辑 /etc/my.cnf 并评论 #bind-address = 127.0.0.1 Reference 1 Reference 2。然后我可以连接。在此之后,我意识到我现在遇到了这个 2002 年的错误,它把我带到了这个答案,现在它又可以工作了。当然,我同意你的解释,解释为什么只输入 mysql 而没有 -h 会引发错误。
注意:mysql -h localhost 不起作用。确保使用答案中指定的 mysql -h 127.0.0.1
如果我使用此答案中的命令登录,我该如何解决?
B
Billal Begueradj

我看到了所有这些答案,但没有一个提供重置密码的选项,也没有接受的答案。实际的问题是他忘记了密码,所以他需要重置,而不是查看它是否正在运行(安装与否),因为这些答案中的大多数暗示。

重置密码

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

停止 mysql sudo /etc/init.d/mysql stop 或者对于其他发行版本: sudo /etc/init.d/mysqld stop 以安全模式启动 MySQL sudo mysqld_safe --skip-grant-tables & 使用 root mysql 登录 MySQL - u root 选择要使用的mysql数据库使用mysql;重置密码 -- MySQL version < 5.7 update user set password=PASSWORD("mynewpassword") where User='root'; -- MySQL 5.7,mysql.user 表“password”字段->“authentication_string”更新用户集 authentication_string=password('mynewpassword') where user='root';刷新权限 刷新权限;重启服务器 quit 停止并再次启动服务器 Ubuntu 和 Debian: sudo /etc/init.d/mysql stop ... sudo /etc/init.d/mysql start

在 CentOS、Fedora 和 RHEL 上:

    sudo /etc/init.d/mysqld stop
    ...
    sudo /etc/init.d/mysqld start

使用新密码登录 mysql -u root -p 输入新密码并再次享受您的服务器,就像什么都没发生一样

这取自 Reset a MySQL root password


更新用户密码对我不起作用,但是一旦登录 MySQL 监视器并使用了 mysql 数据库,repair table user use_frm 就为我解决了这个问题。 - stackoverflow.com/questions/4297592/…
在 MySQL 5.7 中,mysql.user 表字段中的密码字段已被删除,现在字段名称为 'authentication_string',因此 (5) 应为 update user set authentication_string=password('mynewpassword') where user='root';
这对我很有用,但我首先必须实施这个解决方案:stackoverflow.com/questions/42153059/…
对于 MySQL 8,在步骤 5 中使用以下内容: UPDATE mysql.user SET authentication_string=null WHERE User='root';
@JoeKreydt,在 v.8 中,也可以使用 v.5.7+ 的原始示例,但是在不带 passowrd() 参数的情况下提供新密码值的小修改。
P
Peter Mortensen

我尝试了以下步骤:

以超级用户身份登录或使用 sudo 打开 /etc/mysql/my.cnf 使用 gedit 找到 bind-address,并将其值更改为数据库服务器主机的 IP 地址。对我来说,它是 localhost 或 127.0.0.1 保存并关闭文件。回到终端执行 sudo service mysql start

它对我有用。


从此,我只运行了 sudo service mysql restart 并且它起作用了。
在我的情况下,错误是 IP 更改了,所以我设置了 bind-address=localhost
@rshahriar 在我的 /etc/my.cnf 中没有任何称为绑定地址的内容,添加该字段是个好主意吗
@SilvioDelgado 如果您想通过 ssh 隧道连接,则不会。 Explanation here
重新启动mysql服务也对我有用,但仍然不确定在哪里可以找到错误日志以找出原因并尝试防止它再次发生......
B
Betty

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

尝试重启mysql服务。

> service mysql restart

或者

> service mysql stop

> service mysql start

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

检查磁盘空间

> df -h

同样的事情也发生在我身上——全盘。清理了一些空间,重新启动,问题就消失了。
如果这是您执行的问题:“/etc/init.d/mysqld start”会告诉您您的磁盘分区已满
对我来说也一样,磁盘 100%。清理空间并启动服务正常
N
Nav

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

mysql.server start

如果您在 Mac 上并使用 brew 安装 mysql,只需使用:

brew services start mysql

b
bstpierre

我有一个类似的问题。 mysql 无法启动:

sudo service mysql start
start: Job failed to start

如果我禁用 apparmor:

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

问题消失了。问题是 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,

我不知道我必须调用“sudo service mysql start”。上次我在 Ubuntu 上安装 MySQL 时,我认为它在安装时会自动启动。 Manjaro 上的 MariaDB 要求在安装后显式启动该服务。
P
Peter Mortensen

我通过终止 mysql 进程解决了这个问题:

ps -ef | grep mysql
kill [the id]

然后我再次启动服务器:

sudo /etc/init.d/mysql restart

start 也可以:

sudo /etc/init.d/mysql start

然后我以 admin 的身份登录,我就完成了。


好吧,我实际上是在 mysql 崩溃之前中止它。然后我得到“ * 请看一下系统日志。”和“ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)”。最后,我意识到它正在尝试自我恢复,所以我杀死并重新启动它。
有(罕见的)“mysql start”会失败的情况,所以你需要使用“restart”参数。如果您需要终止守护进程,最好使用“stop”参数而不是 kill 命令。但是,killall 命令比 kill 命令(killall mysqld)更方便。
杀死 MySQL 进程然后重新启动 MySQL 对我有用,很好
P
Peter Mortensen

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

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

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

socket = /var/run/mysqld/mysqld.sock

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

根据经验,我会说最有可能的情况是您的 MySQL 服务器根本没有运行,或者没有在与您从终端运行 MySQL 客户端的主机上运行。


P
Peter Mortensen

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

这是我为解决我的问题所做的:

检查文件 /var/run/mysqld/mysqld.sock 是否存在。如果没有,请通过输入 touch /var/run/mysqld/mysqld.sock 手动创建它(这是我必须做的)。所以 MySQL 进程可以使用这个文件。通过输入 chown mysql /var/run/mysqld/mysqld.sock 更改所述文件的所有权。完成“2”后,通过输入 service mysql restart 或 /etc/init.d/mysql restart 重新启动 MySQL 服务。

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


我注意到该文件不存在,只是重新启动了 mysql 服务器。它自动创建了文件并启动得很好。感谢您的领导。
k
kjones

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

否则尝试使用以下命令:

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

-h 代表主机 127.0.0.1,即 localhost

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


k
kevlarjacket

您的 mysql-server 可能没有运行。通过在终端中键入 mysql.server start 确保它运行。


P
Peter Mortensen

我想每当你得到错误

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

我建议首先检查您的 mysql 守护程序是否正在运行...大多数情况下它不会默认运行。您可以通过/etc/init.d/mysqld status查看。

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

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

我敢打赌它会 110% 工作。


如果您使用 WSL,sudo /etc/init.d/mysql start 也是正确的解决方案,因为不支持 upstart 服务:github.com/Microsoft/WSL/issues/745
相同的想法,但替代语法:service mysqld start
P
Peter Mortensen

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

sudo yum install mysql-server
sudo service mysqld restart

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

 mysql -u root -p

检查是否有效。


无法重新启动 mysqld.service:未找到单元 mysqld.service。在 Ubuntu 16.04 中
m
mpinvidio

而不是使用本地主机:

mysql -u myuser -pmypassword -h localhost mydatabase

使用 127.0.0.1

mysql -u myuser -pmypassword -h 127.0.0.1 mydatabase

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

享受 :)


为了安全起见,您也可以不使用命令行包含您的密码: mysql -u myuser -p -h 127.0.0.1 mydatabase MySQL 会询问您的密码而不是回显它。
这为我解决了。但是,我仍然想知道为什么 127.0.0.1 有效而 localhost 无效?!
U
User

这对我有用:

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

这将创建一个链接。


对我不起作用:(这会在两个文件夹 askubuntu.com/a/56340/242873 之间创建一个符号链接
P
Peter Mortensen

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

apt-get remove --purge mysql\*

然后再次安装:

apt-get install mysql-server mysql-client

这对我有用,并且保留了数据。

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

apt-get install php5-fpm php5-mysql

我认为这是致命的武器。我尝试了一切,但只有你的建议对我有帮助。谢谢 !
S
Siva

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

对于那个使用命令

$ sudo service mysql start   

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

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

现在你有了你的数据库


P
Peter Mortensen

我也遇到了这个问题,但我只是这样做了:

sudo service mysql restart 

它对我有用。


P
PrakharUniyal

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

sudo service mysql start

s
sagar mahajan

我找到了解决方案

在触发之前命令:mysql_secure_installation

第 1 步:sudo systemctl stop mariadb

第 2 步:sudo systemctl start mariadb

第 3 步:mysql_secure_installation

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


L
Leandro Souza

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


P
Peter Mortensen

如果您在 Linux 机器上安装了 XAMPP,请尝试将 my.cnf 文件从 /opt/lampp/etc/my.cnf 复制到 /etc/my.cnf

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


B
Bhaskar

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


P
Peter Mortensen

就我而言,它通过一些研发工作:

我可以使用连接到 MySQL

root-debian#mysql -h 127.0.0.1 -u root -p

但它不适用于 mysql -u root -p

我在 my.cnf 中没有找到任何 bind-address。因此,我对 my.cnf 中的参数 socket=/var/lib/mysql/mysqld.sock 进行了注释,这导致我出现登录问题。

重启服务后一切正常:

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)

B
Buksy

就我而言,当我运行时,似乎我真的无法杀死 mysql 进程

sudo service mysql stop
ps -ef | grep mysql

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 &

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

mysql -u root

然后更新root密码:

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

PS:我在更新 root 密码时遇到了问题,似乎是“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";

这将创建没有密码的用户“super”,然后您可以连接 mysql -u super


感谢您的回答,我能够登录到 mysql,但我的数据库中没有用户表。
此解决方案有效。但是在执行sql语句修改root密码之前,需要先选择一个数据库。执行以下语句<br> use mysql; <br>你现在可以使用 <br> UPDATE user SET authentication_string=password('YOURPASSWORDHERE') WHERE user='root'; FLUSH PRIVILEGES;
T
Thomas Ducrot

在 Debian 服务器 Jessie 上,我的工作解决方案是简单地做

service mysql restart
service mysql reload

作为根用户


J
Jazuly

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

/etc/init.d/mysql stop

/etc/init.d/mysql start

而已。


5
5 revs, 2 users 94%

拳头,尝试重新启动它

服务 mysql 停止

服务 mysql 启动

如果上面没有解决问题,现在让我们去......

完全卸载 MySQL

sudo apt-get remove --purge mysql\*

重新安装它

sudo apt install mysql-server mysql-client

测试它是否运行

sudo mysql

安装php驱动

sudo apt install php7.4 php7.4-fpm php7.4-mysql php7.4-cgi php7.4-cli php7.4-common

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

❗️小心,如果不保存数据,您将丢失数据。如果可能,请备份您的数据。


小心数据丢失
这不起作用。你甚至会丢失数据
此解决方案看起来像是 Windows 问题修复,而不是 Linux。
没错,除了此时它在 Ubuntu 16 和 18 上对我来说非常完美。我还没有在更高版本上测试过它。
P
Peter Mortensen

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