在使用phpEnv搭建本地PHP开发环境的过程中,MySQL1045登录失败是非常常见的问题,这个错误的核心原因是当前使用的账号密码不匹配,或者该账号没有对应的登录权限,下面我们就针对phpEnv环境给出完整的修复方案。

错误原因排查
首先我们需要先确认错误的具体触发场景,常见的情况有两种:
- 之前修改过MySQL的root密码,但是phpEnv的配置文件没有同步更新,导致启动时用了旧密码连接
- MySQL的root账号权限被误修改,或者只允许特定IP登录,本地连接时被拒绝
phpEnv下修复MySQL1045的步骤
第一步:停止phpEnv的MySQL服务
打开phpEnv面板,在服务列表里找到MySQL服务,点击停止按钮,确保MySQL进程完全退出,也可以在任务管理器里确认没有mysqld进程残留。
第二步:跳过权限验证启动MySQL
打开phpEnv安装目录下的MySQL文件夹,一般默认路径是D:phpEnvMySQL,在该目录下打开命令行窗口,执行下面的命令启动MySQL,跳过权限检查:
mysqld --skip-grant-tables --skip-networking
执行后这个窗口会一直保持运行状态,不要关闭它,我们另外打开一个新的命令行窗口继续操作。
第三步:修改root账号密码
在新的命令行窗口里,同样进入phpEnv的MySQL目录,执行以下命令免密码登录MySQL:
mysql -u root
登录成功后,依次执行下面的SQL语句修改密码,这里以MySQL5.7版本为例,不同版本修改密码的语法略有差异:
-- 切换到mysql系统库
USE mysql;
-- 修改root账号密码,注意将new_password替换成你要设置的新密码
UPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='root';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出MySQL
EXIT;
第四步:重置root账号权限
如果密码修改后还是提示1045错误,就需要检查root账号的权限配置,重新用上面的方法跳过权限登录MySQL,执行下面的SQL语句:
USE mysql; -- 确保root账号允许本地登录,host设置为localhost UPDATE user SET Host='localhost' WHERE User='root'; -- 给root账号授予所有权限 GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION; -- 刷新权限 FLUSH PRIVILEGES; EXIT;
第五步:重启MySQL服务
关闭之前跳过权限启动的命令行窗口,回到phpEnv面板,重新启动MySQL服务,此时用新设置的密码登录,就可以正常连接MySQL了。
常见问题说明
如果你的phpEnv安装的是MySQL8.0及以上版本,修改密码的SQL语法需要调整,上面的UPDATE语句要替换成:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
另外如果phpEnv里的PHP项目连接MySQL还是失败,需要检查项目的数据库配置文件,把密码同步改成新设置的密码即可。