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

Posted

技术标签:

【中文标题】error: \'Can\'t connect to local MySQL server through socket \'/var/run/mysqld/mysqld.sock\' (2)\' -- Missing /var/run/mysqld/mysqld.sock【英文标题】:error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)' -- Missing /var/run/mysqld/mysqld.sockerror: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)' -- Missing /var/run/mysqld/mysqld.sock 【发布时间】:2012-08-13 00:16:59 【问题描述】:

我的问题开始于我在安装 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。但我注意到它不会提示我输入密码。不是应该要求管理员密码吗?

【问题讨论】:

我遇到了同样的问题。我刚才解决了。 ***.com/questions/18150858/… Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (38)的可能重复 只需要重启服务器,然后重启mysql服务即可解决 @Anto 这不是重复的。这个缺少/var/run/mysqld/mysqld.sock。你链接的问题有那个文件。 这里或我能找到的其他任何地方的答案都没有解决我的问题。因为这是一个新项目,所以我切换到 PostgreSQL 并且它可以正常工作! :-) 【参考方案1】:

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

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 设置使用的具体方法,请尝试以下方法之一:

service mysqld stop /etc/init.d/mysqld stop mysqladmin -u root -p shutdown 有些系统没有设置为有一种优雅的方式来停止 mysql(或者由于某种原因 mysql 没有响应),您可以使用以下任一方式强制终止 mysql: 一步:pkill -9 mysqld 两步(最不推荐): 用pgrep mysqlps aux | grep mysql | grep -v grep查找mysql的进程ID 假设进程 ID 为 4969kill -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进程正在运行 @ray。我把我的头发扯掉了,伙计。我决定把 mysql 吹走并重试...注意我更新的帖子。【参考方案2】:

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

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

【讨论】:

我在重新安装(或升级)后做了这个,现在它可以工作了。没有更多的套接字消息。谢谢!【参考方案3】:

解决方案更简单。

    首先,您必须找到(在终端中使用“sudo find / -type s”)您的mysql.sock 文件所在的位置。就我而言,它位于/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 安装它【参考方案4】:

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

【讨论】:

【参考方案5】:

好的,只需复制并粘贴这些代码:这应该在终端中完成,在服务器内部,当您的 mysql 数据库未正确安装时,并且当您收到此错误时:'Can't connect to local MySQL server through套接字'/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 就可以了。令人气愤,但我最终想通了。【参考方案6】:

使用 mysql config 找到 my.cnf 文件,我在 /etc/mysql/my.cnf 下 (相应地更改它说套接字的位置)

port            = 3306
socket          = /tmp/mysql.sock

这里是一些特定程序的条目 以下值假设您至少有 32M 内存

这被正式称为 [safe_mysqld]。两个版本目前都已解析。

[mysqld_safe]
socket          = /tmp/mysql.sock
nice            = 0

【讨论】:

【参考方案7】:

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

【讨论】:

我需要添加 'sudo' 杀死进程。【参考方案8】:

用户加载步骤的答案对我有用。 有时需要编辑/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 才会起作用。此外,这个解决方案对我有用。 Brilliant - 这对我和我的 docker 环境都有效 - 我只需要调整 ip,在我的情况下是 docker mysql 容器 ip 172.17.x.x【参考方案9】:

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

有时是由于 mysql 服务器出现故障,在实时服务器中我认为您应该重新启动服务器,并且在 localhost 中您需要重新启动 mysql 服务器。

【讨论】:

【参考方案10】:

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

设置一个新的最大数量
open-files-limit = 2048

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

【讨论】:

【参考方案11】:

试试这个命令,

sudo service mysql start

【讨论】:

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

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

解决方案

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

sudo apt-get remove mysql-server sudo apt-get remove mysql-client sudo apt-get remove mysql-common sudo apt-get remove 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 (对于每个密码首先 u 应该使用)

输入密码:

注意:输入的密码要与安装时间一致 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中不存在【参考方案13】:

由于多次安装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,你节省了我的时间。【参考方案14】:

临时解决方案

也许有人面临这个问题。我在 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 答案。 我知道,我只是在完成你的回答,所以其他用户之前知道解决方案只是临时的,因为文件夹【参考方案15】:

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

sudo service mysql restart

【讨论】:

【参考方案16】:

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 我很高兴你能解决你的问题..干杯哥们..??【参考方案17】:

我在 Ubuntu 的虚拟机上运行我的 MySQL,所以当我重新启动主机和虚拟机时,IP 发生了变化。我已经将mysql配置为在IP 192.168.0.5上运行,现在由于IP的动态分配,我的新IP是192.168.0.8

如果您有同样的问题,只需使用命令ifconfig 检查您的 ip。

使用命令cat /etc/mysql/my.cnf | grep bind-address检查您的 MySQL 绑定

如果两个IP相同,则重新安装你的mysql服务器

如果没有,请使用 nano、vi、vim 或任何您喜欢的方式更改您在 /etc/network/interfaces 中的 IP。

我更喜欢sudo nano /etc/network/interfaces

然后输入以下内容

auto eth0
iface eth0 inet static
address 192.168.0.5
netmask 255.255.255.0

保存接口文件,重启你的接口sudo ifdown eth0 && sudo ifup eth0用你的网络接口替换“eth0”

重启 MySQL sudo service mysql stop 然后sudo service mysql start

如果你和我有同样的问题,你很好!

【讨论】:

【参考方案18】:

这个解决方案可以帮助其他人,有时修复很简单。

在你的live环境中重启mysql服务器和apache

sudo service mysql restart
sudo apache services restart

这是安装插件或执行任何数据库命令时的常见问题。

【讨论】:

【参考方案19】:

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

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

最后我不得不重新安装mysql

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

【讨论】:

【参考方案20】:

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【参考方案21】:

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

innodb_buffer_pool_size = 4096M

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

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

【讨论】:

【参考方案22】:

这已经提到过几次了,但这对我来说立竿见影:

服务mysql重启

【讨论】:

有趣的是,这与仅使用简单的“mysql”命令有何不同【参考方案23】:

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

对于 Ubuntu:

sudo service mysql start;

对于 CentOS 或 RHEL:

sudo service mysqld start;

【讨论】:

首先检查这个sudo systemctl status mysql.servicesudo systemctl start mysql.service。这对我有用【参考方案24】:

在archlinux上我遇到了这个错误,问题是mysqld-service没有运行。

但是,我无法按照 Archlinux 文档中的说明使用 systemctl start mysqld 启用 mysql 服务。我认为错误类似于

找不到mysqld.service

我首先需要重新启动系统。

然后我再次输入命令(并输入systemctl enable mysqld),现在mysql能够找到创建的mysql.sock

【讨论】:

【参考方案25】:

我在 digitalocean 上调整液滴大小时遇到​​了此类问题。我已经升级了 mysql 版本并为我工作。这是我应用的教程 - https://serverpilot.io/community/articles/how-to-upgrade-mysql-5.5-to-5.6-on-ubuntu-14.04.html

【讨论】:

【参考方案26】:

我尝试了几乎所有列出的解决方案,但没有一个对我有用,直到我重新启动机器,然后当我发出命令“service mysql restart”时 mysql 服务器重新启动。

【讨论】:

【参考方案27】:

据我所知,在 lampp 中它不能识别 mysql 命令。 试试

sudo /opt/lampp/bin/mysql

它将打开 mysql 终端,您可以在其中与数据库进行通信..

【讨论】:

【参考方案28】:

在我的情况下,问题是 /etc/mysql/my.cnf 中的绑定地址,然后:

纳米/etc/mysql/my.cnf

搜索绑定地址并删除带有主机 ip 的特定地址(不是 127.0.0.1)

【讨论】:

【参考方案29】:

在带有 MySQL 5.6 和 5.7 的 Ubuntu 上存在一个错误,当 MySQL 服务停止或重新启动时,var/run/mysqld/ 会消失。这完全阻止了 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, 这为我解决了这个问题。【参考方案30】:

我在 CentOS VPS 上遇到过类似的问题。如果 MySQL 在启动后立即无法启动或一直崩溃,请尝试以下步骤:

1) 找到 my.cnf 文件(我的位于 /etc/my.cnf)并添加以下行:

innodb_force_recovery = X

将 X 替换为 1 到 6 之间的数字,从 1 开始,如果 MySQL 无法启动则递增。设置为 4、5 或 6 可能会删除您的数据,因此请注意并在之前阅读 http://dev.mysql.com/doc/refman/5.7/en/forcing-innodb-recovery.html。

2) 重启 MySQL 服务。只有 SELECT 会运行,此时这很正常。

3) 使用 mysqldump 一个一个地转储所有数据库/模式,不要压缩转储,因为无论如何您都必须在以后解压缩它们。

4) 仅移动(或删除!)/var/lib/mysql 中的 bd 目录,将单个文件保留在根目录中。

5) 停止 MySQL,然后取消注释 1) 中添加的行。启动 MySQL。

6) 恢复 3) 中转储的所有 bd。

祝你好运!

【讨论】:

以上是关于error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)' -- Mis的主要内容,如果未能解决你的问题,请参考以下文章

mysql.connector.errors.InterfaceError: 2003: Can't connect to MySQL server on '127.0.0.1:3306' (111

Can't connect to database with error (HY000/2002): No connection could be made because the target ma

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' 。安装后出错

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

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

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