phpMyAdmin服务器列表不按字母排序,因其直接按config.inc.php中$cfg['Servers']数组的定义顺序渲染,该顺序为插入序而非字典序;唯一可靠排序方式是手动或脚本重排配置数组并保持索引连续。
phpmyadmin 本身不提供对多服务器列表的字母排序功能,这个列表顺序完全由配置文件 $cfg['servers'] 中数组的定义顺序决定。
为什么服务器列表不按字母排序?
phpMyAdmin 启动时直接遍历 $cfg['Servers'] 这个 PHP 数组,逐个读取并渲染为下拉菜单或链接列表。PHP 数组是有序的,但它的“序”是插入序(即你在 config.inc.php 里写进去的顺序),不是键名或 host 值的字典序。
常见错误现象:mysqli::real_connect(): (HY000/1045): Access denied for user 'root'@'localhost' 等连接失败提示,有时只是因为默认选中了排在第一位但配置错误的服务器——而你本想快速找到 prod-db-02 却要手动滚动十几项。
- 服务器列表不响应任何前端点击排序(没有 JS 排序逻辑)
- 即使给每个
$cfg['Servers'][$i]['verbose']设置了不同名称,也不影响渲染顺序 - 使用 Nginx + phpMyAdmin 多实例反向代理时,问题更明显:所有后端都注册在同一个
Servers数组里
手动排序:修改 config.inc.php 中的 $cfg['Servers'] 数组
这是唯一可靠、立即生效的方法。你需要把服务器定义块按 host 或 verbose 字段重新排列。
示例原始片段(乱序):
立即学习“PHP免费学习笔记(深入)”;
$cfg['Servers'][1]['host'] = 'z-bk-server'; $cfg['Servers'][2]['host'] = 'alpha-db'; $cfg['Servers'][3]['host'] = 'web-prod-mysql';
改为(按 host 字母升序):
$cfg['Servers'][1]['host'] = 'alpha-db'; $cfg['Servers'][2]['host'] = 'web-prod-mysql'; $cfg['Servers'][3]['host'] = 'z-bk-server';
- 必须保持索引连续且从
1开始(phpMyAdmin 不支持稀疏数组) - 不要用
ksort()或其他 PHP 函数动态排序——config.inc.php是纯配置文件,不执行逻辑代码 - 如果用了
verbose字段(如$cfg['Servers'][1]['verbose'] = 'Production Cluster'),建议按该字段排序,更符合运维习惯 - 修改后需重载 Web 服务或等待 OPcache 失效(若启用),不是刷新页面就能看到效果
自动化脚本辅助排序(适合 >10 台服务器)
当服务器数量较多时,手改易出错。可用 Python/PHP 脚本解析并重写 config.inc.php 中的 $cfg['Servers'] 块。
关键点:
- 只操作
$cfg['Servers'][X]开头到下一个非$cfg['Servers']行之间的内容 - 提取每组的
'host' => 'xxx'或'verbose' => 'xxx'作为排序键 - 保持原有缩进和注释(否则可能破坏语法)
- 运行前务必备份原
config.inc.php
一个最小可行命令行思路(Linux/macOS):
grep -n "\$cfg\['Servers'\]\[" config.inc.php | cut -d: -f1
再配合 awk 或 sed 截取块、排序、拼接——但注意单引号、方括号、转义在 shell 中极容易翻车,生产环境推荐用 PHP 自己写个小脚本处理。
真正麻烦的不是排序动作本身,而是每次新增服务器时都要重新插队、维护数组索引、同步测试环境配置——如果你发现团队里三个人改的 config.inc.php 总有顺序不一致,说明这里已经成了配置漂移的温床。



















