phpMyAdmin无法登录MySQL的主因是凭据不匹配:config.inc.php未同步新密码、MySQL 8.0+默认caching_sha2_password插件不兼容、或host(localhost/127.0.0.1)不一致,均需对应修改配置、切换插件、刷新权限并重启服务。

不是 phpMyAdmin 出错了,而是它用的登录凭据和 MySQL 实际要求不匹配——改完密码后,config.inc.php 里没同步更新,或者 MySQL 侧的认证插件/Host 条件变了。
config.inc.php 中的 password 没同步更新
phpMyAdmin 不会自动读取你刚在 MySQL 里改的新密码,它只认配置文件里写的值。常见现象是:命令行能用新密码登录,但 phpMyAdmin 还卡在 #1045 - Access denied for user 'root'@'localhost' (using password: YES)。
- 打开
config.inc.php(通常在 phpMyAdmin 根目录下),找到类似这行:$cfg['Servers'][$i]['password'] = ''; - 把空字符串换成你刚设的新密码,例如:
$cfg['Servers'][$i]['password'] = 'mynewpass123'; - 注意:如果用了特殊字符(如
$、\),PHP 可能误解析,建议用单引号包裹,并避免在密码开头/结尾加空格 - 改完必须重启 Web 服务(如 Apache/Nginx)或至少清空浏览器 cookie + 强制刷新页面,否则旧 session 可能缓存失败状态
MySQL 8.0+ 的 caching_sha2_password 插件不兼容
升级到 MySQL 8.0 或全新安装后,root@localhost 默认认证插件变成 caching_sha2_password,而 phpMyAdmin 5.0 之前版本根本不支持它——输对密码也报 #1045,且错误信息里不提插件问题。
- 先验证是否是这个原因:用命令行执行
mysql -u root -p,如果能进,再查插件:SELECT User,Host,plugin FROM mysql.user WHERE User='root'; - 若
plugin列显示caching_sha2_password,就需降级为兼容的插件:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpass'; - 务必紧跟执行:
FLUSH PRIVILEGES;,否则修改不生效 - 某些旧版 phpMyAdmin(如 4.x)即使改了插件,仍可能因 PHP 的 mysqli 扩展版本太低而连不上,这时得升级 phpMyAdmin 或换用 PHP 7.4+
host 匹配失败:localhost ≠ 127.0.0.1
MySQL 把 'root'@'localhost' 和 'root'@'127.0.0.1' 当作两个完全独立的账号。如果你在 config.inc.php 里把 $cfg['Servers'][$i]['host'] 改成 '127.0.0.1'(比如为了绕过 Unix socket 问题),但数据库里只有 root@localhost 有密码,就会触发 (using password: NO) 错误。
立即学习“PHP免费学习笔记(深入)”;
- 检查当前配置用的是哪个 host:
$cfg['Servers'][$i]['host']值是localhost还是127.0.0.1? - 对应去 MySQL 查账号:
SELECT User,Host FROM mysql.user WHERE User='root'; - 如果缺
root@127.0.0.1,就创建它:CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'yourpass'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION; - 或者更简单:把 config 里的 host 改回
'localhost',并确认系统没强制走 TCP(如 my.cnf 里禁用了 socket)
最容易被忽略的一点:改完 MySQL 用户权限或插件后,FLUSH PRIVILEGES 不是可选项,是必做动作;而很多人只记得改密码、忘了刷权限表,导致所有后续操作都白忙。



















