phpMyAdmin 4.9 多服务器需手动配置 $cfg'Servers' 和 [2](编号从1开始),PMA_HOST仅设默认连接目标、不生成下拉菜单;连不上主因是 caching_sha2_password 认证插件不兼容或网络/端口不通。

能,但必须手动在 config.inc.php 中逐个定义服务器条目,phpMyAdmin 4.9 不会自动识别或适配版本差异;连不上八成卡在认证插件或端口路由上。
为什么改 PMA_HOST 环境变量没用
PMA_HOST 是单值变量,只控制默认连接目标,不生成下拉菜单;Docker 启动后该值固化,无法动态切换。想看到两个 MySQL 实例的选项,必须显式配置 $cfg['Servers'][1] 和 $cfg['Servers'][2] —— 编号从 1 开始,0 不合法。
-
$cfg['Servers'][1]['host'] = 'mysql57';(对应 5.7 实例) -
$cfg['Servers'][2]['host'] = 'mysql80';(对应 8.0 实例) - 不能写
$cfg['Servers'][0],phpMyAdmin 4.9 会跳过或报错
default_authentication_plugin 不一致导致连接失败
MySQL 5.7 默认用 mysql_native_password,8.0.4+ 默认用 caching_sha2_password;phpMyAdmin 4.9 的 mysqli 扩展不支持后者直连,报错通常是 #2002 或空白登录页。
- 统一降级认证插件:在 MySQL 8.0 中执行
ALTER USER 'pma'@'%' IDENTIFIED WITH mysql_native_password BY 'pass'; FLUSH PRIVILEGES; - 确认用户授权来源匹配 phpMyAdmin 容器网络段,例如
GRANT ALL ON *.* TO 'pma'@'172.18.0.%'; - 不要依赖
root用户——它默认绑定localhost,远程不可见
端口、bind-address 和 Docker 网络连通性检查
即使配置了两个 Servers 条目,若底层网络不通,下拉菜单里能选但点进去就超时。关键不是“能不能列出来”,而是“能不能建立 TCP 连接”。
立即学习“PHP免费学习笔记(深入)”;
- MySQL 5.7 和 8.0 必须监听非
127.0.0.1地址:bind-address = 0.0.0.0(或具体 Docker 网桥 IP) - Docker 场景下,5.7 容器名如
mysql57,8.0 若在云上,填公网域名或 VPC 内网 IP,但要确保 phpMyAdmin 容器所在网络能出向访问 - 防火墙/安全组必须放行目标端口(如 3306 和 3307),且
max_connections足够,否则并发登录失败
最容易被忽略的是:phpMyAdmin 4.9 的 mysqli 扩展对 caching_sha2_password 完全无感知,不会提示“认证方式不支持”,只会静默失败;只要看到登录页卡住或跳回空表单,第一反应应是查 MySQL 用户的 plugin 字段,而不是调 phpMyAdmin 配置。



















