必须直接编辑phpMyAdmin根目录下的config.inc.php,用$i++从1开始连续定义$cfg'Servers'、$cfg['Servers'][2]等,host填穿透公网地址、port用数字、删掉socket字段、auth_type统一设为'cookie',并确保$cfg['ServerDefault']=0启用下拉菜单。
直接改 config.inc.php,别碰 setup 页面或 config.default.php
phpmyadmin 不会自动发现新 mysql 实例,所有服务器都必须硬编码进 config.inc.php。用浏览器访问 /phpmyadmin/setup 生成的配置文件常有兼容性问题(尤其新版),且生成后仍需手动调整 host/port —— 不如直接编辑。确保你操作的是 phpmyadmin 根目录下的 config.inc.php,不是 libraries/config.default.php 或系统级 /etc/phpmyadmin/config.inc.php(后者可能被包管理器覆盖)。
$i++ 必须在每个服务器块前,索引从 1 开始
phpMyAdmin 要求 $cfg['Servers'] 的键是连续正整数,从 1 起。常见错误是把第二个服务器写成 $cfg['Servers'][2] 却没重置 $i,或让 $i 在循环外被意外修改。正确做法是:
- 确认文件开头有
$i = 0;(很多config.sample.inc.php已自带) - 第一台服务器前有
$i++;→ 对应$cfg['Servers'][1] - 第二台服务器前再写一次
$i++;→ 对应$cfg['Servers'][2] - 不能跳过
$i++直接写$cfg['Servers'][2],否则 phpMyAdmin 会忽略该条目
示例片段:
$i = 0; <p>/<em> First server </em>/ $i++; $cfg['Servers'][$i]['auth_type'] = 'cookie'; $cfg['Servers'][$i]['host'] = 'localhost'; $cfg['Servers'][$i]['port'] = '3306';</p><p>/<em> Second server </em>/ $i++; $cfg['Servers'][$i]['auth_type'] = 'cookie'; $cfg['Servers'][$i]['host'] = 'mydb.cpolar.io'; // ← 内网穿透地址,不是 localhost $cfg['Servers'][$i]['port'] = 12345; // ← 数字,不是字符串 $cfg['Servers'][$i]['connect_type'] = 'tcp';
内网穿透场景下,host 和 port 填错就报 #2002
穿透后连不上,90% 是因为 host 还写着 'localhost' 或 '127.0.0.1',或者 port 多了斜杠、空格、引号。这些字段 PHP 会静默处理,但结果不可控:
-
host必须填穿透服务给你的公网地址,比如'abc123.cpolar.io'或'203.0.113.45',绝不能是本地地址 -
port写成'12345'没问题(PHP 自动转整型),但写成'12345/tcp'或' 12345 '会导致解析失败,最终 fallback 到 3306 —— 表面“连上了”,实际连的是另一台库 - 删掉或注释掉
$cfg['Servers'][$i]['socket'],它和host+port冲突,残留会导致走 socket 而忽略穿透地址 - 加超时设置防 DNS 卡住:
$cfg['Servers'][$i]['connect_timeout'] = 30;
auth_type 必须是 'cookie',别设成 'config' 或 'http'
穿透环境下,auth_type = 'http' 基本不可用:Web 服务器(Nginx/Apache)处理 HTTP Auth 后,phpMyAdmin 拿不到你输的用户名,无法匹配不同实例的凭据;穿透服务也大概率剥离 Auth 头。而 auth_type = 'config' 虽能免密登录,但所有服务器共用同一套账号密码,你根本分不清当前连的是测试库还是生产库。
立即学习“PHP免费学习笔记(深入)”;
坚持用 'cookie':
- 登录页会出现服务器下拉菜单,选完再输对应凭据,安全且可控
- 每台服务器可配独立用户/密码,靠 session 隔离
- 若想默认选第二台,加一行:
$cfg['ServerDefault'] = 2;
最易被忽略的是 $i 的连续性和 socket 字段的残留 —— 这两个点不清理,哪怕其他全对,第二台服务器也不会出现在下拉菜单里。



















