直接修改 servers.php 文件比 Web 界面快得多,因 phpMyAdmin 不支持批量添加服务器,需手动写入 $cfg['Servers'] 数组配置,且必须确保 host、port、connect_type、extension 等基础字段完整,推荐用脚本生成代码并检查防火墙与 MySQL 远程访问设置。

直接修改 servers.php 文件比 Web 界面快得多
phpMyAdmin 不支持 Web 界面批量添加服务器,所有 $cfg['Servers'] 配置必须手动写入 servers.php(通常位于 config/ 或 libraries/config.default.php 同级目录)。试图在 UI 里一台台填,不仅耗时,还会因 session 超时或 CSRF 限制中断。
真实场景中,几十台主机往往有规律可循:比如 IP 段连续(10.0.1.10–10.0.1.49)、命名规则统一(db-prod-01–db-prod-32)、或已存于 CSV/Excel。这时应跳过 UI,直接生成 PHP 数组代码。
- 确认你的 phpMyAdmin 版本 ≥ 5.1(
$cfg['Servers']是数组,旧版用$cfg['Server']单例) - 备份原
servers.php,避免语法错误导致整个 phpMyAdmin 无法加载 - 确保每台主机的 MySQL 用户已提前创建并授权(phpMyAdmin 登录依赖后端账户,不是“加了就自动通”)
$cfg['Servers'][$i] 的最小必要字段不能少
只填 host 和 port 是最常见遗漏点——这会导致连接时静默失败或回退到 localhost。phpMyAdmin 在未显式指定时,会尝试读取环境变量或 fallback 到默认值,但行为不稳定。
以下字段是连接成功的基础(其他如 verbose、auth_type 可按需补):
立即学习“PHP免费学习笔记(深入)”;
-
host:必须是可解析的域名或 IP,不支持 CIDR 或通配符 -
port:显式写3306,哪怕全用默认端口——省略会导致部分版本用 socket 连接而非 TCP -
connect_type:设为'tcp',避免意外走 socket(尤其跨机器时) -
extension:设为'mysqli'(PHP 8+ 已弃用mysql扩展)
示例(第 17 台):
$cfg['Servers'][17]['host'] = '10.0.5.17'; $cfg['Servers'][17]['port'] = '3306'; $cfg['Servers'][17]['connect_type'] = 'tcp'; $cfg['Servers'][17]['extension'] = 'mysqli';
用 Python/Shell 生成代码比手敲安全十倍
手写 30 个 $cfg['Servers'][n] 极易错位索引、漏分号、混用单双引号。用脚本生成是标准做法,且能复用。
比如你有一份 hosts.csv:
host,port,verbose 10.0.2.10,3306,app-db-01 10.0.2.11,3306,app-db-02
一行 Python 就能输出全部 PHP 代码:
python3 -c "
import csv
with open('hosts.csv') as f:
for i, r in enumerate(csv.DictReader(f), 1):
print(f"\$cfg['Servers'][{i}]['host'] = '{r['host']}';")
print(f"\$cfg['Servers'][{i}]['port'] = '{r['port']}';")
print(f"\$cfg['Servers'][{i}]['connect_type'] = 'tcp';")
print(f"\$cfg['Servers'][{i}]['extension'] = 'mysqli';")
print(f"\$cfg['Servers'][{i}]['verbose'] = '{r['verbose']}';")
"
粘贴进 servers.php 即可。注意:索引从 1 开始($cfg['Servers'][0] 是保留位,常被默认配置占用)。
连接测试失败?先检查 auth_type 和防火墙
即使数组写对,仍连不上,大概率卡在这两个地方:
-
auth_type默认是'cookie',要求每次登录输账号密码;若想免密(比如用 HTTP Basic Auth 或信任网络),得统一设为'config'并补上user/password——但明文存密码有风险,生产环境慎用 - 所有目标主机的 3306 端口必须对 phpMyAdmin 所在服务器开放(不是对你本地浏览器),用
telnet 10.0.3.22 3306在 phpMyAdmin 机器上直连测试最准 - MySQL 服务需监听
0.0.0.0:3306(而非仅127.0.0.1),且bind-address配置正确
改完 servers.php 后,务必清空浏览器缓存再刷新——phpMyAdmin 会缓存服务器列表前端 JS,旧列表可能残留。
索引越界、缺少 extension、MySQL 未开远程访问,这三类问题占了 90% 的“加了不显示”或“点击无响应”报错。别急着重装,先看 PHP 错误日志里有没有 Undefined index 或 mysqli_connect 失败提示。



















