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) 【发布时间】:2020-09-15 09:21:22 【问题描述】:我在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 停止
服务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 或更高版本 很不错!
【讨论】:
小心数据丢失 这不起作用。你甚至会丢失数据【参考方案2】:如果您的服务器/数据库工作正常,但突然出现此问题,请尝试重新启动您的数据库服务器。 对于 Centos,我使用以下命令,并且我的问题 'connection denied' 'Cann't connect to local mysql through socket' 已修复
sudo systemctl start mysqld
【讨论】:
【参考方案3】:在我的情况下,我的问题是我试图从我的 linux 终端访问,而不是从带有 mysql 的 docker 容器访问。
【讨论】:
【参考方案4】:我遇到了同样的问题,问题是 mysql-server 已安装但没有运行。
试试看, 服务 mysql 启动 要么 systemctl 启动 mysql
【讨论】:
【参考方案5】:适用于 CentOS Linux 7.3 版
mysql.sock 文件路径为/var/lib/mysql/mysql.sock
编辑/etc/my.cnf
文件并放在下面的条目
这将解决您的问题。
[client]
user=root
password=Passw0rd
port=3306
socket=/var/lib/mysql/mysql.sock
[mysqld]
bind-address=0.0.0.0
之后重启服务
service mysql restart
【讨论】:
这个答案实际上解释了错误的根本原因是什么【参考方案6】:此答案与在具有少量 RAM 的机器上更新到 MySQL 5.6 相关
我在 Debian 8 (Jessie) 上从 MySQL 5.5 升级到 5.6 时遇到了同样的问题。 MySQL 未启动(状态显示为活动/已退出)并且简单地使 service mysql start
不起作用,因为我从 /var/logs/mysql/error.log
日志文件中发现:
InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(136019968 bytes) failed; errno 12
Cannot allocate memory for the buffer pool
内存不够:我只有 256 MB 的 RAM。
在 MySQL 中有一个设置,performance_schema
。默认情况下,它在 MySQL 5.5 中是关闭的。
https://dev.mysql.com/doc/refman/5.5/en/performance-schema-startup-configuration.html
但在 MySQL 5.6 中默认是开启的,只需在 /etc/mysql/my.cnf
文件中添加以下行并重新启动,它就可以工作了。
performance_schema = off
警告:关闭此设置您可能会遇到性能问题,但我想在开发环境中不会有问题。
另外,这里有一篇文章可能有助于配置 MySQL 以使用最少的内存,Configuring MySQL to use minimal memory(网络存档链接,以防原始链接将来过期https://web.archive.org/web/20201112041608/http://www.tocker.ca/2014/03/10/configuring-mysql-to-use-minimal-memory.html)。 p>
【讨论】:
【参考方案7】:我之前在 Kubuntu 20.04 中遇到过这个问题。它对我的解决方法是运行:
sudo dpkg --configure -a
原因是 dpkg 崩溃了。
我之前遇到过这个问题,我通过运行解决了:
sudo /etc/init.d/mysql start
认为服务已停止。
【讨论】:
【参考方案8】:对我来说,在 CentOS 上,我必须像这样重新启动 mariadb
服务:
systemctl start mariadb.service
【讨论】:
【参考方案9】:令人惊讶的是,这个问题的另一个原因是删除了文件夹 /var/log/mariadb 这是我删除此日志文件夹后的情况。创建完成后,错误消失了。
【讨论】:
【参考方案10】:对我来说 mysql 没有运行,所以我修复了它
sudo /etc/init.d/mysql start
【讨论】:
【参考方案11】:就我而言,我无法访问 mysql,经过 3 天的研究,我找到了解决方案。这是完美的解决方案,因为我搜索了/var/run/mysqld/mysqld.sock
,但没有找到该文件夹。您可以在 putty 上运行下面列出的命令。
sudo mkdir /var/run/mysqld/
sudo chown -R mysql:mysql /var/log/mysql
sudo mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --socket=/var/run/mysqld/mysqld.sock
sudo /etc/init.d/mysql restart
您将节省宝贵的时间。
【讨论】:
【参考方案12】:我看到了所有这些答案,但没有提供重置密码和不接受答案的选项。实际问题是他忘记了他的密码,所以他需要重置,而不是像大多数答案所暗示的那样查看它是否正在运行(安装与否)。
重置密码
按照以下步骤操作(如果您真的忘记了密码会很有帮助,并且您可以随时尝试,即使您目前不在这种情况下):
停止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()
参数。
【参考方案13】:
您的 MYSQL 似乎已停止。使用以下命令再次启动 MySQL
sudo service mysql start
【讨论】:
【参考方案14】:在我的情况下,磁盘已满,mysqld 无法再启动。
尝试重启mysql服务。
> service mysql restart
或
> service mysql stop
> service mysql start
如果它不能识别stop
命令,那么它肯定是磁盘空间。您应该在分配了mysql
的分区中腾出一些空间或使磁盘更大。
检查磁盘空间
> df -h
【讨论】:
同样的事情发生在我身上——满盘。清理了一些空间,重新启动,问题就消失了。 如果这是您执行的问题:“/etc/init.d/mysqld start”会告诉您您的磁盘分区已满 对我来说也一样,磁盘 100%。清理空间并启动服务正常【参考方案15】:我曾经遇到过这个问题并通过安装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
的文件【参考方案16】:
就我而言,我缺少 mysql-server。所以通过sudo apt-get install mysql-server
安装后,我可以再次连接。
【讨论】:
【参考方案17】:安装 mysql-server 解决了这个问题
sudo apt-get install mysql-server
【讨论】:
【参考方案18】:当我停止 mysql 服务时,我得到了完全相同的错误,这里如何解决它:通过使用这些命令(重新)启动 mysql:
sudo systemctl start mysql
或
sudo systemctl restart mysql
【讨论】:
sudo systemctl start mysql
在 Lubuntu 20.04 上也为我工作。【参考方案19】:
解决方案 1 清除(如果要保留数据库,则删除)任何 mysql 包以重新安装:
sudo apt purge "mysql*"
-自动删除包
sudo apt autoremove
-停止apparmor服务
sudo systemctl stop apparmor
-让 apparmor 删除它的配置文件(我认为 stop 就足够了,但对我来说不是。使用 systemctl 它不起作用)
sudo service apparmor teardown
-重新安装mysql-server
sudo apt install mysql-server
-安装apparmor-utils,在apparmor中为mysql创建配置文件,允许mysql运行
sudo apt install apparmor-utils
-检查mysql-server的状态(必须是Active(running))
sudo systemctl status mysql
-在apparmor中为mysql生成配置文件
sudo aa-genprof mysql
-在其他终端运行mysql(输入root密码)
mysql -u root -p
-apparmor 在其他终端生成配置文件时在 MySQL 中执行操作
mysql> 创建数据库 fooDB
-切换到另一个终端并按“s”(提示告诉你这是“扫描”)
-对您认为合适的 apparmor 策略说“是”(我猜它们都适用于 mysql),说“是”按“a”表示允许
-按“f”完成 Apparmor 配置文件
-重启apparmor服务
sudo systemctl start apparmor
-检查是否还可以在其他终端使用mysql
mysql>退出
mysql -u root -p
如果一切顺利,您可以从命令行使用 mysql。
【讨论】:
【参考方案20】:就我而言,我的 mysql 数据文件夹中的文件已损坏
mv /var/lib/mysql /var/lib/mysql_old
所以当我有备份时,我将目录移动到“_old”,然后再次启动 docker。它使用干净的数据创建了一个新文件夹 mysql ,并且套接字工作。
【讨论】:
【参考方案21】:这个答案很可能在这里被淹没,但也许有人不小心偶然发现了它。
在我的例子中,SELinux 阻止了用户/应用程序连接到 MySQL (MariaDB) 服务器套接字。在 RHEL 上,如果您启用了 SELinux,请检查 /var/log/audit/audit.log
。
【讨论】:
【参考方案22】:在 Ubuntu 18:10 Linode 1GB Ram 中,我遇到了这个错误。在检查 /var/log/mysql/error.log 之后,我遇到了这个:
[注意] InnoDB:innodb_empty_free_list_algorithm 已更改为旧版,因为缓冲池大小较小。为了使用回退,缓冲池至少增加到 20MB。
我将我的 linode 升级到 2GB 并使用 sudo mysql 重新启动了 mariadb。接下来 mysql_secure_admin 运行,但没有为用户设置 root 密码-as ususl unitl 将 root 用户更改为使用 mysql_native_password 插件。 不确定,但似乎创建了 sock,但由于我的 VPS 内存不足,服务器关闭了。
【讨论】:
【参考方案23】:尝试重启服务器
sudo /usr/local/mysql/support-files/mysql.server start
如果有任何错误,请按照以下步骤操作
mysqld
您将看到以下日志。请注意此处 MySQL 目录的突出显示部分
mysqld:无法将目录更改为 '/usr/local/mysql-5.7.14-osx10.11-x86_64/data/' (Errcode: 13 - Permission denied) 2016-10-04T14:09:19.392581Z 0 [警告]时间戳 不推荐使用隐式 DEFAULT 值。请用 --explicit_defaults_for_timestamp 服务器选项(有关详细信息,请参阅文档)。 2016-10-04T14:09:19.392847Z 0 [警告] 不安全 --secure-file-priv 的配置:当前值不限制 生成文件的位置。考虑将其设置为有效的非空 小路。 2016-10-04T14:09:19.392921Z 0 [注意] mysqld (mysqld 5.7.14) 从进程 1402 开始 ... 2016-10-04T14:09:19.397569Z 0 [警告] 无法创建测试文件 /usr/local/mysql-5.7.14-osx10.11-x86_64/data/Sudharshan.lower-test 2016-10-04T14:09:19.397597Z 0 [警告] 无法创建测试文件 /usr/local/mysql-5.7.14-osx10.11-x86_64/data/Sudharshan.lower-test 2016-10-04T14:09:19.397712Z 0 [错误] 未能将 datadir 设置为 /usr/local/mysql-5.7.14-osx10.11-x86_64/data/ 2016-10-04T14:09:19.397776Z 0 [错误] 中止 2016-10-04T14:09:19.397795Z 0 [注意] Binlog 结束 2016-10-04T14:09:19.397925Z 0 [注意] mysqld:关闭完成
sudo chown -R _mysql:_mysql /usr/local/mysql-5.7.14-osx10.11-x86_64
注意上一个日志中的 MySQL 文件夹路径 /usr/local,在我的例子中是 mysql-5.7.14- osx10.11-x86_64,您必须根据您机器上的日志更新它,以提供读取权限 到 MySQL 目录
sudo /usr/local/mysql/support-files/mysql.server start
启动 MySQL 成功!
【讨论】:
【参考方案24】:我也面临同样的问题,如果您的 mysql server
默认未运行,它将在几秒钟后再次停止,因此您再次运行 ($ sudo service mysql start
) 命令,如果知道,您可以更改。
对于那个使用命令
$ sudo service mysql start
(如果需要,请输入用户密码,因为我们使用 sudo
)
然后运行
$ sudo mysql -u root -p (put user password if required )
现在你有了你的数据库
【讨论】:
【参考方案25】:我的服务器存储已满,这导致 Mysql 无法启动。从here 得到这个想法。增加 HD 并重新启动解决了该问题。
【讨论】:
【参考方案26】:您缺少创建 /var/run/mysqld 目录的权限。所以请创建并 授予以下权限。
mkdir -p /var/run/mysqld chown mysql:mysql /var/run/mysqld【讨论】:
【参考方案27】:我通过重启mysql解决了这个问题
/etc/init.d/mysql stop
和
/etc/init.d/mysql start
就是这样。
【讨论】:
【参考方案28】:检查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的默认端口
【讨论】:
【参考方案29】:我找到了解决方案
发射前命令:mysql_secure_installation
sudo systemctl stop mariadb
第二步:sudo systemctl start mariadb
第三步:mysql_secure_installation
然后它会询问 root 密码,您只需 按 Enter 并设置新的 root 密码。
【讨论】:
【参考方案30】:在 Debian 服务器 Jessie 上,我的工作解决方案是简单地做
service mysql restart
service mysql reload
作为根用户
【讨论】:
以上是关于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)