PHP with MySQL 8.0+错误:服务器请求客户端未知的身份验证方法[重复]

Posted

技术标签:

【中文标题】PHP with MySQL 8.0+错误:服务器请求客户端未知的身份验证方法[重复]【英文标题】:PHP with MySQL 8.0+ error: The server requested authentication method unknown to the client [duplicate] 【发布时间】:2019-02-21 04:22:04 【问题描述】:

我在 php 7.0 上运行 mysql 版本 8。

当我尝试从 PHP 连接到我的数据库时出现以下错误:

连接错误:SQLSTATE[HY000] [2054] 服务器请求客户端未知的身份验证方法

PHP 可能会显示此错误

警告:mysqli_connect():服务器请求的身份验证方法未知客户端 [caching_sha2_password] 在 D:\xampp\htdocs\reg\server.php 第 10 行

我该如何解决这个问题?

【问题讨论】:

我做了一些谷歌工作。也许这会起作用? github.com/laradock/laradock/issues/1392(不是同一个问题,但是是同一个错误信息) 【参考方案1】:

@mohammed,这通常归因于您的 mysql 数据库正在使用的身份验证插件。

由于某种原因,默认情况下,mysql 8 默认插件是 auth_socket。大多数情况下,应用程序都希望使用密码登录到您的数据库。

如果您还没有更改您的 mysql 默认身份验证插件,您可以通过以下方式进行: 1. 以root身份登录mysql 2.运行这条sql命令:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password
BY 'password';  

将“密码”替换为您的根密码。如果您的应用程序未使用 root 用户登录到您的数据库,请将上述命令中的“root”用户替换为您的应用程序使用的用户。

数字海洋在这里Installing Mysql

对此进行了更多阐述

【讨论】:

感谢这对我来说是正确的方法! 这在使用 MySQL 8.0+ 时对我有用。我在 Magento 2.3.2 网络安装程序中看到了这个问题。谢谢! 谢谢,我试过其他人。只有这对我有用。 出现这个问题的主要原因是 MySQL 的默认认证插件支持在 MariaDB 8.0 版本中发生了变化。比如'PHP7.3'支持的Mysql认证插件列表可以通过'phpinfo()'函数看到:`mysqlnd debug_trace, auth_plugin_mysql_native_password auth_plugin_mysql_clear_password, auth_plugin_sha256_password`。所以将Mysql服务器受限账户中的认证插件机制改为'sha256_password'或'mysql_native_password':ALTER USER 'root'@'%' IDENTIFIED WITH sha256_password BY 'password'; 为此我收到了ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'。我的密码是''(空)【参考方案2】:

您必须更改 MySQL 设置。 编辑 my.cnf 文件并将此设置放在 mysqld 部分:

[mysqld]
default_authentication_plugin= mysql_native_password

然后运行以下命令:

FLUSH PRIVILEGES;

以上命令将会使默认认证机制的变化生效。

【讨论】:

然后重新创建用户。 ALTER USER $user IDENTIFIED WITH mysql_native_password BY 'passwd'(参考ALTER USER manual page 在 /etc/mysql/my.cnf 的 Ububtu 上找到 my.cnf @AkshayHazari 请关注此主题:***.com/questions/10757169/… Windows 7 上的 my.cnf 文件在哪里? 它对我有用,谢谢【参考方案3】:

我尝试了很多其他解决方案,但只有这个对我有用。

感谢workaround。

检查您的 .env

MYSQL_VERSION=latest

然后输入这个命令

$ docker-compose exec mysql bash
$ mysql -u root -p 

(以 root 身份登录)

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'default'@'%' IDENTIFIED WITH mysql_native_password BY 'secret';

然后转到 phpmyadmin 并登录为:

主机 -> mysql 用户 -> 根 密码 -> root

希望对你有帮助

【讨论】:

这个解决方案对我来说很有魅力。你也拯救了我的一天!我另外做的是 fork mysql docker 并将解决方案封装在 mysql 容器的构建中:github.com/cybalex/mysql/commit/… 谢谢。它有很大帮助。我只需要最后一个更改查询就可以在 docker mysql 上运行它 谢谢你,我现在没事了。 直到今天,这是我发现在 Docker 上工作的唯一解决方案。谢谢! [HY000][1396] Operation ALTER USER failed for 'default'@'%' 发生在最后一次更改...有什么想法吗?【参考方案4】:

这里没有一个答案对我有用。我必须做的是:

    重新运行安装程序。 选择产品“MySQL 服务器”旁边的快速操作“重新配置” 浏览选项直到到达身份验证方法并选择“使用旧身份验证方法”

之后它就可以正常工作了。

【讨论】:

如果您使用安装程序并且使用经典的用户名/密码方法连接到数据库,那么此方法是可行的方法。 最干净的方式,先生!【参考方案5】:

面对同样的问题,我无法使用 mysql 版本 8 运行 wordpress docker 容器,因为它的默认身份验证机制是caching_sha2_password 而不是 mysql_native_password。

为了解决这个问题,我们必须将默认身份验证机制重置为 mysql_native_password。

在你的 mysql 安装中找到 my.cnf 文件,通常在 linux 机器上它位于以下位置 - /etc/mysql

编辑 my.cnf 文件并在标题 [mysqld] 下添加以下行

default_authentication_plugin=mysql_native_password

保存文件,然后使用root用户登录mysql命令行

运行命令 FLUSH PRIVILEGES;

【讨论】:

这个解决方案解决了我的问题,但我不必刷新权限。【参考方案6】:

我正在使用 Laravel Lumen 构建一个小型应用程序。 对我来说,这是因为我的 .env 文件中没有定义 DB_USERNAME。

DB_USERNAME=root

设置这个解决了我的问题。

【讨论】:

【参考方案7】:

在 my.cnf 文件中检查以下 2 个步骤。

检查这个值 -

old_passwords=0;

应该是 0。

也检查一下-

[mysqld] default_authentication_plugin= mysql_native_password 另一个 检查的价值是确保

[mysqld] 部分应该是这样的。

【讨论】:

在哪里可以找到“my.cnf”文件? laradock/mysql/my.cnf【参考方案8】:
preferences -> mysql -> initialize database -> use legacy password encryption(instead of strong) -> entered same password

作为我的 config.inc.php 文件,重新启动 apache 服务器并且它工作。我仍然对此持怀疑态度,所以我停止了 apache 和 mysql 服务器并再次启动它们,现在它正在工作。

【讨论】:

以上是关于PHP with MySQL 8.0+错误:服务器请求客户端未知的身份验证方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

新特性解读 | MySQL 8.0 通用表达式(WITH)深入用法

Windows 10 中的 Mysql 8.0 安装错误

深入浅出MySQL 8.0错误日志

mysql 8.0 树形数据的查询

mysql 8.0 树形数据的查询

mysql 8.0 树形数据的查询