Laravel/Lumen部署后出现SQLSTATE[HY000] [2054]认证错误如何解决?
解决方法
根本原因
SQLSTATE[HY000] [2054]报错和你编写的where查询逻辑无关,是服务器环境兼容性问题:MySQL 8.0及以上版本默认使用caching_sha2_password作为身份认证插件,而服务器上部署的PHP的PDO MySQL扩展版本较低,不支持该认证方式,所以只要触发数据库连接的操作都会报错,无数据库操作的静态路由自然可以正常访问。
可行解决方案
- 方案一:调整MySQL用户认证规则(操作最简单,兼容性最好)
登录服务器的MySQL命令行终端,依次执行以下命令,注意替换占位符为你的实际数据库配置:
执行完成后重启MySQL服务,再重新测试接口即可。-- 修改指定用户的认证方式为兼容旧版扩展的mysql_native_password ALTER USER '你的数据库用户名'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的数据库用户密码'; -- 刷新权限使配置生效 FLUSH PRIVILEGES; - 方案二:升级服务器PHP扩展
若需要保留MySQL默认的caching_sha2_password认证规则,可将服务器PHP版本升级到7.4及以上,同时将pdo_mysql扩展更新到支持该认证方式的版本,升级完成后重启PHP-FPM服务即可生效。
验证方式
配置修改完成后,可在项目根目录执行artisan命令快速验证:
php artisan tinker # 进入交互界面后执行测试查询 Season::where('status','active')->first();
若正常返回数据则说明问题已解决。
内容的提问来源于stack exchange,提问作者Sermed mayi
相关产品推荐
相关产品推荐

