phpMyAdmin 4.9 必须显式配置 $cfg'Servers' 和 [2],因其解析逻辑仅识别从1开始的连续整数索引,跳号、缺项或使用0会导致后续服务器失效;且所有MySQL 5.7实例用户必须统一使用 mysql_native_password 认证,否则静默失败。

phpMyAdmin 4.9 完全支持管理多台 MySQL 5.7 实例,但必须手动配置 $cfg['Servers'] 数组,不能依赖自动发现或环境变量;只要网络通、权限对、认证插件一致(mysql_native_password),就能稳定显示并切换。
为什么 $cfg['Servers'][1] 和 $cfg['Servers'][2] 必须显式编号?
phpMyAdmin 4.9 的服务器解析逻辑只认从 1 开始的连续整数索引:$cfg['Servers'][0] 被跳过,$cfg['Servers'][2] 缺失会导致后续条目失效。常见错误是复制粘贴后漏改索引,结果只看到一个下拉选项,或登录时实际连到错误实例。
- 索引必须严格从
1开始,且不能重复或跳号 - 每个块必须完整包含
host、port、auth_type、verbose四个关键项 - 不要用
$i = 0; $i++手动递增——4.9 不支持循环生成配置,官方示例也明确要求静态定义
MySQL 5.7 用户必须用 mysql_native_password 认证
即使所有实例都是 5.7,若某用户被意外设为 caching_sha2_password(比如通过 MySQL 8.0 客户端执行了 ALTER USER ... IDENTIFIED WITH caching_sha2_password),phpMyAdmin 4.9 就会静默失败:登录页刷新、空白、或卡在重定向。它不会报错提示“认证插件不支持”,只会连接中断。
- 检查命令:
SELECT user, host, plugin FROM mysql.user WHERE user = 'pma_user'; - 修复命令:
ALTER USER 'pma_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_pass'; FLUSH PRIVILEGES; - 建用户时务必显式指定:
CREATE USER 'pma_user'@'%' IDENTIFIED WITH mysql_native_password BY 'pass';
本地 Docker 场景下 host 值不能写 localhost
在 phpMyAdmin 容器里配 $cfg['Servers'][1]['host'] = 'localhost',实际会尝试连接容器自身的 3306 端口(即连自己),而不是你期望的 MySQL 5.7 容器。Docker 网络中,容器间通信必须用服务名或 IP,localhost 永远指当前容器。
立即学习“PHP免费学习笔记(深入)”;
- 正确写法(Compose 场景):
$cfg['Servers'][1]['host'] = 'mysql57';(对应services.mysql57.container_name) - 正确写法(非 Compose 场景):
$cfg['Servers'][1]['host'] = '172.18.0.3';(用docker inspect查目标容器 IPv4Address) - 端口必须显式写:
$cfg['Servers'][1]['port'] = '3306';,哪怕默认,否则可能 fallback 到 socket 连接
并发登录失败常因 max_connections 不足
phpMyAdmin 4.9 在 cookie 认证模式下,每次页面操作(如切库、查表)都会新建一个 mysqli 连接,不复用。如果多个用户或频繁操作,容易触发 MySQL 的 max_connections 限制,表现为登录成功但点任何链接都超时或返回空响应。
- 查当前值:
SHOW VARIABLES LIKE 'max_connections'; - 临时调高:
SET GLOBAL max_connections = 200; - 永久生效:在 MySQL 配置文件(如
/etc/mysql/mysql.conf.d/mysqld.cnf)中加max_connections = 200 - 注意:PHP 的
mysqli.reconnect默认关闭,别指望它自动重连
最易忽略的是:phpMyAdmin 4.9 对连接失败几乎不提供有效反馈——它既不打印 mysqli 错误,也不在界面上提示“插件不兼容”或“连接被拒”,只表现为空白页或无限加载。遇到这类问题,第一反应应是直连 MySQL 检查用户 plugin 和网络连通性,而不是反复调 config.inc.php。



















