phpEnv下MySQL 8.0连接报错“Plugin caching_sha2_password could not be loaded”是因PHP默认不支持该认证插件,需执行ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_password';并FLUSH PRIVILEGES;即可解决。

phpEnv下MySQL 8.0连接报错:Plugin caching_sha2_password could not be loaded
这是 phpEnv 环境中 MySQL 8.0 最典型的连接失败原因——PHP(尤其是 PHP 7.0–7.4)或其 mysqlnd 驱动默认不支持 caching_sha2_password 插件。错误常出现在用 phpMyAdmin、Laravel artisan tinker 或自定义 PDO 连接时,报错信息类似:Plugin caching_sha2_password could not be loaded 或 Client does not support authentication protocol requested by server。
修改 root 用户加密方式为 mysql_native_password(最直接生效)
不需要重装 MySQL,也不用改配置文件全局设置,只需在 MySQL 内执行一条 ALTER USER 命令即可修复当前用户连接问题:
- 先用 phpEnv 自带的 MySQL CLI 或命令行登录(初始密码通常在 phpEnv 控制面板里可见,或查看
mysql/data/xxx.err日志找temporary password) - 执行以下语句(注意替换你的实际密码):
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_password';
- 立即刷新权限:
FLUSH PRIVILEGES;
- 如果 phpEnv 中启用了远程访问(如绑定
'root'@'%'),请把localhost替换为对应 host
phpEnv 的 my.ini 是否需要加 default_authentication_plugin?
一般不需要。phpEnv 默认使用 Windows 服务方式管理 MySQL,且多数打包版本(如 phpEnv v3.x)已预设兼容配置。但如果你手动修改过 my.ini 或遇到新创建用户仍报错,可检查并补充以下两行(放在 [mysqld] 段内):
default_authentication_plugin=mysql_native_password character-set-server=utf8mb4
改完后必须重启 phpEnv 的 MySQL 服务(通过控制面板“重启 MySQL”或命令行 net stop mysql && net start mysql),否则不生效。
立即学习“PHP免费学习笔记(深入)”;
CREATE USER 和 GRANT 分离是 MySQL 8.0 强制要求
在 phpEnv 中新建数据库用户时,不能再用老写法:GRANT ALL ON *.* TO 'user'@'%' IDENTIFIED BY 'pass'; —— 这会直接报错 ERROR 1064 (42000)。
正确流程是分两步:
- 先创建用户并指定加密方式:
CREATE USER 'devuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'dev123';
- 再授权:
GRANT ALL PRIVILEGES ON *.* TO 'devuser'@'localhost';
- 最后别漏掉:
FLUSH PRIVILEGES;
特别注意:phpEnv 的 MySQL 服务名通常是 mysql(不是 mysql80 或其他),执行 net start 时务必确认服务名一致;另外,所有密码含特殊字符(如 !@#)的命令行登录,必须用单引号包裹,双引号在 Windows cmd 下会被 shell 解析报错。



















