phpenv中php 7.1–7.3默认不支持mysql 8.0的caching_sha2_password认证,解决方法是将用户认证插件改为mysql_native_password,并在my.ini/my.cnf中设置default_authentication_plugin=mysql_native_password后重启mysql。

phpEnv 默认搭配的 PHP 版本(如 7.1、7.2、7.3)基本都不支持 MySQL 8.0 的 caching_sha2_password 认证插件,所以一连接就报 SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client —— 这不是配置写错了,是底层驱动压根不认识这个认证方式。
phpEnv 中 MySQL 8.0 连接失败的典型表现
你在 phpEnv 控制面板里选了 MySQL 8.0,PHP 选了 7.2 或 7.3,填好数据库信息点测试,直接报错;或者 ThinkPHP/Laravel 启动时 PDO 抛出异常,错误堆栈里带 [2054] 和 caching_sha2_password 关键词。这种不是代码问题,也不是密码输错,而是客户端(PHP)和服务器(MySQL 8.0)在“怎么验身份”这件事上根本没对上频道。
常见错误现象:
Authentication plugin 'caching_sha2_password' cannot be loadedPDO::__construct(): The server requested authentication method unknown to the client- 用命令行
mysql -u root -p能连,但 PHP 就连不上
改 MySQL 用户认证插件(最稳、兼容性最强)
这是 phpEnv 环境下最快落地的解法:不升级 PHP,也不折腾扩展,直接让 MySQL 用户降级用老协议。操作都在 MySQL 里,和 phpEnv 的 PHP 版本无关。
步骤如下:
- 用 phpEnv 自带的 phpMyAdmin 或命令行登录 MySQL(账号通常是
root,密码为空或你在 phpEnv 里设的) - 执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_password'; - 如果要支持远程连接(比如 PHP 脚本走 127.0.0.1 或 Docker),再加一条:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_new_password'; - 执行:
FLUSH PRIVILEGES;
注意:root@'localhost' 和 root@'%' 是两个独立用户,得分别改;改完密码后,PHP 配置里的 password 字段也要同步更新。
改 phpEnv 的 MySQL 全局默认认证方式(一劳永逸但需重启)
如果你希望所有新建用户都默认用 mysql_native_password,避免以后每个用户都手动 ALTER,可以改 MySQL 配置文件。phpEnv 的 MySQL 配置通常在:phpenv\mysql\my.ini(Windows)或 phpenv/mysql/my.cnf(Linux/macOS)。
在 [mysqld] 段落下加这一行:
default_authentication_plugin=mysql_native_password
然后在 phpEnv 控制面板里「重启 MySQL」—— 不重启不生效。这个设置只影响新创建的用户,已存在的用户仍保持原认证方式,所以仍需配合上一步的 ALTER USER。
为什么别急着升级 phpEnv 的 PHP 版本?
虽然 PHP 7.4+ 原生支持 caching_sha2_password,但 phpEnv 的 PHP 编译包未必启用了对应选项。实测中,不少 phpEnv 打包的 PHP 7.4/8.0 依然会报相同错误,因为其 mysqlnd 扩展没带 --with-mysql-sock 或没启用 SHA2 支持。
更关键的是:phpEnv 本身不提供扩展编译工具链,你没法自己 ./configure --with-mysqlnd 重装。强行换高版本 PHP 可能引发其他扩展缺失(如 pdo_sqlsrv、redis)或路径错乱问题。
所以,优先改 MySQL 端,比折腾 phpEnv 的 PHP 更可控。真正需要 caching_sha2_password 的场景(比如生产环境强制安全策略),再考虑迁移到 Docker + 官方 PHP 镜像这类可定制环境。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











