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-server
和mysql-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 mysql
或ps aux | grep mysql | grep -v grep
查找mysql的进程ID
假设进程 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进程正在运行
@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.service
和sudo 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