MySQL 8.0+ 默认使用 caching_sha2_password 插件导致 phpMyAdmin(≤5.0.2)无法登录,需执行 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_password'; 并 FLUSH PRIVILEGES;,同时检查并同步修改 'root'@'127.0.0.1' 及 phpMyAdmin 的 auth_type 配置。
直接改 root 用户的认证插件,不是调配置、不是换密码、也不是清缓存——MySQL 拒你,是因为它用 caching_sha2_password 握手,而 phpMyAdmin(尤其 ≤ 5.0.2)根本听不懂这个“方言”。
别猜,进 MySQL 命令行查准:
SELECT User, Host, plugin FROM mysql.user WHERE User = 'root';
重点看 plugin 列。如果显示 caching_sha2_password,且你用的是本地 localhost 连接(phpMyAdmin 默认走 Unix socket),那基本就是它了。注意:'root'@'localhost' 和 'root'@'127.0.0.1' 是两个独立账号,必须分别查。
Access denied for user 'root'@'localhost',99% 是这个插件不兼容,不是密码错mysql -u root -p 能连,phpMyAdmin 就不行执行这条语句前,请确保你记得当前 root 密码(或能用其他方式登录):
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_password';
关键点:
IDENTIFIED WITH mysql_native_password —— 缺少 BY 会清空密码,root 直接不可用FLUSH PRIVILEGES;,否则修改不生效(很多教程漏掉这句)ERROR 1396,说明该用户不存在,得先 CREATE USER 'root'@'localhost' IDENTIFIED BY 'xxx'; 再改改完服务端,还得看 phpMyAdmin 怎么连:
grep "auth_type" /path/to/phpmyadmin/config.inc.php 查当前模式'config':它直接读 $cfg['Servers'][$i]['password'],必须确保 MySQL 允许该用户从 localhost 免密或指定密码登录'cookie' 或 'http'(XAMPP 默认):你界面上输什么,它就传什么给 MySQL —— 此时改 config.inc.php 里的密码字段完全无效D:phpEnvphpmyadminconfig.inc.php,别在错误配置文件里白忙活最容易被忽略的,是改了 'root'@'localhost' 却忘了 'root'@'127.0.0.1' —— Navicat、某些 PHP CLI 脚本或远程连接会走后者,而 phpMyAdmin 在部分部署环境下也可能 fallback 到 TCP 连接。真要彻底,两个 host 都得查、都得改。