phpEnv中MySQL root密码遗忘时,唯一可靠方法是停服务、用--skip-grant-tables启动、按版本执行对应SQL(5.7用UPDATE user SET authentication_string=PASSWORD('新密码'),8.0+用ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'),并严格执行FLUSH PRIVILEGES后重启服务。

phpEnv 里 MySQL 的 root 密码忘了,不能靠界面点选、配置文件查找或“找回”——它根本没存明文密码。唯一可靠方式是停服务、跳过权限验证、进命令行改密,且必须严格匹配你当前的 MySQL 版本(5.7 或 8.0+)执行对应语句。
确认 MySQL 版本和安装路径
这一步不能跳:不同版本语法完全不兼容,写错就白操作。
- 打开 phpEnv 主界面 → 点「软件管理」→ 找 MySQL 行,复制“安装路径”,例如 D:\phpEnv\Extensions\MySQL8.0.33
- 进入该路径下的 bin 子目录(如 D:\phpEnv\Extensions\MySQL8.0.33\bin)
- 以管理员身份打开 PowerShell 或 CMD,执行:mysqld --version
- 看输出:含 8.0.x 就是 8.0+;含 5.7.x 就是 5.7 版本
停止 MySQL 服务并清空残留进程
不彻底停掉 mysqld.exe,后续所有命令都会被权限拦截或端口占用。
- 在 phpEnv 主界面点击 MySQL 右侧的「停止」按钮
- 打开任务管理器 → 「详细信息」页 → 搜索并结束所有 mysqld.exe 进程
- 验证是否干净:在命令行执行 tasklist /fi "imagename eq mysqld.exe",输出为空才安全
用 --skip-grant-tables 启动并修改密码
这是绕过密码验证的核心步骤,需开两个管理员窗口,顺序不能乱。
立即学习“PHP免费学习笔记(深入)”;
- 第一个窗口:进入 MySQL bin 目录,运行:
mysqld --skip-grant-tables --shared-memory
(窗口会卡住不动,正常,保持打开别关) - 第二个窗口:同样进 bin 目录,运行:
mysql -u root(不加 -p,直接回车) - 登录后依次执行:
USE mysql;
FLUSH PRIVILEGES; - 根据版本执行密码语句:
• MySQL 5.7:UPDATE user SET authentication_string=PASSWORD('新密码') WHERE User='root' AND Host='localhost';
• MySQL 8.0+:ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
重启服务并验证连接
改完不重启,新密码不会生效;重启失败,大概率是跳过模式没关干净或 my.ini 里残留参数。
- 回到第一个窗口,按 Ctrl + C 终止 mysqld --skip-grant-tables 进程
- 打开 phpEnv 主界面,点击 MySQL 「启动」按钮
- 测试连接:mysql -u root -p,输入刚设的新密码
- 若仍报错 ERROR 1045,检查:
– 是否执行了 FLUSH PRIVILEGES;
– Host 是否为 'localhost'(不是 '127.0.0.1' 或 '%')
– phpMyAdmin 的 config.inc.php 中 password 字段是否同步更新



















