MySQL 8.0在phpEnv中连接失败大概率因caching_sha2_password认证插件不兼容旧版PHP;需修改my.ini中[mysqld]段的default_authentication_plugin=mysql_native_password并重启MySQL,或用ALTER USER降级已有用户认证方式,同时确保PHP启用mysqli/pdo_mysql扩展且连接时使用127.0.0.1而非localhost。

phpEnv里MySQL 8.0连不上?大概率是caching_sha2_password惹的祸
phpEnv 默认集成的 MySQL 8.0 使用 caching_sha2_password 作为默认认证插件,而多数旧版 PHP(尤其是 7.4 及更早)的 mysqli 或 PDO_MySQL 扩展不原生支持该插件——连接时会直接报错 Authentication plugin 'caching_sha2_password' cannot be loaded 或卡在握手阶段。
改 default_authentication_plugin 是最稳的解法
修改 phpEnv 自带的 MySQL 配置文件(通常是 phpenv\mysql\my.ini 或 phpenv\mysql\my.cnf),在 [mysqld] 段落下强制指定插件:
- 找到或添加这一行:
default_authentication_plugin=mysql_native_password - 确保该配置位于
[mysqld]下方,**不能**写在[client]或[mysql]里 - 改完必须重启 MySQL 服务(比如通过 phpEnv 控制面板点「重启 MySQL」,或命令行执行
net stop mysql && net start mysql) - 如果 phpEnv 启动失败,检查错误日志(通常在
phpenv\mysql\data\*.err),常见原因是配置语法错误或路径不存在
ALTER USER 命令只对已有用户生效,且需先能登录
如果 MySQL 已启动并能用初始密码登录(比如初始化时打印的临时密码),可手动降级 root 或应用用户:
MySQL 数据库管理技能,能够通过自然语言查询和管理数据库,支持 SELECT/INSERT/UPDATE/DELETE、表管理、备份恢复等操作。当用户提及 MySQL、数据库查询、建表或数据备份时使用此技能。
- 用管理员权限打开 phpEnv 自带的 MySQL CLI(或命令行进入
phpenv\mysql\bin目录运行mysql -u root -p) - 执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_password'; - 再执行:
FLUSH PRIVILEGES; - 注意:若提示
ERROR 1820 (HY000): You must reset your password...,先用SET PASSWORD = 'xxx';强制改密再执行 ALTER - 此操作不改变新创建用户的默认插件,仅影响已存在用户
别漏掉 PHP 扩展和连接参数的适配
即使 MySQL 端改了插件,PHP 连接仍可能失败:
- 确认
php.ini中已启用extension=mysqli和/或extension=pdo_mysql(phpEnv 通常已开,但建议检查) - ThinkPHP/Laravel 等框架的数据库配置中,
hostname建议写127.0.0.1而非localhost,避免 Unix socket 连接触发插件协商异常 - PDO DSN 若显式指定
mysql:unix_socket=...,也会绕过 TCP 插件协商逻辑,导致失败 - PHP 8.0+ 原生支持
caching_sha2_password,但 phpEnv 多数打包的是 PHP 7.4,所以别指望靠升级 PHP 版本绕过这个问题
真正麻烦的不是改哪一行配置,而是 phpEnv 的 MySQL 配置文件位置不固定、重启机制不透明、错误日志分散——建议改完立刻用命令行 mysql -h 127.0.0.1 -u root -p 验证是否真生效,别只信控制面板的“启动成功”提示。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










