phpEnv下解决MySQL 1045错误需专有流程:先停phpEnv(非net stop),修改其mysql\my.ini添加skip_grant_tables,重启phpEnv后用ALTER USER重置密码并指定mysql_native_password插件,最后删掉该配置并彻底重启。

phpEnv 是 Windows 下轻量级 PHP 开发环境,内置 MySQL(通常为 5.7 或 8.0),但它的 MySQL 不走系统服务管理,而是由 phpEnv 自带的控制脚本启停。所以遇到 ERROR 1045 (28000): Access denied for user 'root'@'localhost',不能直接套用标准 MySQL 服务重置流程——路径、配置文件位置、启动方式全都不一样。
确认 phpEnv 的 MySQL 实际运行模式
phpEnv 启动 MySQL 时,默认使用 mysqld.exe 直接运行,不注册为 Windows 服务。这意味着:
-
net stop mysql无效,会提示“服务名无效” - 配置文件不是系统级的
C:\Program Files\MySQL\my.ini,而是 phpEnv 自己目录下的mysql\my.ini(路径类似D:\phpEnv\mysql\my.ini) - MySQL 进程由 phpEnv 的托盘程序或
start.bat启动,需先在 phpEnv 界面点击「Stop」或手动结束mysqld.exe进程
修改 phpEnv 的 my.ini 并启用 skip_grant_tables
phpEnv 的 MySQL 配置文件严格限定在自身目录内,改错地方完全没用。必须找到它实际加载的 my.ini:
- 打开 phpEnv 安装目录 → 进入
mysql子目录 → 编辑my.ini - 在
[mysqld]段落下新增一行:skip_grant_tables(注意:不要加引号,不要写在其他段落里) - 保存后,**必须重启整个 phpEnv**(不只是 MySQL),否则改动不生效;部分版本需右键托盘图标 → 「Restart All」
- 验证是否生效:命令行执行
mysql -u root -p,回车跳过密码即可进入,说明跳过验证成功
MySQL 5.7+ 和 8.0 的密码字段与认证插件差异
phpEnv 新版常集成 MySQL 8.0,而旧教程里的 UPDATE user SET password=PASSWORD(...) 在 8.0 中会报 ERROR 1054 (42S22): Unknown column 'password',因为字段已改为 authentication_string,且默认插件是 caching_sha2_password:
- 登录后先切库:
USE mysql; - 重置密码(兼容 5.7/8.0):
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_new_password'; - 如果仍连不上(尤其 Navicat 报 1045 且提示 “using password: NO”),大概率是插件不兼容,强制切回老插件:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_password'; - 最后别忘:
FLUSH PRIVILEGES;
改完密码后必须清理 skip_grant_tables 并彻底重启
很多用户卡在这步:以为改完密码就完事了,但 phpEnv 的 MySQL 进程可能还在用旧配置缓存运行。最稳妥的做法是:
- 关闭 phpEnv 托盘程序(右键 → Exit)
- 任务管理器中确认所有
mysqld.exe进程已结束 - 编辑
mysql\my.ini,删掉或注释掉skip_grant_tables(加#开头) - 重新双击启动 phpEnv,等状态栏 MySQL 显示绿色「Running」后再试连接
- 若用 Navicat 连,主机填
127.0.0.1(而非localhost),可绕过部分 socket 认证路径问题
phpEnv 的 MySQL 是封闭子环境,所有路径、权限、插件行为都绑定在其安装目录内,脱离这个上下文去套通用 MySQL 教程,90% 会失败。最关键的不是“怎么改密码”,而是“让 phpEnv 真的加载你改的配置”。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











