直接原因是MySQL 8.0默认认证插件caching_sha2_password不被phpMyAdmin底层PHP mysqli扩展(尤其PHP≤7.3)识别,需执行ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'pwd'并FLUSH PRIVILEGES。

phpMyAdmin连MySQL 8.0报#2054错误,直接原因是caching_sha2_password不被识别
这不是密码输错或网络问题,而是 MySQL 8.0 默认用 caching_sha2_password 插件做认证,而 phpMyAdmin 底层的 PHP mysqli 扩展(尤其 PHP 7.3 及更早)压根不支持这个握手协议。典型表现是页面卡在登录、弹出 #2054 - The server requested authentication method unknown to the client,或者 Navicat / JDBC 连不上时提示 Authentication plugin 'caching_sha2_password' cannot be loaded。
必须用ALTER USER改插件,phpMyAdmin界面点“编辑”没用
phpMyAdmin 5.x 的用户管理表单把 plugin 字段设为只读——你手动填了 mysql_native_password 并点执行,后台不会生成 ALTER USER 语句,而是静默忽略或报错“字段不可修改”。这不是 bug,是设计限制。
真正生效的操作只能走 SQL 执行路径:
- 进 phpMyAdmin → 点顶部「SQL」标签页
- 粘贴并执行:
ALTER USER 'your_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; - 立刻跟一句:
FLUSH PRIVILEGES; - 注意:用户名和 host 必须和
SELECT User, Host FROM mysql.user;返回的一模一样;'user'@'localhost'和'user'@'127.0.0.1'是两个账号,不能混用
改完还连不上?检查这三个关键点
常见原因不是命令没运行,而是漏了细节或环境干扰:
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
- 没执行
FLUSH PRIVILEGES;—— MySQL 8.0 多数版本(尤其是宝塔、云 RDS)必须显式刷新,否则缓存旧认证状态 - 改的是
'user'@'localhost',但 phpMyAdmin 实际连的是'user'@'127.0.0.1'(Nginx + PHP-FPM 架构下 TCP 连接默认走 127.0.0.1) - 密码字段残留 SHA256 格式(比如从旧版升级而来),即使插件改了,
authentication_string值仍不兼容;得重置密码:ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'new_pwd';
宝塔或 Docker 环境下容易被忽略的缓存和配置干扰
这类环境常带连接池或代理层,会固化旧认证元数据:
- 宝塔:改完必须去「软件商店」→ 找到 MySQL → 点「重启」,不能只 reload
- Docker:如果挂载了自定义
my.cnf,确认没在[mysqld]段误配default_authentication_plugin=caching_sha2_password,它会覆盖已有用户行为 - 某些一键脚本(如 LNMP.org)会在启动时自动重建
root用户,覆盖你手动改的插件;建议优先改应用专用账号,避开root
最稳做法:用命令行 mysql -u root -p 登录后直接执行 ALTER USER,绕过所有 Web 界面和中间层。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










