确认root用户认证插件为caching_sha2_password后,执行ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';并FLUSH PRIVILEGES生效。

phpEnv 自带的 MySQL 8.0 默认启用 caching_sha2_password,但其集成的旧版 PHP(如 7.1/7.2)和内置的 mysqlnd 驱动通常不支持该插件——连接时会卡在握手阶段,报错类似 Authentication plugin 'caching_sha2_password' cannot be loaded 或直接拒绝,不是密码错,是协议不匹配。
怎么确认当前用户用的是 caching_sha2_password?
登录 MySQL 命令行(phpEnv 环境下通常是 mysql -u root -p),执行:
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
如果 plugin 列显示为 caching_sha2_password,问题就在这里。常见于 phpEnv 新装的 MySQL 8.0 实例,root 用户默认就是这个插件。
ALTER USER 切换认证插件必须带 host 和 FLUSH PRIVILEGES
phpEnv 的 MySQL 配置里,root 用户往往绑定的是 'root'@'localhost' 或 'root'@'127.0.0.1',host 不匹配会导致命令无效。务必查清 host 再执行:
立即学习“PHP免费学习笔记(深入)”;
构建并排查Microsoft Word邮件合并及DOCX模板工作流,使用合并域、内容控件、文档属性、重复区块、数据等
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';FLUSH PRIVILEGES;
注意:FLUSH PRIVILEGES 不可省略,否则修改不生效;ALTER USER ... BY 'xxx' 是重设密码+切换插件的一体操作,只写 IDENTIFIED WITH ... 不带密码会导致密码被清空(空密码无法登录)。
phpEnv 的 PHP 版本决定你能不能绕过插件降级
即使你把用户切回 mysql_native_password,若 phpEnv 用的是 PHP 7.1 或更老版本,其内置 mysqlnd 驱动存在已知 bug:遇到 SSL 相关握手字段会静默失败或报 SSL connection error。此时仅改插件没用。
- PHP 7.2+ 且启用了
pdo_mysql或mysqli扩展,基本能连上降级后的用户 - PHP 7.4+ 原生支持
caching_sha2_password(需开启MYSQLI_OPT_SSL_MODE或确保连接字符串含&useSSL=0) - phpEnv 界面中查看「PHP 版本」和「扩展状态」,重点确认
pdo_mysql是否已启用
如果 PHP 版本太低又无法升级,最稳的路径仍是降级插件 + 显式指定 127.0.0.1(而非 localhost)避免 Unix socket 解析干扰。
别碰 default_authentication_plugin 配置文件
phpEnv 的 MySQL 配置文件(如 phpenv\mysql\my.ini)里加 default_authentication_plugin=mysql_native_password 看似一劳永逸,但实际作用有限:
- 它只影响后续
CREATE USER语句创建的新用户,对已存在的 root、phpmyadmin 等用户完全无效 - phpEnv 启动脚本可能覆盖或忽略该配置,重启后不一定生效
- MySQL 8.0.25+ 官方已明确不推荐此配置,未来版本可能移除支持
真正要改的,永远是具体用户的 plugin 字段,而不是寄希望于“默认”。


















