phpMyAdmin root密码重置后仍出现#1045登录错误求助
嘿,我之前也踩过这个坑!重置root密码后还是跳出#1045 - access denied for user 'root'@'localhost' (using password yes)的错误,大概率是这几个原因,你可以挨个排查:
密码重置没覆盖到对应的主机用户
MySQL的用户权限是和主机绑定的,root@localhost、root@127.0.0.1甚至root@::1(IPv6环境)都是独立的用户账号。你重置密码的时候可能只修改了其中一个,但phpMyAdmin实际连接的是另一个。
解决步骤:- 用跳过权限验证的方式登录MySQL命令行(比如Linux下
sudo mysqld_safe --skip-grant-tables &,Windows下在my.ini里加skip-grant-tables然后重启服务) - 执行SQL查看所有root用户:
SELECT user, host FROM mysql.user WHERE user = 'root'; - 给每个root用户都重置密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; ALTER USER 'root'@'127.0.0.1' IDENTIFIED BY '你的新密码'; ALTER USER 'root'@'::1' IDENTIFIED BY '你的新密码'; -- 存在的话才执行 FLUSH PRIVILEGES; - 重启MySQL服务,再尝试登录。
- 用跳过权限验证的方式登录MySQL命令行(比如Linux下
phpMyAdmin配置文件还在用旧密码
如果你之前为了方便,在phpMyAdmin的config.inc.php里硬编码过root密码,那就算你改了MySQL里的密码,phpMyAdmin还是会用旧密码去连接。
解决办法:
找到phpMyAdmin安装目录下的config.inc.php,找到类似这样的行:$cfg['Servers'][$i]['password'] = '旧密码内容';把它改成你的新密码,或者直接注释掉这行(前面加
//),这样每次登录phpMyAdmin时就会让你手动输入密码。改完记得重启你的web服务器(Apache/Nginx之类的)。MySQL权限缓存没刷新
有时候就算你执行了FLUSH PRIVILEGES,MySQL的权限缓存可能还是没更新,尤其是Windows系统或者某些旧版本的MySQL。
解决办法:直接重启MySQL服务——Linux下用sudo systemctl restart mysql,Windows去服务管理器里找到MySQL服务右键重启。密码包含特殊字符导致识别错误
如果你的新密码里有#、$、\这类特殊字符,不管是在phpMyAdmin登录框输入,还是写在配置文件里,都可能被转义或者识别成其他内容。
解决办法:先换一个纯字母数字的简单密码试试,如果能成功登录,再逐步添加特殊字符;如果要在配置文件里用特殊字符,记得给它们加转义(比如\$)。
内容的提问来源于stack exchange,提问作者Ahmed Elsayed




