答案是切换用户认证插件为mysql_native_password。mysql 8.0默认使用caching_sha2_password插件,而旧版phpmyadmin或php mysqli扩展不支持,需执行alter user 'user'@'host' identified with mysql_native_password by 'pwd'并flush privileges。
php 5.7+ 和 mysql 8.0+ 默认使用 caching_sha2_password 插件,而 phpmyadmin 5.x(尤其是搭配旧版 php 或 mysqli 扩展时)可能无法正确处理该插件,导致“#1045 - access denied”或空白登录页。直接改用户认证插件是最快绕过问题的办法。
确认当前用户的认证插件类型
登录 phpMyAdmin 后,执行以下 SQL 查看目标用户实际使用的插件:
SELECT User, Host, plugin FROM mysql.user WHERE User = 'your_username';
如果返回的 plugin 是 caching_sha2_password,且你遇到连接失败,就需要切换;如果是 mysql_native_password 却仍连不上,问题大概率出在密码加密方式或 host 匹配上,而非插件本身。
用 SQL 命令修改用户的 authentication_plugin
在 phpMyAdmin 的「SQL」标签页中运行 ALTER USER 命令(需有 SUPER 权限):
ALTER USER 'your_username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
-
your_username和localhost必须与mysql.user表中完全一致(注意大小写和通配符,比如%不能漏) - MySQL 8.0.11+ 要求显式指定
WITH mysql_native_password,只写IDENTIFIED BY不会改变插件 - 执行后必须运行
FLUSH PRIVILEGES;,否则变更不生效(部分 MySQL 版本可省略,但 phpMyAdmin 场景下建议加上)
phpMyAdmin 连接失败时的替代操作路径
如果已无法登录 phpMyAdmin,只能通过命令行 MySQL 客户端操作:
- 用 root 用户登录:
mysql -u root -p - 执行同上的
ALTER USER语句 - 若提示 “Your password has expired”,先用
SET PASSWORD = 'xxx';更新密码再改插件 - 检查
my.cnf中是否设置了default_authentication_plugin = caching_sha2_password—— 若想全局降级,可注释掉该行并重启 MySQL(不推荐生产环境)
改完插件不代表万事大吉:PHP 的 mysqli 扩展在 7.4 以下版本默认不支持 caching_sha2_password,但即使改成 mysql_native_password,如果密码字段用了 sha256 加密(比如从旧版升级而来),仍可能校验失败 —— 这时候得配合 ALTER USER ... PASSWORD EXPIRE NEVER 和重置密码一起操作。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











