ERROR 2002 (HY000): 无法通过套接字 '/var/run/mysqld/mysqld.sock' 连接到本地 MySQL 服务器 (2)
Posted
技术标签:
【中文标题】ERROR 2002 (HY000): 无法通过套接字 \'/var/run/mysqld/mysqld.sock\' 连接到本地 MySQL 服务器 (2)【英文标题】:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)ERROR 2002 (HY000): 无法通过套接字 '/var/run/mysqld/mysqld.sock' 连接到本地 MySQL 服务器 (2) 【发布时间】:2019-12-17 22:07:49 【问题描述】:我在Ubuntu 12.04 LTS(精确穿山甲)上安装了LAMP,然后在phpMyAdmin上设置了root密码。我忘记了密码,现在无法登录。当我尝试通过终端更改密码时,我得到:
ERROR 2002 (HY000): 无法通过套接字连接到本地 mysql 服务器 '/var/run/mysqld/mysqld.sock' (2)
我该如何解决这个问题?我无法打开、卸载或重新安装 LAMP。
【问题讨论】:
可能重新安装它更容易:***.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 start mariadb.service 【参考方案1】:我曾经遇到过这个问题并通过安装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 etc/mysql/mysql.conf.d/mysqld.cnf
。这是唯一存在/var/run/mysqld/mysqld.sock
的文件【参考方案2】:
试试这个:
mysql -h 127.0.0.1 -P 3306 -u root -p <database>
另外(查看它是否正在运行):
telnet 127.0.0.1 3306
可能只是my.cnf
文件中的错误配置,在/etc/somewhere
中(取决于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
。
如果我使用这个答案中的命令登录,我该如何解决这个问题?【参考方案3】:
我看到了所有这些答案,但没有提供重置密码和不接受答案的选项。实际问题是他忘记了他的密码,所以他需要重置,而不是像大多数答案所暗示的那样查看它是否正在运行(安装与否)。
重置密码
按照以下步骤操作(如果您真的忘记了密码会很有帮助,并且您可以随时尝试,即使您目前不在这种情况下):
停止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 数据库
use mysql;
重设密码
-- 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';
刷新权限
flush privileges;
重启服务器
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
为我解决了这个问题。 - ***.com/questions/4297592/…
在 MySQL 5.7 中,mysql.user 表字段中的密码字段被删除,现在字段名称为 'authentication_string',所以 (5) 应该是update user set authentication_string=password('mynewpassword') where user='root';
这对我很有用,但我首先必须实施这个解决方案:***.com/questions/42153059/…
对于 MySQL 8,在第 5 步中使用以下内容: UPDATE mysql.user SET authentication_string=null WHERE User='root';
@JoeKreydt,在 v.8 中,也可以使用 v.5.7+ 的原始示例,但是在提供新密码值的情况下进行了较小的修改,而没有周围的 passowrd()
参数。
【参考方案4】:
我尝试了以下步骤:
-
以
super user
登录或使用sudo
使用gedit 打开/etc/mysql/my.cnf
找到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服务也对我有用,但仍然不确定在哪里可以找到错误日志以找出原因并尝试防止它再次发生......【参考方案5】:在我的情况下,磁盘已满,mysqld 无法再启动。
尝试重启mysql服务。
> service mysql restart
或
> service mysql stop
> service mysql start
如果它不能识别stop
命令,那么它肯定是磁盘空间。您应该在分配了mysql
的分区中腾出一些空间或使磁盘更大。
检查磁盘空间
> df -h
【讨论】:
同样的事情发生在我身上——满盘。清理了一些空间,重新启动,问题就消失了。 如果这是您执行的问题:“/etc/init.d/mysqld start”会告诉您您的磁盘分区已满 对我来说也一样,磁盘 100%。清理空间并启动服务正常【参考方案6】:我通过执行以下命令解决了这个问题:
mysql.server start
如果你在 Mac 上使用 brew 安装 mysql,只需使用:
brew services start mysql
【讨论】:
【参考方案7】:我遇到了类似的问题。 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 要求在安装后显式启动该服务。【参考方案8】:我通过杀死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 对我有用,很好【参考方案9】:MySQL 服务器进程不知何故没有创建套接字,或者客户端在错误的位置寻找套接字。
我的第一个建议是检查 MySQL 服务器是否正在运行。第二个建议可能是,MySQL 服务器是否在另一台主机上运行?如果是这样,请在终端中将 -h <hostname>
标志添加到您的 MySQL 客户端。
如果 MySQL 确实在运行,并且在本地运行,请检查您的 my.cnf
文件。应该有这样一行
socket = /var/run/mysqld/mysqld.sock
看看这是否与您在帖子中提到的套接字位置相匹配。
根据经验,我认为最可能的情况是您的 MySQL 服务器根本没有运行,或者没有在与您从终端运行 MySQL 客户端的主机上运行。
【讨论】:
【参考方案10】:在我不得不重新启动生产服务器后,我刚刚遇到了同样的问题。我在 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 服务器。它自动创建了文件并启动得很好。感谢您的领导。【参考方案11】:检查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的默认端口
【讨论】:
【参考方案12】:您的 mysql-server 可能没有运行。通过在终端中输入mysql.server start
来确保它运行。
【讨论】:
【参考方案13】:我认为每当你得到错误时
ERROR 2002 (HY000): 无法通过套接字 '/var/lib/mysql/mysql.sock' 连接到本地 MySQL 服务器
我会建议首先检查您的mysql
守护进程是否正在运行...大多数情况下默认情况下它不会运行。您可以通过/etc/init.d/mysqld status
查看。
如果它没有运行,请先启动它:
.../etc/init.d/mysqld start.
我打赌它会 110% 起作用。
【讨论】:
sudo /etc/init.d/mysql start
也是正确的解决方案,如果您使用 WSL,因为不支持新贵服务:github.com/Microsoft/WSL/issues/745
相同的想法,但语法不同:service mysqld start
【参考方案14】:
如果您使用Amazon EC2,并且您在实例上遇到此问题,那么您只需:
sudo yum install mysql-server
sudo service mysqld restart
Amazon EC2 没有安装服务器(仅安装了客户端),因此如果出现这种情况,您需要在您的实例上安装它,然后尝试
mysql -u root -p
检查是否有效。
【讨论】:
重启mysqld.service失败:未找到单元mysqld.service。在 Ubuntu 16.04【参考方案15】:这对我有用:
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysql restart
这会创建一个链接。
【讨论】:
对我不起作用 :( 这会在两个文件夹 askubuntu.com/a/56340/242873 之间创建一个符号链接【参考方案16】:而不是使用本地主机:
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
无效?!【参考方案17】:
我也遇到了这个问题,但我就是这样做的:
sudo service mysql restart
它对我有用。
【讨论】:
【参考方案18】:确保你有重要数据库的备份,然后尝试卸载 MySQL 相关的东西:
apt-get remove --purge mysql\*
然后重新安装:
apt-get install mysql-server mysql-client
这对我有用,并且保留了数据。
如果 PHP MySQL 显示错误,您可能需要重新安装 PHP MySQL:
apt-get install php5-fpm php5-mysql
【讨论】:
我认为这是致命的武器。我尝试了一切,但只有你的建议对我有帮助。谢谢!【参考方案19】:我也面临同样的问题,如果您的 mysql server
默认未运行,它将在几秒钟后再次停止,因此您再次运行 ($ sudo service mysql start
) 命令,如果知道,您可以更改。
对于那个使用命令
$ sudo service mysql start
(如果需要,请输入用户密码,因为我们使用 sudo
)
然后运行
$ sudo mysql -u root -p (put user password if required )
现在你有了你的数据库
【讨论】:
【参考方案20】:您的 MYSQL 似乎已停止。使用以下命令再次启动 MySQL
sudo service mysql start
【讨论】:
【参考方案21】:我找到了解决方案
发射前命令:mysql_secure_installation
sudo systemctl stop mariadb
第二步:sudo systemctl start mariadb
第三步:mysql_secure_installation
然后它会询问 root 密码,您只需 按 Enter 并设置新的 root 密码。
【讨论】:
【参考方案22】:如果您的安装是最近的,您应该确认您的安装是否是安装服务器... mysql-server-5.5.. 也许您只安装了“mysql”.. 这只是客户端而不是服务器。
【讨论】:
【参考方案23】:如果您的 Linux 机器上安装了XAMPP,请尝试将您的my.cnf
文件从/opt/lampp/etc/my.cnf
复制到/etc/my.cnf
。
然后,再次运行mysql -u root
...您现在应该拥有正确的套接字并能够运行 MySQL 客户端。
【讨论】:
【参考方案24】:在我的例子中,默认端口 3306 正被其他进程使用,因此它没有启动。在我停止其他服务并执行sudo service mysql start
之后,它运行良好。顺便说一句,您可以使用 sudo lsof -Pn -iTCP:3306
之类的东西来查看谁可能正在使用该端口。
【讨论】:
【参考方案25】:就我而言,它通过一些研发工作:
我可以使用
连接到 MySQLroot-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)
【讨论】:
【参考方案26】:在我的情况下,当我运行时,我似乎真的无法杀死 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密码之前,需要先选择一个数据库。执行下面的语句use mysql;
你现在可以使用 UPDATE user SET authentication_string=password('YOURPASSWORDHERE') WHERE user='root'; FLUSH PRIVILEGES;
【参考方案27】:
在 Debian 服务器 Jessie 上,我的工作解决方案是简单地做
service mysql restart
service mysql reload
作为根用户
【讨论】:
【参考方案28】:我通过重启mysql解决了这个问题
/etc/init.d/mysql stop
和
/etc/init.d/mysql start
就是这样。
【讨论】:
【参考方案29】:拳头,尝试重新启动它
服务 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.4 替换为 php7.x 或 php8.0.12 或更高版本 很不错!
【讨论】:
小心数据丢失 这不起作用。你甚至会丢失数据【参考方案30】:根据经验,我说您需要先检查服务器是否正在运行,然后再尝试配置 MySQL。最后的解决方案是重新安装 MySQL。
【讨论】:
以上是关于ERROR 2002 (HY000): 无法通过套接字 '/var/run/mysqld/mysqld.sock' 连接到本地 MySQL 服务器 (2)的主要内容,如果未能解决你的问题,请参考以下文章
ERROR 2002 (HY000): 无法通过套接字 '/var/run/mysqld/mysqld.sock' 连接到本地 MySQL 服务器 (2)
ERROR 2002 (HY000): 无法通过套接字 '/var/run/mysqld/mysqld.sock' 连接到本地 MySQL 服务器 (2)
ERROR 2002 (HY000): 无法通过套接字 '/var/run/mysqld/mysqld.sock' 连接到本地 MySQL 服务器 (2)
错误 2002 (HY000): 无法通过套接字 '/tmp/mysql.sock' 连接到本地 MySQL 服务器
错误 2002 (HY000): 无法通过套接字 '/tmp/mysql.sock' 连接到本地 MySQL 服务器
错误 2002 (HY000): 无法通过 '/var/run/mysqld/mysqld.sock' 连接到本地 MySQL 服务器 (2)