必须用循环动态生成$cfg['Servers']数组,索引从1开始连续,且$cfg['ServerDefault']=0;手动硬编码易因索引跳号、语法错误或空值导致phpMyAdmin遍历中止,后续服务器完全不加载。
能配,但必须用循环动态生成 $cfg['servers'] 数组,索引从 1 开始连续,且 $cfg['serverdefault'] = 0;硬编码多个 $cfg['servers'][1]、$cfg['servers'][2] 极易因索引断档或语法错误导致后续服务器完全不加载。
为什么手动写 $cfg['Servers'][1]、$cfg['Servers'][2] 容易失效
phpMyAdmin 遍历 $cfg['Servers'] 时,遇到第一个空值、语法错误(如漏分号、引号不闭合)或索引跳号(比如只有 [1] 和 [3]),就直接中止加载——后面所有服务器都不会出现在登录页下拉列表里。常见现象:只显示一个服务器、下拉为空、页面白屏。
- 索引必须严格从
1开始递增,不能用0或中间跳号 - 每个服务器子数组必须含
'host'(或'socket')和'auth_type',缺一不可 - 别在配置块里写
// First server这类注释后紧跟 PHP 代码,PHP 会把注释当字符串拼进数组,引发解析失败
正确写法:用 $hosts 数组 + foreach 动态填充
定义一个干净的 $hosts 列表,再用循环统一赋值,避免手误。推荐从下标 1 开始,和 $cfg['Servers'] 索引对齐:
$hosts = [
1 => ['host' => '192.168.1.10', 'port' => 3306],
2 => ['host' => 'mydb.cpolar.io', 'port' => 12345],
3 => ['socket' => '/var/run/mysqld/mysqld.sock'],
];
<p>foreach ($hosts as $i => $h) {
$cfg['Servers'][$i]['host'] = $h['host'] ?? '';
$cfg['Servers'][$i]['port'] = $h['port'] ?? '';
$cfg['Servers'][$i]['socket'] = $h['socket'] ?? '';
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['verbose'] = $h['host'] ?? 'Local socket';
}-
$cfg['Servers'][$i]['auth_type']必须设为'cookie','http'在多服务器场景下不可用(Web 服务器无法透传凭据到不同 MySQL 实例) - 若用
'cookie','user'和'password'可留空,由登录时输入决定 - 务必加
$cfg['LoginCookieValidity'] = 86400;,否则 session 过期太快,频繁掉线
内网穿透或远程服务器连不上?先查这三处
填错 host 或 port 是 #2002 Cannot log in to the MySQL server 的主因,错误提示却不指明哪台出问题:
-
host写成'localhost'或'127.0.0.1':这是 phpMyAdmin 所在机器的本地回环,不是穿透地址;必须填穿透服务给你的公网域名或 IP,如'mydb.cpolar.io' -
port写成字符串带空格或协议,如'3307/tcp':PHP 解析失败后静默归零,最终连到默认3306—— 表面连上,实则连错实例 - 残留
'socket'字段:如果之前配过本地 socket,这个字段没删干净,phpMyAdmin 会优先走 socket 而忽略host+port,直接删掉或注释掉整行
MySQL 服务端权限没开,光改 config.inc.php 没用
phpMyAdmin 配置只是客户端一端,MySQL 服务端必须显式授权对应账号从 phpMyAdmin 所在机器的 IP 远程登录。否则无论配置多完美,#2002 错误照常出现。
立即学习“PHP免费学习笔记(深入)”;
- 在目标 MySQL 中执行授权命令(注意替换用户名、密码和来源 IP):
GRANT ALL PRIVILEGES ON *.* TO 'pma_user'@'192.168.1.100' IDENTIFIED BY 'strong_password'; FLUSH PRIVILEGES;- 若 MySQL 启用了
require_secure_transport=ON,需确保连接走 SSL,而auth_type = 'cookie'下 phpMyAdmin 不自动透传 SSL 参数,得在配置中显式加$cfg['Servers'][$i]['ssl'] = true;
最易被忽略的是索引连续性与 $cfg['ServerDefault'] = 0 的组合——少一个分号、多一个空格、索引从 2 开始,都足以让整个多服务器配置静默失效。



















