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 -h -p”,你实际上是在运行 mysql 客户端来访问 mysql服务器。如果你用'-h'提到的地址/IP地址上没有安装mysql服务器,就会弹出上述错误。这是因为它无法通过套接字 mysql.sock 连接到 MySQL 服务器 2) 如果已经安装了 Mysql-server,它应该正在运行。如果没有,您将观察到相同的错误。所以让它在你指定的服务器上运行。 如果您尝试更改存储数据库的目录,但在配置文件中输入错误的目录(如拼写错误),也会发生这种情况。它不会告诉您拼写错误的目录不存在,而是会告诉您您没有访问它的权限。 作为第一步,我建议尝试重新启动服务器进程(请参阅其他服务器与客户端的区别)。尝试 sudo /etc/init.d/mysql 重启。通常,不需要重新安装。我建议您首先检查日志文件。不仅是 mysql 的日志文件,还有 /var/log/syslog,因为您可能有服务器崩溃导致 mysql 作为副作用而崩溃。 对我来说是在 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)