不能靠手写$cfg['Servers'][1]、[2]等硬编码实现跨网段多实例管理,必须用循环动态生成数组,确保索引从1连续递增、每个实例含host或socket及auth_type=>'cookie',并设$cfg['ServerDefault']=0和$cfg['LoginCookieValidity']=86400。

直接说结论:不能靠改 config.inc.php 里一堆手写的 $cfg['Servers'][1]、$cfg['Servers'][2] 来实现跨网段多实例管理——90% 的失败都源于此,索引跳号、漏分号、注释混入数组、auth_type 用错,都会导致后续服务器彻底不显示。
为什么硬编码 $cfg['Servers'] 数组会失效
phpMyAdmin 启动时遍历 $cfg['Servers'],从下标 1 开始逐个加载。一旦遇到:
• 索引断档(比如只有 [1] 和 [3],缺 [2])
• 某个子数组里缺 'host' 或 'auth_type'
• 行末漏了分号、引号没闭合、注释写在数组赋值中间
——它就立刻中止,后面所有服务器都不会出现在登录页下拉列表里。现象就是:只看到一个服务器、下拉为空、甚至整个 phpMyAdmin 白屏。
必须用循环动态生成 $cfg['Servers'] 数组
把所有 MySQL 实例信息收进一个干净的 $hosts 数组,再用 foreach 统一填充,杜绝手误。关键点:
-
$cfg['ServerDefault'] = 0—— 强制用户每次登录都手动选服务器,避免默认连错 - 索引必须从
1开始连续递增,和$hosts键对齐 - 每个实例至少提供
'host'(或'socket')和'auth_type' => 'cookie' -
'user'和'password'留空,由登录页输入;填死会导致跨网段凭据泄露风险 - 加
$cfg['LoginCookieValidity'] = 86400,否则频繁掉线
示例片段(放在 config.inc.php 底部):
安装、修复、更新或打包一个基于 Python 和 PyMySQL 实现的 Windows `mysql` 命令。适用于用户希望在 PowerShell/CMD 中输入 `mysql` 时重定向到 Python 实现、需要交互式输入 MySQL 连接信息、需要同步到当前用户本地 bin 目录,或需要将该能力封装成可公开复用的 Codex skill。
立即学习“PHP免费学习笔记(深入)”;
$cfg['ServerDefault'] = 0;
$cfg['LoginCookieValidity'] = 86400;
<p>$hosts = [
1 => ['host' => '10.1.20.5', 'port' => 3306, 'verbose' => 'Prod DB'],
2 => ['host' => 'db-prod.cpolar.io', 'port' => 12345, 'verbose' => 'Cloud DB'],
3 => ['socket' => '/var/run/mysqld/mysqld.sock', 'verbose' => 'Local socket'],
];</p><p>foreach ($hosts as $i => $h) {
$cfg['Servers'][$i]['host'] = $h['host'] ?? '';
$cfg['Servers'][$i]['port'] = $h['port'] ?? 3306;
$cfg['Servers'][$i]['socket'] = $h['socket'] ?? '';
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['verbose'] = $h['verbose'] ?? $h['host'];
}
跨网段连不上?先查这三处
错误提示 #2002 Cannot log in to the MySQL server 不会告诉你具体是哪台挂了,排查顺序如下:
-
host值不能写localhost或127.0.0.1—— 这是指 phpMyAdmin 所在机器自身,不是你的远程 MySQL;必须填穿透域名(如db-prod.cpolar.io)或真实公网 IP - 目标 MySQL 必须显式授权给 phpMyAdmin 所在服务器的 IP,例如:
GRANT ALL ON *.* TO 'root'@'192.168.50.100' IDENTIFIED BY 'pwd';,不能只开@'%'(部分版本默认禁用) - CentOS 防火墙(
firewalld)和 SELinux 要放行出站连接:sudo setsebool -P httpd_can_network_connect_db 1,否则 Apache 进程被 SELinux 拦截
最易忽略的是:跨网段场景下,auth_type 绝对不能设成 'http' —— Web 服务器无法把 HTTP Basic Auth 凭据透传到不同后端 MySQL 实例,强制用 'cookie' 是唯一可靠路径。


















