【问题标题】:MySQL fails on: mysql "ERROR 1524 (HY000): Plugin 'auth_socket' is not loaded"MySQL失败:mysql“错误1524(HY000):未加载插件'auth_socket'”
【发布时间】:2016-10-19 03:59:53
【问题描述】:

我的本​​地环境是:

  • 全新 Ubuntu 16.04
  • 使用 PHP 7
  • 已安装 MySQL 5.7

    sudo apt-get install mysql-common mysql-server
    

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

mysql -u root -p

我遇到了 3 个步骤的循环问题。

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

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

解决方法:重启电脑。

导致另一个错误:

2) 访问被拒绝

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

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

解决方案:reset root password with this tutorial

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

3) 验证插件不正确

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

在这里我停了下来,或者不知何故又回到了 1)。

【问题讨论】:

  • 很高兴它对您有好处 :) 感谢您与我们联系!

标签: mysql linux ubuntu auth-socket


【解决方案1】:

我有办法了!

在步骤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。套接字问题(来自您的 cmets)

当您看到 socket 错误时,社区提供了 2 个可能的解决方案:

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 文件

问题也不存在。如果您不确定,this might help you

【讨论】:

  • 谢谢你。这也是关于如何重置 mysql root pass 的一个很好的答案,因此您可能需要稍微编辑标题以帮助它在我们遇到套接字问题之前出现。
  • 我很高兴它有帮助。您将如何编辑标题以保留原始消息?我了解该解决方案需要重置密码,但它不能解决标题中的问题。这是更复杂的故障点。对于root密码重置,我会去这里:stackoverflow.com/a/6401963/1348344
  • @matanster 并非如此,这是纯粹的逐步试验失败构造。你用什么操作系统?
  • 您的 mysqld_safe 调用不正确。您需要改为运行:sudo mkdir -p /var/run/mysqld; sudo chown mysql /var/run/mysqld; sudo mysqld_safe --skip-grant-tables &
  • 请在答案中添加套接字问题的可能解决方案。喜欢这个mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqld它可能会节省一些人的时间
【解决方案2】:

你可以尝试如下它对我有用。

启动服务器:

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

更多详情请查看How to reset forgotten password phpmyadmin in Ubuntu

【讨论】:

  • 只有这个对我有用!备份和恢复套接字非常聪明
  • ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) before the "done!"尝试使用 123456 登录时填写您的答案。
  • 我解决了在 phpmyadmin 中描述的步骤(即更改密码,更改插件)。由于某种原因,'set authentication_string=password(...)' 使它停止工作(错误 1045 (28000): Access denied...)。
  • 虽然这是一个解决方案,但每当我重新启动计算机(ubuntu 20.04)时,我都必须运行所有这些命令。有什么永久的解决办法吗?
【解决方案3】:

mysql 命令默认使用 UNIX 套接字连接到 MySQL。

如果您使用的是 MariaDB,则需要在服务器端加载 Unix Socket Authentication Plugin

您可以像这样编辑[mysqld] 配置来做到这一点:

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

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

如果unix_socket=OFF 设置在同一部分中,请将其更改为unix_socket=ON 以启用它,否则此修复不适用。

【讨论】:

  • 这个。所有其他答案都解释了如何解决该错误。这个解释了如何解决它。
  • 如果您使用的是 MariaDB 10.4.3 及更高版本,则应该默认安装 unix_socket 身份验证插件,但如果您错误地将其引用为 plugin="auth_socket",而不是 plugin="unix_socket"更新您的“用户”时,您会收到这条有些误导性的消息。我的回答详细说明了我是如何搞砸的。
【解决方案4】:

适用于 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

  • 第四步: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>

【讨论】:

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

您可以尝试以下步骤:

第一次停止Mysql服务 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服务器后 如果您仍然遇到错误,您必须访问:Reset MySQL 5.7 root password Ubuntu 16.04

【讨论】:

    【解决方案6】:

    试试看: sudo mysql_secure_installation

    在 Ubuntu 18.04 中工作

    【讨论】:

      【解决方案7】:

      万一有人在犯了同样的错误后来到这里:

      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 documentation

      在MariaDB 10.4.3及以后版本,默认安装unix_socket认证插件,默认为'root'@'localhost'用户帐号使用。

      【讨论】:

        【解决方案8】:

        我试过了,效果很好

        use mysql; # use mysql table
        update user set authentication_string="" where User='root'; 
        
        flush privileges;
        quit;
        

        【讨论】:

        • 这对我来说适用于 ubuntu 20.04+ 的 mysql 版本 8.0.22。 This 表示 PASSWORD() 函数已从 mysql 8.0 中删除。
        【解决方案9】:

        这可能有效

        CREATE USER 'user'@'localhost' IDENTIFIED BY 'pwd';

        ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

        【讨论】:

          【解决方案10】:

          你可以试试下面的命令:

          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.
          

          【讨论】:

          • 您能进一步解释一下吗?重启服务器如何解决给定的错误信息?
          猜你喜欢
          • 2016-10-19
          • 1970-01-01
          • 1970-01-01
          • 2020-04-15
          • 2020-03-30
          相关资源
          最近更新 更多