必须手动为每个端口配置独立的$cfg['Servers'][$i]条目,因phpMyAdmin不自动探测端口且默认只连3306;#2002错误主因是port写成字符串、host用'localhost'触发socket、connect_type未设'tcp'、或配置文件路径错误。
必须手动在 config.inc.php 中为每个端口配一个 $cfg['servers'][$i] 条目,不能只改一个值就“自动适配”所有端口。
为什么改了 port 还连不上 #2002 错误
根本原因不是网络不通,而是 phpMyAdmin 没往你期望的端口发请求——它默认只连 3306,且不探测端口。常见卡点:
-
$cfg['Servers'][$i]['port']写成字符串:'3307'❌(PHP 当字符串处理,连接失败);必须是整数:3307✅ -
$cfg['Servers'][$i]['host']是'localhost':MySQL 会走 Unix socket,完全忽略port参数;要强制走 TCP,得改成'127.0.0.1' -
$cfg['Servers'][$i]['connect_type']是'socket'(默认值之一):此时port字段被直接跳过;必须显式设为'tcp' - 改的是错的配置文件:Ubuntu/Debian 的 phpMyAdmin 包把主配置放在
/etc/phpmyadmin/config.inc.php,Web 目录下的同名文件常被忽略
多个端口实例怎么填数组索引
每个端口对应一个独立服务器条目,索引必须从 1 开始、连续、不重复。漏掉或跳号会导致后续节点失效(尤其旧版本)。示例:
$cfg['Servers'][1]['host'] = '127.0.0.1'; $cfg['Servers'][1]['port'] = 3306; $cfg['Servers'][1]['connect_type'] = 'tcp'; $cfg['Servers'][1]['auth_type'] = 'cookie'; $cfg['Servers'][2]['host'] = '127.0.0.1'; $cfg['Servers'][2]['port'] = 3307; $cfg['Servers'][2]['connect_type'] = 'tcp'; $cfg['Servers'][2]['auth_type'] = 'cookie'; $cfg['Servers'][3]['host'] = '192.168.1.100'; $cfg['Servers'][3]['port'] = 3308; $cfg['Servers'][3]['connect_type'] = 'tcp'; $cfg['Servers'][3]['auth_type'] = 'cookie';
注意:$cfg['ServerDefault'] = 0; 必须存在,否则登录页不显示服务器切换下拉菜单。
本地多实例 vs 远程穿透端口的区别
填 host 和 port 的逻辑完全不同:
立即学习“PHP免费学习笔记(深入)”;
- 本地多实例(如
3306/3307):host填'127.0.0.1',port填实际监听端口 - 内网穿透后的远程实例(如
mydb.cpolar.io:12345):host必须填穿透域名或公网 IP('mydb.cpolar.io'),port填穿透服务映射的端口(12345),绝不能填'localhost'或'127.0.0.1' - 穿透场景下,
$cfg['Servers'][$i]['socket']必须删除或注释——残留会导致 phpMyAdmin 优先走 socket 而忽略host+port
最易被忽略的点:不同端口实例之间,auth_type 必须统一用 'cookie';若混用 'http',切换服务器时会因 Web 服务器无法透传凭据而直接失败。



















