phpenv不支持多版本mysql切换,需停用并删除默认mysql服务,再以同名安装mysql 8.0,并确保path唯一指向其bin目录,最后配置default_authentication_plugin为mysql_native_password以兼容php。

phpEnv 本身不支持开箱即用的「多版本 MySQL 切换」,它默认只允许启用一个 MySQL 实例(无论你装了几个版本),且服务名固定为 mysql。想在 phpEnv 中真正用上 MySQL 8.0,关键不是“装多个”,而是“替换并生效”——否则 php -v 显示 8.0,mysql --version 还是 5.7。
为什么 phpEnv 启动网站显示 PHP8 却连不上 MySQL8?
因为 phpEnv 的「网站配置里选 PHP8」只影响 Apache/Nginx 调用的 PHP 解释器路径,和 MySQL 服务完全无关。MySQL 是独立 Windows 服务,由系统 net start mysql 控制,而 phpEnv 默认启动的是它自带的老版本(5.7)服务。
- 打开任务管理器 → 服务 → 查看是否运行着
mysql(不是mysql80或其他名字) - 命令行执行
mysql --version,结果大概率仍是mysql Ver 14.14 Distrib 5.7.x - 即使你手动装了 MySQL 8.0 并配了环境变量,只要 phpEnv 自带的 5.7 服务还在运行,PHP 就会连过去
必须停掉 phpEnv 自带的 MySQL 5.7 服务
不卸载、不重装 phpEnv,也能强制它让位给你的 MySQL 8.0 —— 核心动作是「禁用旧服务 + 确保新服务同名」。
- 以管理员身份运行 cmd,执行:
net stop mysql(停止 phpEnv 自带的 MySQL) - 执行:
sc delete mysql(彻底删除该服务注册项;注意:不是删文件,只是删 Windows 服务记录) - 确认旧服务已消失:
sc query mysql应返回[SC] EnumQueryServicesStatus:OpenService FAILED 1060 - 此时你的 MySQL 8.0 才有机会顶上:进入你安装的 MySQL 8.0 的
bin目录(如D:\phpEnv\server\mysql\mysql-8.0\bin\),执行:mysqld --install mysql(关键:服务名仍叫mysql) - 再执行:
net start mysql,成功后mysql --version就该显示 8.0.x 了
环境变量 PATH 里 MySQL 路径要唯一且靠前
phpEnv 启动时可能从 PATH 读取 mysql 命令位置,若 PATH 里同时存在 5.7 和 8.0 的 bin,Windows 会取第一个匹配项。
- 检查当前生效路径:
where mysql,输出应只有 1 行,指向你的 MySQL 8.0bin目录 - 如果输出多行或指向错误路径,进「系统属性 → 高级 → 环境变量」,在
Path用户/系统变量中:
– 删除所有含mysql-5.7或旧路径的条目
– 确保你的 MySQL 8.0bin路径(如D:\phpEnv\server\mysql\mysql-8.0\bin\)在列表顶部附近
– 不要保留%MYSQL_HOME%\bin这类间接引用,除非你 100% 确认MYSQL_HOME指向 8.0 - 改完 PATH 后,**必须关闭所有已打开的 cmd / PowerShell / IDE 终端窗口,重新打开才生效**
验证 PHP 是否真连上了 MySQL 8.0
光看 mysql --version 不够,PHP 连接池用的是自己的客户端库(mysqli 或 pdo_mysql),得实测握手协议。
- 写个测试脚本
test-mysql.php:
```php
<?php $mysqli = new mysqli('127.0.0.1', 'root', '你的密码');
if ($mysqli->connect_error) {
die('Connect Error: ' . $mysqli->connect_error);
}
echo "Server version: " . $mysqli->get_server_info() . "\n";
echo "Protocol version: " . $mysqli->get_proto_info() . "\n";
?>
```
- 在浏览器或 CLI 中运行,输出的
Server version必须是8.0.x,且不能报错Authentication plugin 'caching_sha2_password' cannot be loaded - 若报这个错,说明 MySQL 8.0 用了默认认证插件,但 PHP 旧扩展不兼容 —— 回到 MySQL 8.0 的
my.ini,在[mysqld]下加一行:default_authentication_plugin=mysql_native_password,然后net stop mysql && net start mysql
最易被忽略的一点:phpEnv 的「重启服务」按钮只管 Apache/Nginx 和 PHP-FPM,它根本不会碰 MySQL 服务。MySQL 的启停、配置、协议兼容性,全得你手动闭环。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











