PHP错误:SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client
Posted 不见灵山
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP错误:SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client相关的知识,希望对你有一定的参考价值。
忽然注意到的情况:
2018/7/19至2018/9/13之间发布的7.1.20、7.1.21、7.1.22和7.2.8、7.2.9、7.2.10这六个版本提供的对caching_sha2_password插件的支持,后续的版本中又取消了相关支持,不知道是因为什么。按照php官方的文档,目前似乎只有xdevapi可以支持caching_sha2_password插件。
使用PHP连接mysql 8的时候,可能会发生如标题所示的错误:
SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client
发生这种错误,是由于MySQL 8默认使用了新的密码验证插件:caching_sha2_password,而之前的PHP版本中所带的mysqlnd无法支持这种验证。解决这个问题,有两种办法。
一种办法是升级PHP支持MySQL 8的新验证插件。
PHP 7.2.8和PHP 7.1.20已经可以支持caching_sha2_password,直接连接MySQL 8。
截止PHP 7.0.31和PHP 5.6.37还无法支持caching_sha2_password,不知道后续版本是否会做出支持。
可以通过phpinfo()函数了解当前安装的PHP是否支持caching_sha2_password:
如果不能升级PHP,可以在MySQL 8中创建(或修改)使用caching_sha2_password插件的账户,使之使用mysql_native_password,这样先前版本的PHP就可以连接使用了。
- 在CREATE USER时,使用IDENTIFIED WITH xxx_plugin BY \'password\',比如:
CREATE USER \'native\'@\'localhost\' IDENTIFIED WITH mysql_native_password BY \'password!2#4\';
- 使用ALTER USER修改已有账户的验证插件:
ALTER USER \'native\'@\'localhost\' IDENTIFIED WITH mysql_native_password
或
ALTER USER \'native\'@\'localhost\' IDENTIFIED WITH mysql_native_password BY \'new_password\';
采用前一种方式,账户的密码将被清除;BY子句将为账户设置新的密码。
- /etc/my.cnf配置文件中,有一行:
# default-authentication-plugin=mysql_native_password
请删除注释符号“#”并重新启动mysqld使之生效,此后创建的账户均默认使用mysql_native_password。
- 如果您完成MySQL Server的安装之后,在没有启动过mysqld服务的情况下修改/etc/my.cnf配置,那么启动mysqld之后创建的\'root\'@\'localhost\'账户也是使用mysql_native_password插件的。
就这些,希望有帮助。
以上是关于PHP错误:SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client的主要内容,如果未能解决你的问题,请参考以下文章
php增加用户时出现的【SQLSTATE[HY000] [2002]
PHP/PDO 错误:SQLSTATE[HY000] 无法连接:Adaptive Server 不可用或不存在(严重性 9)
“SQLSTATE[HY000]: 一般错误” - 一条语句中有多个 SQL 查询
我无法在我的 docker compose 中进行 mysql php artisan 迁移。错误 SQLSTATE[HY000] [2002]