必须将$cfg['Servers']索引从1开始连续递增,且设$cfg['ServerDefault']=0、auth_type='cookie',否则phpMyAdmin遍历数组时中止加载,服务器不显示在登录页下拉列表。
$cfg['servers'] 数组必须用循环生成,索引从 1 开始连续递增,否则新服务器根本不会出现在登录页下拉列表里。
为什么手动写 $cfg['Servers'][1]、$cfg['Servers'][2] 容易失效
看似简单,但只要漏掉一个分号、索引跳号(比如写了 [1] 和 [3])、或某一项里缺了 host 或 auth_type,phpMyAdmin 就会在遍历数组时直接中止加载——后续所有服务器配置全丢,只剩第一个或干脆白屏。
-
$cfg['Servers'][0]是非法索引,会报“无效的服务器索引: 0” - 复制粘贴时容易把注释行(如
// server 2)留在数组中间,PHP 会把它当字符串值塞进数组,导致语法错误 - 硬编码多个块还容易在改配置时覆盖前一个,比如两次都用了
$cfg['Servers'][1]
必须设 $cfg['ServerDefault'] = 0 才能显示下拉菜单
这个开关控制 phpMyAdmin 是否启用多服务器选择界面。默认值不是 0,而是未定义或 1,此时它只显示单个服务器登录框。
- 必须是整数
0,不能是字符串"0"、布尔false或空值 - 如果用了
auth_type = 'config'的服务器,它不会出现在下拉列表里——那是自动连接模式,不参与手动切换 - 浏览器缓存可能让旧 JS 脚本没加载新服务器列表,强制刷新(Ctrl+Shift+R)或清空
cache/目录再试
auth_type 只能用 'cookie',别碰 'http'
auth_type = 'http' 在多服务器场景下基本等于废掉:Web 服务器做认证,phpMyAdmin 拿不到你选的是哪台 MySQL,所有实例被迫共用同一套 HTTP 凭据,且无法透传 SSL 参数。一旦目标 MySQL 开了 require_secure_transport=ON,连接必挂。
- 统一用
auth_type = 'cookie',登录页靠下拉选服务器,凭据走 session 管理 - 若用
'cookie',$cfg['Servers'][$i]['user']和$cfg['Servers'][$i]['password']可留空,实际凭据由登录时输入决定 - 务必加
$cfg['LoginCookieValidity'] = 86400;,否则 cookie 十几分钟就过期,频繁掉线
远程服务器要提前开权限,光改 config.inc.php 没用
phpMyAdmin 配置只是客户端一端,MySQL 服务端必须允许对应账号从 phpMyAdmin 所在机器的 IP 远程登录。否则必现 #2002 Cannot log in to the MySQL server。
立即学习“PHP免费学习笔记(深入)”;
- 在目标 MySQL 中执行授权命令,例如:
GRANT ALL PRIVILEGES ON *.* TO 'pma_user'@'192.168.1.100' IDENTIFIED BY 'strong_password'; FLUSH PRIVILEGES; - 注意
'pma_user'@'192.168.1.100'中的 IP 是 phpMyAdmin 所在服务器的出口 IP,不是你本地电脑的 IP - 内网穿透后,
host必须填穿透地址(如mydb.cpolar.io),不能写localhost;port必须是穿透后映射的端口,且不能带单位或空格
索引连续性、$cfg['ServerDefault'] = 0、auth_type = 'cookie' 这三点漏掉任何一项,服务器就不会出现在下拉列表里——不是功能没生效,是 phpMyAdmin 根本没读到那条配置。



















