phpmyadmin 5.1 连不上 mysql 8.0 多实例,大概率是其中至少一个实例的用户用了 caching_sha2_password 插件,而 phpmyadmin 5.1(尤其搭配 php 7.3 及更早版本)不支持该插件;应登录可连实例,执行 select user, host, plugin from mysql.user 查证,并对问题用户执行 alter user 'u'@'h' identified with mysql_native_password by 'pwd'; + flush privileges。

phpMyAdmin 5.1 连不上 MySQL 8.0 多实例,大概率是其中至少一个实例的用户用了 caching_sha2_password 插件,而 phpMyAdmin 5.1(尤其搭配 PHP mysqli)不支持它——直接改对应用户的认证插件最有效。
确认哪个实例的用户触发了认证失败
登录能连上的那个 MySQL 实例(比如 localhost),执行:
SELECT User, Host, plugin FROM mysql.user WHERE Host IN ('localhost', '%') ORDER BY User;
重点看报错实例中你用来连接的那个用户(如 'root'@'172.18.0.2' 或 'admin'@'%')的 plugin 字段。如果是 caching_sha2_password,就是它;如果是 mysql_native_password 却仍连不上,问题可能在 host 匹配(localhost vs 127.0.0.1)、密码过期,或 phpMyAdmin 配置里端口/协议写错了。
用 ALTER USER 切换认证插件(必须在目标实例上执行)
不能在 phpMyAdmin 里“远程”改其他实例的用户插件——你得单独登录到那个连不上的 MySQL 实例(用命令行 mysql -h 172.18.0.2 -P 3307 -u root -p),再运行:
-
ALTER USER 'your_user'@'your_host' IDENTIFIED WITH mysql_native_password BY 'your_password';—— 注意your_host必须和mysql.user表里完全一致(%不能漏,大小写敏感) -
FLUSH PRIVILEGES;—— phpMyAdmin 场景下这句不能省,否则改了也不生效 - 如果提示
Your password has expired,先执行SET PASSWORD = 'xxx';再跑ALTER USER
检查 phpMyAdmin 的多实例配置是否隐含冲突
phpMyAdmin 5.1 的多实例配置(config.inc.php)里容易踩两个坑:
-
$cfg['Servers'][$i]['host']设成localhost时,MySQL 会强制走 Unix socket,但 Docker 容器或远程实例根本没这个 socket——统一改成127.0.0.1或具体 IP(如172.18.0.2)并显式指定$cfg['Servers'][$i]['port'] -
$cfg['Servers'][$i]['auth_type']别设成http:phpMyAdmin 5.1 对http认证支持弱,且要求 Web 服务器(如 Apache)开启 Basic Auth,多数人其实没配——改回cookie最稳 - 每个实例的
$cfg['Servers'][$i]索引必须从1开始(不能是0),否则 phpMyAdmin 启动时直接报 “Invalid server index ‘0’”
改完插件还连不上?别忽略密码加密方式残留
即使插件切成了 mysql_native_password,如果这个用户是从 MySQL 5.7 升级上来的,它的 authentication_string 字段可能仍是 SHA256 加密格式,mysqli 旧版本校验时会失败。这时要配合重置密码:
ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'new_strong_password';
而不是只改插件不改密码。另外,如果该用户密码已过期,还得加一句:ALTER USER 'user'@'host' PASSWORD EXPIRE NEVER;
插件能换,密码字段的哈希格式不会自动转——这是最容易被跳过的一步。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











