192

我在 PHP 7.0 上运行 MySQL 版本 8。

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

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

PHP 可能会显示此错误

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

我该如何解决这个问题?

4

8 回答 8

458

@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”用户替换为您的应用程序使用的用户。

数字海洋在这里对此进行了更多阐述

于 2018-12-21T08:09:30.370 回答
139

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

[mysqld]
default_authentication_plugin= mysql_native_password

然后运行以下命令:

FLUSH PRIVILEGES;

以上命令将使默认认证机制的更改生效。

于 2018-09-17T09:18:54.720 回答
100

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

感谢您的解决方法

检查你的 .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
  • 用户-> 根
  • 密码-> 根

希望能帮助到你

于 2018-12-23T17:38:55.580 回答
14

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

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

之后它工作正常。

于 2019-05-12T12:11:38.127 回答
8

面对同样的问题,我无法使用 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;

于 2019-04-21T18:03:31.877 回答
2

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

DB_USERNAME=root

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

于 2019-02-23T16:12:43.877 回答
0
preferences -> mysql -> initialize database -> use legacy password encryption(instead of strong) -> entered same password

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

于 2019-04-17T07:17:11.493 回答
0

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

  • 检查这个值 -

    旧密码=0;

    它应该是 0。

  • 检查这个也 -

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

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

于 2019-02-24T05:01:31.963 回答