MySQL失败:mysql“错误1524(HY000):未加载插件'auth_socket'”


126

我的本地环境是:

  • 新鲜的Ubuntu 16.04
  • 使用PHP 7
  • 安装了MySQL 5.7

    sudo apt-get install mysql-common mysql-server

当我尝试通过CLI登录MySQL时:

mysql -u root -p

我遇到了3个步骤的周期性问题。

1)首先是一些套接字问题

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

解决方案:重新启动PC。

导致另一个错误:

2)拒绝访问

ERROR 1698 (28000): Access denied for user 'root'@'localhost'.

可能的问题?“ root”用户的密码错误!

解决方案:使用本教程重置root密码

使用正确的密码和有效的套接字,将出现最后一个错误。

3)不正确的auth插件

mysql "ERROR 1524 (HY000): Plugin 'unix_socket' is not loaded"

在这里,我停了下来,或者以某种方式又回到了1)。


1
很高兴它对您有好处:)感谢您的参与!
托马什Votruba

Answers:


371

我有解决办法!

在步骤2)重置root密码时,还将auth插件更改为mysql_native_password

use mysql;
update user set authentication_string=PASSWORD("") where User='root';
update user set plugin="mysql_native_password" where User='root';  # THIS LINE

flush privileges;
quit;

这使我能够成功登录!


完整代码解决方案

1.运行bash命令

1.首先,运行以下bash命令

sudo /etc/init.d/mysql stop # stop mysql service
sudo mysqld_safe --skip-grant-tables & # start mysql without password
# enter -> go
mysql -uroot # connect to mysql

2.然后运行mysql命令=>将其手动复制粘贴到cli

use mysql; # use mysql table
update user set authentication_string=PASSWORD("") where User='root'; # update password to nothing
update user set plugin="mysql_native_password" where User='root'; # set password resolving to default mechanism for root user

flush privileges;
quit;

3.运行更多的bash命令

sudo /etc/init.d/mysql stop 
sudo /etc/init.d/mysql start # reset mysql
# try login to database, just press enter at password prompt because your password is now blank
mysql -u root -p 

4.套接字问题(根据您的评论)

当您看到套接字错误时,社区提供了两种可能的解决方案:

sudo mkdir -p /var/run/mysqld; sudo chown mysql /var/run/mysqld
sudo mysqld_safe --skip-grant-tables &

(感谢@Cerin)

要么

mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqld  

(感谢@Peter Dvukhrechensky)


盲径和可能的边缘错误

使用127.0.0.1代替localhost

mysql -uroot # "-hlocalhost" is default

可能导致“文件丢失”或slt错误。

mysql -uroot -h127.0.0.1

效果更好。

跳过套接字问题

我发现了许多创建mysqld.sock文件,更改访问权限或对其进行符号链接的方法。毕竟这不是问题。

跳过my.cnf文件

问题也不存在。如果不确定,这可能会对您有所帮助


3
这次真是万分感谢。这也是有关如何重置mysql root pass的绝佳答案,因此您可能需要稍作编辑以帮助标题,以便在我们遇到套接字问题之前就可以使用它。
Wtower

1
我很高兴它有所帮助。您将如何编辑标题以保留原始消息?我了解该解决方案需要重置密码,但不能解决标题中的问题。这是更多点的更复杂的失败。对于root密码重置,我会去这里:stackoverflow.com/a/6401963/1348344
托马什Votruba

1
@matanster并非如此,这是逐步构建的逐步失败的尝试。您使用什么操作系统?
托马什Votruba

8
您的mysqld_safe调用不正确。您需要改为运行:sudo mkdir -p /var/run/mysqld; sudo chown mysql /var/run/mysqld; sudo mysqld_safe --skip-grant-tables &
Cerin

3
请在答案中添加套接字问题的可能解决方案。像这样 mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqld可以节省一个人的时间
Peter Dvukhrechensky '18

41

您可以尝试以下操作,它对我有用。

启动服务器:

sudo service mysql start

现在,转到sock文件夹:

cd /var/run

备份袜子:

sudo cp -rp ./mysqld ./mysqld.bak

停止服务器:

sudo service mysql stop

还原袜子:

sudo mv ./mysqld.bak ./mysqld

启动mysqld_safe:

 sudo mysqld_safe --skip-grant-tables --skip-networking &

初始化mysql shell:

 mysql -u root

更改密码:

因此,首先选择数据库

mysql> use mysql;

现在在下面两个查询中输入:

mysql> update user set authentication_string=password('123456') where user='root';
mysql> update user set plugin="mysql_native_password" where User='root'; 

现在,一切都会好的。

mysql> flush privileges;
mysql> quit;

检查:

mysql -u root -p

完成!

N.B, After login please change the password again from phpmyadmin

现在检查 hostname/phpmyadmin

Username: root

Password: 123456

有关更多详细信息,请检查如何在Ubuntu中重设忘记的密码phpmyadmin。


2
只有这对我有用!备份和恢复插座是非常聪明
touhid udoy

1
错误1045(28000):在“完成!”之前,对用户'root'@'localhost'的访问被拒绝(使用密码:是)。与123456试图登录时,线在你的答案
trainoasis

我解决了在phpmyadmin中执行描述的步骤(即,更改密码,更改插件)。由于某些原因,“ set authentication_string = password(...)”使其停止工作(错误1045(28000):访问被拒绝...)。
费尔

12

mysql默认情况下,该命令使用UNIX套接字连接到MySQL。

如果您使用的是MariaDB,则需要在服务器端加载Unix套接字身份验证插件

您可以通过编辑如下[mysqld]配置来实现:

[mysqld]
plugin-load-add = auth_socket.so

根据分发情况,配置文件通常位于/etc/mysql//usr/local/etc/mysql/


1
这个。所有其他答案都说明了如何解决该错误。这篇解释了如何解决它。
启用

如果您使用的是MariaDB 10.4.3和更高版本,则默认情况下应安装unix_socket auth插件,但是如果在更新“用户”时错误地将其引用为plugin =“ auth_socket”,而不是plugin =“ unix_socket”,则您将收到此误导性消息。我的答案详细说明了我是如何弄糟的。
罗恩·亚当斯

9

您可以尝试以下步骤:

停止Mysql Service 1st sudo /etc/init.d/mysql stop

以root用户身份登录,无需密码 sudo mysqld_safe --skip-grant-tables &

登录mysql终端后,您需要执行更多命令:

use mysql;

UPDATE mysql.user SET authentication_string=PASSWORD('solutionclub3@*^G'), plugin='mysql_native_password' WHERE User='root';

flush privileges;

sudo mysqladmin -u root -p -S /var/run/mysqld/mysqld.sock shutdown

重新启动mysql服务器后如果仍然遇到错误,则必须访问:重置MySQL 5.7根密码Ubuntu 16.04


8

对于Ubuntu 18.04和mysql 5.7

  • 第1步: sudo mkdir /var/run/mysqld;

    第2步: sudo chown mysql /var/run/mysqld

    步骤3:sudo mysqld_safe --skip-grant-tables&退出(如果卡住,请使用quit)

登录到MySQL没有密码

  • 第4步: sudo mysql --user=root mysql

    步骤5: SELECT user,authentication_string,plugin,host FROM mysql.user;

    步骤6: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'

现在登录

  • mysql -u root -p <root>

1
但是我可以在哪一步设置root的通行证?因为我尝试过$ mysql -u root -p但是访问被拒绝了。Access denied for user 'root'@'localhost' (using password: YES)我尝试输入“是”密码
-AlexNikonov

4

试试看:sudo mysql_secure_installation

在Ubuntu 18.04中工作


1

如果有人在犯了同样的错误后落在这里,我会这样做:

  1. plugin="mysql_native_password"暂时切换到。完成了我的任务。
  2. 尝试切换回“ auth_socket”插件,但错误地引用了该插件,plugin="auth_socket"导致mysql "ERROR 1524 (HY000): Plugin 'auth_socket' is not loaded"
  3. 缺少一种登录方式来修复此错误,我不得不不得不停止mysql并使用mysql_safe绕过身份验证才能切换到适当的插件plugin="unix_socket"

希望这可以节省一些人,如果他们收到原始发布者的错误消息,但是真正的原因是插件名称混乱,实际上并不缺少“ auth_socket”插件本身的存在,根据MariaDB文档

在MariaDB 10.4.3和更高版本中,默认情况下安装了unix_socket身份验证插件,默认情况下,该文件夹由'root'@'localhost'用户帐户使用。


-7

您可以尝试使用以下命令:

hduser@master:~$ sudo /etc/init.d/mysql stop
[ ok ] Stopping mysql (via systemctl): mysql.service.
hduser@master:~$ sudo /etc/init.d/mysql start
[ ok ] Starting mysql (via systemctl): mysql.service.

您能进一步解释吗?重新启动服务器如何解决给定的错误消息?
Nico Haase
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.