ChatGPT解决这个技术问题 Extra ChatGPT

error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)' -- Missing /var/run/mysqld/mysqld.sock

我的问题开始于我无法在我的 mysql 安装上以 root 身份登录。我试图在没有打开密码的情况下运行 mysql ......但是每当我运行命令时

# mysqld_safe --skip-grant-tables &

我永远不会得到提示。我试图关注 these instructions to recover the password

屏幕看起来像这样:

root@jj-SFF-PC:/usr/bin# mysqld_safe --skip-grant-tables
120816 11:40:53 mysqld_safe Logging to syslog.
120816 11:40:53 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

而且我没有得到提示开始输入 SQL 命令来重置密码。

当我按 CTRL + C 杀死它时,我收到以下消息:

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

Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!

如果我重试该命令并将其保留足够长的时间,我会收到以下一系列消息:

root@jj-SFF-PC:/run/mysqld# 120816 13:15:02 mysqld_safe Logging to syslog.
120816 13:15:02 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120816 13:16:42 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

[1]+  Done                    mysqld_safe --skip-grant-tables
root@jj-SFF-PC:/run/mysqld#

但是,如果我尝试通过执行以下操作以 root 身份登录:

# mysql -u root

我收到以下错误消息:

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

我检查了 /var/run/mysqld/mysqld.sock 文件不存在。文件夹有,但文件没有。

另外,我不知道这是否有帮助,但我运行 find / -name mysqld 并提出:

/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder

我是 Linux 和 MySQL 的新手,所以我不知道这是否正常。但我将这些信息包括在内,以防万一。

我终于决定卸载并重新安装mysql。

apt-get remove mysql-server
apt-get remove mysql-client
apt-get remove mysql-common
apt-get remove phpmyadmin

以与上述相同的顺序再次重新安装所有软件包后,在 phpmyadmin 安装期间,我收到了相同的错误:

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

所以我再次尝试卸载/重新安装。这一次,在我卸载了这些包之后,我还手动将所有 mysql 文件和目录在各自的位置重命名为 mysql.bad

/var/lib/mysql 
/var/lib/mysql/mysql
/var/log/mysql
/usr/lib/perl5/DBD/mysql
/usr/lib/perl5/auto/DBD/mysql
/usr/lib/mysql
/usr/bin/mysql
/usr/share/mysql
/usr/share/dbconfig-common/internal/mysql
/etc/init.d/mysql
/etc/apparmor.d/abstractions/mysql
/etc/mysql

然后我尝试重新安装 mysql-servermysql-client。但我注意到它不会提示我输入密码。不是应该要求管理员密码吗?

只需重新启动服务器即可解决,然后重新启动mysql服务
@Anto 这不是重复的。这个缺少/var/run/mysqld/mysqld.sock。您链接的问题有该文件。
这里或我能找到的任何其他地方的答案都没有解决我的问题。因为这是一个新项目,所以我切换到 PostgreSQL 并且它可以正常工作! :-)

J
Joe Cheng

试试这个命令,

sudo service mysql start

+1 my.cnf 指向正确的目录,被mysql服务死了
我尝试了接受的答案,但找不到 mysql.sock,这对我有用。谢谢
我不得不使用 sudo service mysqld start
sudo apt-get install mysql-server 如果您还没有安装它:)
如果你遇到这个问题,无论如何,在测试其他东西之前先运行这个简单的命令,它只需要一秒钟,如果服务器根本没有运行,并且在你启动它之后很好,那只是意味着它没有'不是自动启动,这将是要解决的实际问题。
R
Ray

要查找系统上的所有套接字文件,请运行:

sudo find / -type s

我的 Mysql 服务器系统在 /var/lib/mysql/mysql.sock 处打开了套接字

找到打开套接字的位置后,添加或编辑 /etc/my.cnf 文件中包含套接字文件路径的行:

socket=/var/lib/mysql/mysql.sock

有时,启动命令行可执行文件的系统启动脚本会指定一个标志 --socket=path。此标志可能会覆盖 my.cnf 位置,这将导致在 my.cnf 文件指示的位置找不到套接字。然后,当您尝试运行 mysql 命令行客户端时,它会读取 my.cnf 以查找套接字,但它不会找到它,因为它偏离了服务器创建的位置。因此,除非您关心套接字所在的位置,否则只需将 my.cnf 更改为匹配即可。

然后,停止 mysqld 进程。您如何执行此操作将因系统而异。

如果您是 linux 系统的超级用户,如果您不知道 Mysql 设置使用的具体方法,请尝试以下方法之一:

服务 mysqld 停止

/etc/init.d/mysqld 停止

mysqladmin -u root -p 关闭

某些系统没有设置为具有停止 mysql 的优雅方式(或由于某种原因 mysql 没有响应),您可以使用以下任一方法强制终止 mysql:一步:pkill -9 mysqld 两步(最不推荐):找到mysql 的进程 id 与 pgrep mysql 或 ps aux | grep mysql | grep -v grep 假设进程 id 为 4969 以 kill -9 4969 终止

一步:pkill -9 mysqld

两步(最不推荐):使用 pgrep mysql 或 ps aux | 查找 mysql 的进程 ID grep mysql | grep -v grep 假设进程 id 为 4969 以 kill -9 4969 终止

使用 pgrep mysql 或 ps aux | 查找 mysql 的进程 ID grep mysql | grep -v grep

假设进程 id 为 4969 以 kill -9 4969 终止

完成此操作后,您可能希望在 /var/run/mysqld/ 中查找 pid 文件并将其删除

确保您的套接字上的权限使得任何运行 mysqld 的用户都可以读取/写入它。一个简单的测试是打开它以完全读/写,看看它是否仍然有效:

chmod 777 /var/run/mysqld/mysqld.sock

如果这样可以解决问题,您可以根据您的安全设置按需定制套接字的权限和所有权。

此外,运行 mysqld 进程的用户必须可以访问套接字所在的目录。


请不要推荐使用 kill -9;有几种方法可以尝试,然后才不得不这样做。
@dot 在文件根 'find 中运行它。 -name mysqld.sock'。我在 /var/run 以外的其他地方看到过套接字文件。找到它后,您可能需要编辑 my.cnf 文件以指向找到它的位置。
@ray,我尝试以不同的方式运行原始命令(我在另一个站点上找到了特定于 ubuntu 的帖子..)。这是我运行的命令:“sudo service mysql stop”和“sudo mysqld --skip-grant-tables”。执行第二个命令后,出现以下错误:“InnoDB:无法锁定 ./ibdata1,错误:11”。我找不到这个 ./ibdata1 文件... InnoDB:检查您是否还没有另一个 mysqld 进程
@dot run ps -aux | grep mysqld 并查看是否有其他 mysql 进程正在运行
@射线。我把我的头发扯掉了,伙计。我决定把 mysql 吹走并重试......注意我更新的帖子。
a
arghtype

由于多次安装mysql而发生此错误。运行命令:

ps -A|grep mysql

使用以下命令终止进程:

sudo pkill mysql

然后运行命令:

ps -A|grep mysqld

还可以通过运行终止此进程:

sudo pkill mysqld

现在您已完全设置,只需运行以下命令:

service mysql restart
mysql -u root -p

再次拥有运行良好的 mysql


嘿伙计们,我在网上到处跑,试图解决这个问题。我的问题是我试图设置 docker。我希望它使用 mysql 以前在 docker 之外使用的 mysql 数据目录……那个 ps 命令是最好的!
在整个网络上运行了近 4 个多小时后,这终于奏效了。应该是最佳答案:+1:
mysql.service 的作业失败,因为控制进程以错误代码退出。有关详细信息,请参阅“systemctl status mysql.service”和“journalctl -xe”。
mysql.service 的作业失败,因为控制进程以错误代码退出。有关详细信息,请参阅“systemctl status mysql.service”和“journalctl -xe”。
Tnx,你节省了我的时间。
I
Ioan Stef

解决方案要容易得多。

首先,您必须找到 mysql.sock 文件所在的位置(在终端中使用“sudo find / -type s”)。在我的情况下,它位于 /opt/lampp/var/mysql/mysql.sock 启动终端并发出 sudo Nautilus 这将以超级用户权限启动文件管理器 从 Nautilus 导航到 mysql.sock 文件所在的位置 右键单击文件并选择制作链接 将链接文件重命名为 mysqld.sock 然后右键单击该文件并将其剪切 转到 /var/run 并创建一个名为 mysqld 的文件夹并输入它 现在右键单击并粘贴链接文件瞧!您现在将在 /var/run/mysqld/mysqld.sock 有一个 mysqld.sock 文件 :)


你如何找到你的 mysql.sock 文件?我试过 find / -name 'mysql.sock' 但它什么也没返回。
@MatthewLock 首先,确保 mysql 正在运行(通过“ps aux | grep mysql”),否则,不会出现 mysql.sock。其次,使用“sudo find / -type s”,它为您提供系统上的所有套接字来定位 mysql.sock
报告:这对我有用(尽管使用不同的目录,因为我使用的是不同的发行版):这就是我所做的:1-检查mysql尝试访问套接字文件的位置(通过读取日志文件)。对我来说,它是 /usr/var/mysqld/mysqld.sock 2- 确保 mysqld 正在运行(通过运行 /where/your/mysql/is/mssqld_safe) 3- 搜索 mysql 套接字现在所在的位置(通过 sudo find / -type s 让我们说它在 /tmp/mysql.sock 上) 4- 制作从 where-it-is 到 where-it's-to-be 的软链接(通过 sudo ln -s /usr/var/mysql/mysql.sock /tmp/mysql.sock
如果 sudo find / -type s 的输出不包含任何 mysql.sock 怎么办?
如果通过“find / -type s”很难找到 mysql.sock 的位置 - 尝试使用“mysql_config --socket”命令。您可以使用 sudo apt-get install libmysqlclient-dev 安装它
P
Pratik Patil

安装后只需要启动 MySQL 服务:

对于 Ubuntu:

sudo service mysql start;

对于 CentOS 或 RHEL:

sudo service mysqld start;

首先通过此 sudo systemctl status mysql.servicesudo systemctl start mysql.service 检查。这对我有用
m
motorbaby

在带有 MySQL 5.6 和 5.7 的 Ubuntu 上存在一个错误,其中 var/run/mysqld/ 会在 MySQL 服务停止或重新启动时消失。这完全阻止了 MySQL 的运行。找到了这个不完美的解决方法,但至少在停止/重启后它可以运行:

mkdir /var/run/mysqld/
chown mysqld /var/run/mysqld/

谢谢 - 为我修复了它,我必须在每次重新启动服务 mysql 时重新制作目录并重置所有权 - 无法在任何地方找到正式报告的错误,否则我会在这里发布链接:)
没试过,但也许它会帮助你: 创建一个新文件 /etc/tmpfiles.d/mysql.conf: # systemd tmpfile settings for mysql # See tmpfiles.d(5) for details 然后, d /var/run/mysqld 0755 mysql mysql - 重启后,mysql应该正常启动。这是来自 bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1435823,评论 3。如果您在使用 MySQL 5.7 时遇到此问题,请在 Launchpad 上发表评论。解决问题的用户越多,它就会得到越多的关注。
为我工作......虽然必须使用 mysql 作为用户名而不是 mysqld
根据 motorbaby 的评论在 /etc/tmpfiles.d/mysql.conf 中添加行为我解决了这个问题。在 Centos 7 操作系统上并使用 mysql Ver 15.1 Distrib 10.3.11-MariaDB,
这为我解决了这个问题。
S
Sumner Evans

好的,只需复制并粘贴这些代码:这应该在终端中完成,在服务器内部,当您的 mysql 数据库未正确安装时,并且当您收到此错误时:'无法通过套接字连接到本地 MySQL 服务器'/ var/run/mysqld/mysqld.sock'(2)'。

停止 MySql

sudo /etc/init.d/mysqld stop

重新启动它或启动它

sudo /etc/init.d/mysqld restart or sudo /etc/init.d/mysqld start

制作这样的链接并提供给系统

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

运行安全安装,指导您配置 mysql 所需的所有过程

/usr/bin/mysql_secure_installation

当我尝试运行上述命令时,我得到相同的 Can't connect 错误。
只是我发现的东西,对于那些运行 ubuntu 的人。如果您使用 /etc/init.d/mysqld start 启动 mysqld,无论如何您都会遇到这个问题。改用 service mysql start 就可以了。气死人了,不过最后还是想通了。
T
Taimoor Changaiz

我遇到了同样的错误,发现这是由于升级包引起的,所以在重新启动我的系统后我解决了错误。

我认为由于 sql 库/包更新发生了错误,所以如果你正在做一些升级,试试这个:)


我在重新安装(或升级)后做了这个,现在它可以工作了。没有更多的套接字消息。谢谢!
S
Sadee

确保您无法访问的套接字文件路径与“/var/run/mysqld/mysqld.sock”相同,否则将路径更改为您的路径。停止 mysqld

$ sudo /etc/init.d/mysqld stop

如果进程仍在运行;

$ sudo pkill -9 mysqld

删除要创建套接字的 mysql 目录。对我来说它不允许删除,所以我不得不强行删除。

$ sudo mkdir -p /var/run/mysqld

将所有权设置为目录

$ sudo chown mysql:mysql /var/run/mysqld

启动mysql

$ sudo /etc/init.d/mysql start

尝试连接mysql

$ sudo mysql -u dbuser -p

是的,这与我在 2019 年 2 月 14 日 11:56 给出的答案相同(见下文)
你是救生员。
L
Leopathu

这个问题有很多原因,但有时只需重新启动 mysql 服务器,它就会解决问题。

sudo service mysql restart

M
Mohammad Faisal

用户加载步骤的答案对我有用。有时需要编辑 /etc/mysql/my.cnf 中的文件向客户端添加行

[client]
password = your_mysql_root_password
port  = 3306
host  = 127.0.0.1
socket  = /var/lib/mysql/mysql.sock

这给了我:mysql: unknown variable 'Host=127.0.0.1'
@Splaktar:有一个错字。 Host 需要小写 host 才能工作。此外,这个解决方案对我有用。
太棒了-这对我和我的 docker 环境都有效-我只需要调整 ip,在我的情况下是 docker mysql 容器 ip 172.17.xx
佚名

在 ubuntu 上使用 XAMPP:

在 /var/run 目录中创建一个名为 mysqld 的文件夹。您可以使用命令 sudo mkdir /var/run/mysqld 来完成此操作。创建一个指向 mysql.sock 文件的符号链接,该文件由 XAMPP 服务器在启动时创建。您可以使用命令 sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock。

注意: mysql.sock 文件在服务器启动时创建,在服务器停止时删除,因此有时您创建的链接可能看起来已损坏,但只要您使用 sudo /opt 启动服务器,它就应该可以工作/lampp/lampp start 或任何其他方式。

如果服务器尚未运行,请启动它并再次尝试执行您的程序。

祝你好运!我希望你这次能侥幸逃脱。


@MohsinKhan 转到 localhost/phpmyadmin 并从那里导入数据库
M
Muhammad Faizan Fareed

为什么会出现此错误

我收到了 mysql 库的新更新,所以在收到这些错误之后我更新了我的 Kubuntu 操作系统。

我尝试过的命令以及我如何修复它。

MySql-server 运行正常,但是当我尝试连接它时

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'.

我检查了 /var/run/mysqld/mysqld.sock'. 这个目录。我的文件不存在。

我也尝试了这些命令来连接,但对我没有用。

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

 sudo service mysql start

浪费了大约 2 个小时后,我找到了解决方案

sudo apt-get clean
sudo apt-get update
sudo apt-get upgrade -f

在那之后,一切都为我解决了。


这帮助我解决了这个问题。我不明白它与我遇到的袜子问题有什么关系......
B
Buddheshwar Ojhar

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

解决方案

最后卸载并重新安装mysql。 **

sudo apt-get 删除 mysql-server

sudo apt-get 删除 mysql-client

sudo apt-get 删除 mysql-common

sudo apt-get 删除 phpmyadmin

然后再次安装

sudo apt-get install mysql-server-5.6

此操作后,将使用 164 MB 的额外磁盘空间。

你想继续吗? [Y/n] Y 按 YES 完成安装

………………

最后你会得到这些行.... 设置 libhtml-template-perl (2.95-1) ... 设置 mysql-common-5.6 (5.6.16-1~exp1) ... 处理 libc- 的触发器bin (2.19-0ubuntu6) 处理 ureadahead (0.100.0-16) 的触发器 ...

然后 root@ubuntu1404:~# mysql -u root -p (对于你应该首先使用的每个密码)

输入密码:

注意:输入的密码应该和mysql的安装时密码相同(如.root、system、admin、rahul等...)然后输入

使用 rahul_db(数据库名称);

谢谢。**


请提高回答质量
由于安装了多个 mysql 版本,这对我有用。同时删除 mysql-server-5.6/5.5, mysql-client-5.6/5.5。谢谢!
得到 E: Package 'mysql-server-5.6' has no installation candidate,它在 Ubuntu 18.04 中不存在
S
Suraj Rao

我认为您的 MySQL 服务器尚未启动。因此,使用以下命令之一启动服务器。

#services mysql start

或者

#/etc/init.d/mysql start

B
Bilal

临时解决方案

也许有人面临这个问题。我在 Ubuntu 14 上使用 Mysql Workbench 并收到此错误。

mysqldump: Got error: 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) when trying to connect

通过运行 sudo find / -type s 找到您的套接字文件,在我的例子中是 /run/mysqld/mysqld.sock

因此,我刚刚在 tmp 目录中创建了指向此文件的链接。

sudo ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock

请注意,这是一个临时解决方案,因为创建的文件将位于 /tmp 下。请参阅其他答案以获得永久解决方案。


如您所见,文件的位置在 /tmp 文件夹下,因此它肯定会被删除。您可以更改 .sock 文件位置。请参阅@user3002884 答案。
我知道,我只是在完成您的回答,所以其他用户之前知道该解决方案只是临时的,因为文件夹
S
S.Spieker

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

/etc/my.cnf 中添加以下行:

[client]
socket=/var/lib/mysql/mysql.sock <= this path should be also same as is[mysqld]

并使用以下命令重新启动服务:service mysql restart

这对我有用


在 Ubuntu 18.04.4 LTS 中,位置应为 /etc/mysql/mysql.cnf
J
Jack BeNimble

这已经被提到了几次,但这对我来说立即起作用:

服务mysql重启


有趣的是,这与仅使用简单的“mysql”命令有何不同
s
spencer

如果您已经在 sudo apt-get install mysql-server 之前安装了 mysql-server,您可以在 /var/run/mysqld 中找到 mysqld.sock


D
Dew

我刚刚在 Ubuntu 14.10 上遇到了这个问题

原来 mysql-server 不再安装(不知何故已被删除),但我不能只安装它,因为存在一些损坏的包和依赖问题/冲突。

最后我不得不重新安装mysql

sudo apt-get remove mysql-client
sudo apt-get install mysql-server

a
amindri

在我的情况下,两个 mysqld 进程正在运行.. 使用 pkill -9 mysqld 杀死了可选进程


我需要添加“sudo”终止进程。
k
knb

如果您的系统上有很多数据库和表,并且您在 my.cnf 中设置了 innodb_file_per_table,那么您的 mysql 服务器可能已经用完了打开的对象/文件(或者更确切地说是这些对象的描述符)新的最大数量

open-files-limit = 2048

并重新启动mysql。当根本没有创建套接字时,这种方法可能会有所帮助,但实际上这可能不是真正的问题,这是一个潜在的问题。


x
xscorp7

我有完全相同的问题。苦苦挣扎了一个小时,终于找到了不用重新安装mysql-common、mysql-client、mysql-server的方法来纠正。

首先,转到“/var/run/mysqld”。你会发现mysql.sock 不存在。只需删除整个 mysqld 目录并重新创建它并为其提供必要的权限。

# rm -rf /var/run/mysqld && mkdir /var/run/mysqld && chown mysql /var/run/mysqld/

现在,完全杀死 mysql 进程。即使在关闭服务后,它也可能会在运行“/etc/init.d/mysql status”命令时显示“等待页面清理器”。

要完全关闭服务,请使用

# pkill -9 mysqld

一旦进程被杀死,请尝试使用再次启动它

# /etc/init.d/mysql start

你会看到它运作良好!而且停止它也没有问题。


o
omfaer

我的解决方案;

Ubuntu 18.04 (WSL)

/etc/mysql/my.cnf

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

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

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

我改变了端口。它对我有用。你可以写另一个端口。示例 3355


A
Ani

我在 Ubuntu 上使用 XAMPP。通过终端连接数据库时发现此错误。我在没有任何配置的情况下解决了它,因为 XAMPP 中的默认套接字文件路径写在“/opt/lampp/etc/my.cnf”中,如下所示:

[client]
#password   = your_password
port        = 3306
socket      = /opt/lampp/var/mysql/mysql.sock

现在您可以通过在终端上使用 mysql 命令提供此套接字路径参数来进行连接,例如:

mysql -u root --socket /opt/lampp/var/mysql/mysql.sock

并且无需任何配置即可完成。

如果您不想每次都输入套接字路径,请通过“/var/run/mysqld/mysqld.sock”更改 my.cnf 中的默认路径。提供权限并重新启动 mysql 服务器。

编辑:最近我安装了 Ubuntu 20.04 并尝试安装 MySQL 服务器,但我的系统崩溃并且根本无法工作。所以我刚刚完全删除了 MySQL 并安装了 MariaDB。它像魅力一样工作,没有任何问题。


D
Du-Lacoste

host 更改为 127.0.0.1 对我有用。

编辑 /etc/mysql/my.cnf 中的文件并将下面提到的行添加到该部分:client

[client]
port  = 3306
host  = 127.0.0.1
socket  = /var/lib/mysql/mysql.sock

在你完成它之后。执行以下命令。

sudo service mysql start

这是我的朋友,帮助了我:)
@NBhargav 我很高兴你能解决你的问题..干杯哥们..😇😇
P
Pranay Aryal
I
Ingo

首先创建目录 /var/run/mysqld

用命令:

mkdir -p /var/run/mysqld

然后将 rigths 添加到目录

chown mysql:mysql /var/run/mysqld

经过这次尝试

mysql -u root

D
Darwin

您必须安装 mysql-server

apt install mysql-server

G
Greg

我还会检查mysql配置。我在自己的服务器上遇到了这个问题,但我有点太仓促并且错误地为我的机器配置了 innodb_buffer_pool_size。

innodb_buffer_pool_size = 4096M

它通常可以运行到 2048 年,但我想我没有足够的内存来支持 4 个演出。

我想这也可能发生在其他 mysql 配置设置中。