我正在运行PHP 7.0上的MySQL版本8。
当我尝试从PHP连接到我的数据库时,出现以下错误:
连接错误:SQLSTATE [HY000] [2054] 服务器请求客户端未知的身份验证方法
PHP可能会显示此错误
警告:mysqli_connect():服务器请求客户机未知的身份验证方法[caching_sha2_password]在D:\ xampp \ htdocs \ reg \ server.php的第10行
如何解决这个问题?
我正在运行PHP 7.0上的MySQL版本8。
当我尝试从PHP连接到我的数据库时,出现以下错误:
连接错误:SQLSTATE [HY000] [2054] 服务器请求客户端未知的身份验证方法
PHP可能会显示此错误
警告:mysqli_connect():服务器请求客户机未知的身份验证方法[caching_sha2_password]在D:\ xampp \ htdocs \ reg \ server.php的第10行
如何解决这个问题?
@穆罕默德,这通常归因于您的mysql数据库正在使用的身份验证插件。
默认情况下,出于某种原因,mysql 8默认插件是auth_socket。应用程序大多数时候都希望使用密码登录到您的数据库。
如果您尚未更改mysql默认的认证插件,则可以通过以下方式进行更改:
1. 以root身份登录mysql
2. 运行此SQL命令:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password
BY 'password';
用你的 root 密码替换 'password'。如果你的应用程序没有使用 root 用户登录到数据库,那么请使用你的应用程序所用的用户替换上述命令中的 'root' 用户。
Digital Ocean 在此提供了更详细的说明:安装 Mysql
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';
。 - lupguoERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'
。我的密码是 ''
(空的)。 - xjcl你需要更改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手册页面)。 - danblack我尝试了很多其他解决方案,但只有这个对我有效。
感谢临时解决方法。
检查你的 .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并登录:
这里的所有答案都对我没有作用。我所做的是:
之后它就正常工作了。
DB_USERNAME=root
设置这个解决了我的问题。
检查此值 -
old_passwords=0;
它应该是0。
也要检查这个-
[mysqld] default_authentication_plugin= mysql_native_password 另一个 要检查的值是确保
[mysqld]部分应该像这样。
preferences -> mysql -> initialize database -> use legacy password encryption(instead of strong) -> entered same password