phpEnv切换MySQL 8.0需三步:下载ZIP版解压至server\mysql目录并配置my.ini;在软件设置中选mysql-8.0后停止再启动服务;更新系统Path环境变量,替换旧MySQL路径,并执行ALTER USER修改认证插件为mysql_native_password。

phpEnv 支持 MySQL 8.0,而且从 2020 年 11 月起就已内置支持,最新版(如 8.12.1)还支持 MySQL 8.3/8.4。但「支持」不等于「开箱即用」——你得手动切换或配置,否则默认仍可能是 MySQL 5.7。
怎么在 phpEnv 里切换到 MySQL 8.0
切换不是点一下就完事,关键在三步:下载、替换、重启服务。很多用户卡在「点了切换却还是连不上」,其实是没清旧服务或没处理认证插件。
- 先去
https://dev.mysql.com/downloads/mysql/下载 Windows x64 ZIP 版(如mysql-8.0.33-winx64.zip),不要 MSI 安装包 - 解压后重命名文件夹为
mysql-8.0,放进D:\phpEnv\server\mysql\(路径以你实际安装为准) - 确保该文件夹下有
data目录和my.ini;若缺失,可用 phpEnv 自带的mysql-5.7复制一份再改配置项(比如basedir、datadir指向新路径) - 在 phpEnv 主界面 → 「软件设置」→ 「MySQL 默认版本」下拉选
mysql-8.0,然后「停止服务」→「启动服务」
注意:如果之前用过系统级 MySQL 服务(比如叫 MySQL80),必须先在 Windows 服务管理器中卸载它,否则端口(3306)或 mysqld 进程会冲突,导致 phpEnv 启动失败并报错「服务启动后停止」。
为什么 php -v 显示 PHP 8.x,但 mysql --version 还是 5.7
因为 phpEnv 的「网站配置里选了 PHP 8.0」只影响 Web 请求的 PHP 解释器,不影响命令行环境变量。MySQL 命令行工具是否可用、用的是哪个版本,完全取决于你的系统 Path 环境变量。
立即学习“PHP免费学习笔记(深入)”;
- 打开「系统属性 → 高级 → 环境变量」
- 在「用户变量」和「系统变量」的
Path中,删掉旧的 MySQL 路径(如D:\phpEnv\server\mysql\mysql-5.7\bin\) - 新增新路径:
D:\phpEnv\server\mysql\mysql-8.0\bin\ - 重启所有已打开的 CMD 或 PowerShell 窗口,再执行
mysql --version才会生效
漏掉这一步,Composer 安装 ThinkPHP8 时跑 php artisan migrate 就会报错:找不到 mysql 命令,或连上的是旧版本导致语法不兼容(比如 json 字段、utf8mb4_0900_as_cs 排序规则)。
连接 MySQL 8.0 失败?大概率是 caching_sha2_password 插件问题
MySQL 8.0 默认用 caching_sha2_password 认证方式,而 phpMyAdmin、旧版 PDO、甚至某些 Navicat 版本默认不支持。现象是:能启动服务,但 phpMyAdmin 显示「#2054 - The server requested authentication method unknown to the client」。
- 进 CMD,运行:
mysql -u root -p(密码默认为空或你在 phpEnv 里设的) - 执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; - 再执行:
FLUSH PRIVILEGES;
这一步不能跳过。即使你只是想用命令行操作,某些 PHP 扩展(如 mysqli)在未显式指定 mysqlnd 且未加载对应认证插件时,也会拒绝握手。改完之后,phpMyAdmin、Laravel php artisan tinker 连数据库才真正可用。
自定义 MySQL 版本后服务启动失败怎么办
最常见原因是 my.ini 配置错误或权限异常,而不是版本本身不兼容。phpEnv 不校验配置文件,直接转发给 mysqld 启动,一旦出错就静默退出。
- 先查日志:打开
D:\phpEnv\server\mysql\mysql-8.0\data\,找hostname.err(比如DESKTOP-ABC.err),里面会有真实报错,比如「InnoDB: Operating system error number 5 in a file operation」就是权限问题 - 确认
datadir路径末尾没有反斜杠(\),否则 MySQL 8.0 会解析失败 - 若提示「Table 'mysql.plugin' doesn't exist」,说明
data目录是空的或来自低版本,需运行mysqld --initialize-insecure --user=mysql --basedir="D:\phpEnv\server\mysql\mysql-8.0" --datadir="D:\phpEnv\server\mysql\mysql-8.0\data"初始化 - Windows 下建议始终用管理员身份运行 phpEnv 主程序,避免因 UAC 导致
mysqld无法写入日志或创建 socket
MySQL 8.x 对 Windows 的服务注册更敏感,mysqld install 这类命令 phpEnv 不调用,它靠内部封装的进程管理器启停。所以别自己手动注册系统服务,否则会和 phpEnv 冲突,导致「服务启动后停止」反复出现。



















