phpMyAdmin服务器组信息存储在config.inc.php中,位于安装根目录下,仅$cfg['Servers']数组中的host、verbose等键决定显示与连接,verbose为空则不显示。
导出服务器组信息时,phpmyadmin 配置文件在哪
phpmyadmin 的服务器组信息(即左侧导航里的“服务器”分组)不存于数据库,而是写在 php 配置文件里。关键路径是 config.inc.php —— 通常位于 phpmyadmin 安装根目录下,比如 /usr/share/phpmyadmin/config.inc.php 或 /var/www/html/phpmyadmin/config.inc.php。
注意:它不是 config.sample.inc.php,也不是 libraries/config.default.php。改错文件毫无效果。
-
$cfg['Servers'][$i]['host']、$cfg['Servers'][$i]['verbose']这类配置项才决定服务器是否出现在列表中 - 服务器组靠
$cfg['Servers'][$i]['pmadb']和phpmyadmin数据库里的pma__table_uiprefs等表协同实现,但分组逻辑实际由$cfg['Servers'][$i]['verbose']的值和前端 JS 渲染规则共同控制 - 如果你用的是“多服务器模式”,必须确保每个
$cfg['Servers'][$i]块都显式设置了'verbose',否则该条目不会显示在服务器列表里
手动备份服务器列表,只复制这几行就足够
不需要导整个 config.inc.php,更不要导数据库。真正影响服务器连接列表的,只有 $cfg['Servers'] 数组部分 —— 而且只关心其中几个键。
下面这段就是最小可运行备份(假设你有两个服务器):
$cfg['Servers'][1]['host'] = 'db-prod.example.com'; $cfg['Servers'][1]['port'] = '3306'; $cfg['Servers'][1]['verbose'] = '生产环境'; $cfg['Servers'][1]['auth_type'] = 'cookie'; $cfg['Servers'][2]['host'] = 'db-staging.example.com'; $cfg['Servers'][2]['port'] = '3307'; $cfg['Servers'][2]['verbose'] = '预发布环境'; $cfg['Servers'][2]['auth_type'] = 'cookie';
- 数组下标从
1开始(不是0),phpMyAdmin 默认跳过$cfg['Servers'][0] -
'verbose'是分组显示名,也是唯一决定它是否出现在左侧列表的字段;留空或缺失 = 不显示 - 如果用了
'auth_type' => 'http',记得同步备份 Apache/Nginx 的 Basic Auth 配置,仅改 PHP 文件无效
恢复时常见报错:Cannot load mysql extension 或空白页面
这不是服务器配置的问题,而是 PHP 环境缺失导致的——导入配置后 phpMyAdmin 启动失败,根本没走到读取 $cfg['Servers'] 这一步。
立即学习“PHP免费学习笔记(深入)”;
- 检查
php -m | grep mysql是否输出mysqli或mysqlnd;PHP 8+ 已彻底移除mysql扩展,必须用mysqli - 确认
config.inc.php末尾没有语法错误,比如漏掉分号、多加逗号、中文引号;PHP 解析失败会导致白屏,且无明确提示 - 如果原环境用了
$cfg['Servers'][$i]['controluser'],恢复到新环境前要先创建对应数据库用户,并赋予权限,否则登录后看不到“结构”“SQL”等标签页
想用 Web 界面一键导入?phpMyAdmin 本身不支持
phpMyAdmin 没有“导入服务器列表”的 UI 入口,所有所谓“通过设置 → 导入配置”的操作,本质都是让你手工编辑 config.inc.php。网上有些脚本声称能自动注入,实测风险极高:
- 直接
file_put_contents()追加会破坏原有配置顺序,可能让$cfg['blowfish_secret']失效 - 正则替换容易误伤注释或字符串内的相似文本(比如把
'host' => 'localhost'里的host当成关键词替换了) - 最稳妥的方式仍是:用 diff 工具比对旧版
config.inc.php和你的备份片段,人工合并
真正的复杂点不在操作步骤,而在于服务器分组名('verbose')和实际连接逻辑是分离的——你可以让十个服务器都叫“测试环境”,它们依然各自独立;但只要一个 'verbose' 写错大小写或空格,那个入口就从列表里消失了,还找不到报错提示。



















