phpMyAdmin连不上MySQL 8.0主因是PHP的mysqli扩展不支持caching_sha2_password插件,报错“authentication method unknown to the client”即表明底层驱动不识别该认证方式;PHP 7.4+且启用mysqlnd与OpenSSL方可原生支持,否则须将用户认证插件降级为mysql_native_password。
phpmyadmin 本身不支持直接启用 caching_sha2_password 插件——它能否连上 mysql 8.0,取决于底层 php 的 mysqli 扩展是否具备该能力,而不是 phpmyadmin 配置项能开关的。
为什么 phpMyAdmin 连不上 MySQL 8.0 的 caching_sha2_password?
报错 mysqli_real_connect(): The server requested authentication method unknown to the client 是典型症状。这不是 phpMyAdmin 版本低或配置错,而是 PHP 运行时的 mysqli 扩展压根不认识这个插件。
- PHP 7.2/7.3 默认编译的
mysqli不支持caching_sha2_password,即使 phpMyAdmin 是 5.2.0 也没用 - PHP 7.4+ 的
mysqli才原生支持,但前提是使用mysqlnd驱动(不是libmysqlclient),且 OpenSSL 扩展已启用 - 检查方法:在 phpMyAdmin 的「导入」页或任意 SQL 页执行
SELECT VERSION(), @@version_comment;确认 MySQL 版本;再新建一个info.php文件调用phpinfo(),搜索mysqlnd和OpenSSL是否存在并启用
如何让 phpMyAdmin 实际用上 caching_sha2_password?
不能靠改 config.inc.php 里的某个开关,必须确保运行环境满足三个硬性条件:
-
php -m | grep mysqli输出中必须含mysqlnd(不是mysql或空) -
php -r "echo defined('MYSQLI_CLIENT_SSL') ? 'SSL OK' : 'NO SSL';"应输出SSL OK - MySQL 用户必须仍为
caching_sha2_password,且 phpMyAdmin 连接时未强制降级(即没在用户层面执行过ALTER USER ... IDENTIFIED WITH mysql_native_password)
满足后,phpMyAdmin 就会自动走新协议——你不需要在配置里写任何新参数,$cfg['Servers'][$i]['auth_type'] 保持 cookie 或 config 即可。
phpMyAdmin 配置里哪些项会间接破坏 caching_sha2_password 连接?
看似无关的配置,实际可能让连接悄悄退回到旧协议或直接失败:
立即学习“PHP免费学习笔记(深入)”;
-
$cfg['Servers'][$i]['extension'] = 'mysql':PHP 7.4+ 已移除此扩展,设它会导致 fatal error,连初始化都失败 -
$cfg['Servers'][$i]['ssl'] = true但未配$cfg['Servers'][$i]['ssl_ca']:MySQL 8.0 强制校验 CA,空值或路径错会中断握手,错误日志里常是SSL connection error: protocol version mismatch -
$cfg['Servers'][$i]['host'] = 'localhost':在某些 Linux 发行版下会走 Unix socket,而 socket 连接有时绕过部分认证协商逻辑,导致行为不一致;改用127.0.0.1更可控
什么时候该放弃支持 caching_sha2_password,直接切回 mysql_native_password?
如果你控制不了 PHP 环境(比如共享主机、老旧 Docker 基础镜像、或运维不允许升级 PHP),那就别硬扛。对 phpMyAdmin 专用账户执行降级最省事:
- 先确认账号:在 phpMyAdmin 的「SQL」页执行
SELECT User, Host, plugin FROM mysql.user WHERE User = 'pma_controluser'; - 双 host 修复(防 localhost/127.0.0.1 不一致):
ALTER USER 'pma_controluser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'xxx';和ALTER USER 'pma_controluser'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'xxx'; - 立刻生效,不用重启 MySQL,但必须确保 phpMyAdmin 配置中
$cfg['Servers'][$i]['controluser']指向的就是这个用户
真正容易被忽略的是:改完插件后,如果 phpMyAdmin 仍连不上,大概率是它自己用的 controluser 账号没更新密码或 host 匹配不上——而不是你刚改的那个数据库用户。



















