phpEnv MySQL 忘记 root 密码时需用 --skip-grant-tables 启动并修改 user 表,严格按关闭服务、管理员运行 mysqld、另开窗口执行 UPDATE 和 FLUSH PRIVILEGES、终止进程、重启服务流程操作。

phpEnv 是绿色免安装的 PHP + Apache + MySQL 集成环境,其 MySQL 默认 root 密码为空,但一旦设过密码又忘记,就不能靠 phpMyAdmin 或配置文件直接重置——必须绕过权限验证改 user 表。下面分场景说明实操路径。
确认当前 MySQL 是否能正常登录
先判断你卡在哪一步:如果执行 mysql -u root -p 后输空密码能进,说明密码还是空的,直接用 SQL 改就行;如果提示 Access denied for user 'root'@'localhost',且你不确定旧密码,就得走跳过权限表流程。
- 打开命令行,进入 phpEnv 目录下的
mysql\bin(例如:D:\phpEnv\mysql\bin) - 运行
mysql -u root -p,回车后直接按 Enter(不输任何字符) - 若出现
mysql>提示符,说明当前无密码,跳到下一节;否则继续本节后续步骤
用 --skip-grant-tables 启动 MySQL(适用于忘记密码)
这是唯一能绕过认证强制修改密码的方式,但必须严格按顺序操作,否则会卡死或无效。
- 先关闭 phpEnv 中正在运行的 MySQL:右键托盘图标 → “MySQL” → “Stop MySQL Server”
- 进入
mysql\bin目录,用管理员权限打开命令行(非 PowerShell,避免兼容问题) - 执行:
mysqld --skip-grant-tables --shared-memory—— 注意不要加&,该窗口需保持打开 - 另开一个命令行窗口,同样进入
mysql\bin,执行:mysql -u root(此时不加-p,也不输密码) - 进库后立即执行:
USE mysql;→UPDATE user SET authentication_string=PASSWORD('你的新密码') WHERE User='root' AND Host='localhost'; - 再执行:
FLUSH PRIVILEGES;,然后EXIT;
改完密码后必须终止 mysqld 进程再重启服务
很多人卡在这步:以为改完就完了,结果 phpEnv 里 MySQL 启动失败,或者新密码仍不生效。
立即学习“PHP免费学习笔记(深入)”;
- 回到第一个运行
mysqld --skip-grant-tables的命令行窗口,按Ctrl + C终止它(不是关窗口) - 等几秒,确认任务管理器中没有残留的
mysqld.exe进程(有就手动结束) - 回到 phpEnv 托盘,点击 “MySQL” → “Start MySQL Server”
- 再试:
mysql -u root -p,输入新密码,应能成功进入
MySQL 5.7.6+ 推荐用 ALTER USER(仅限已知旧密码时)
如果你还记得旧密码,且 MySQL 版本 ≥ 5.7.6(phpEnv 多数打包的是 5.7.31 或 8.0.33),优先用标准 SQL 命令,更安全、不需停服务。
- 执行:
mysql -u root -p,输入旧密码登录 - 在
mysql>下执行:ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; - 不需要
FLUSH PRIVILEGES;,该语句自带刷新 - 退出后即可用新密码连接,phpEnv 界面无需重启(但部分老版本 phpEnv 可能缓存连接,建议重启一次)
最容易被忽略的是 --shared-memory 参数和进程清理:Windows 下不加这个参数,--skip-grant-tables 在某些 phpEnv 版本中会启动失败;而没杀干净 mysqld.exe,会导致后续无法绑定 3306 端口。改完别急着关窗口,盯一眼任务管理器再点启动。



















