$cfg['serverdefault']未设为0是下拉菜单不显示的首要原因;必须显式赋值为0才能启用多服务器选择,设为其他值或省略会导致跳转或不渲染,且服务器索引须从1开始连续递增。

为什么直接改 $cfg['Servers'] 不起作用
常见现象是:配了多个服务器,登录页下拉菜单却只显示一个,甚至空白。根本原因不是配置漏项,而是 $cfg['ServerDefault'] 没设为 0 —— 它必须显式写成数字 0,写成 false、null、空字符串或干脆省略,下拉框都不会渲染。phpMyAdmin 默认行为是“自动跳转”,不提供选择入口。
如何让非管理员看不到生产服务器选项
phpMyAdmin 本身没有 RBAC 权限控制,无法按角色隐藏下拉项。真正可行的做法是:把生产服务器的配置从全局 config.inc.php 移到独立文件,并通过 Web 服务器(Nginx/Apache)做路径级访问控制。
- 新建配置文件
/etc/phpmyadmin/config.prod.inc.php,只放生产服务器定义,且不包含$cfg['ServerDefault'] = 0 - 在主
config.inc.php中用if (isset($_SERVER['REMOTE_ADDR']) && in_array($_SERVER['REMOTE_ADDR'], $admin_ips)) { include 'config.prod.inc.php'; }动态加载 - Nginx 配置中限制该文件路径仅允许内网 IP 或跳板机访问:
location ~ /config\.prod\.inc\.php$ { deny all; }
这样普通用户连配置都读不到,自然不会出现在下拉列表里。
误配 auth_type 导致生产库“看似能选,实则连不上”
如果对生产服务器用了 auth_type = 'http',会出现连接时卡住、报错 #2002 Cannot log in to the MySQL server。这是因为 HTTP 认证由 Web 服务器接管,phpMyAdmin 无法感知用户选的是哪台 MySQL,也无法透传 SSL 参数(比如 require_secure_transport=ON 的实例必败)。
正确做法是统一用 auth_type = 'cookie',并确保:
- 每个生产服务器配置块里,
'user'和'password'留空(凭据由登录页输入) -
'host'和'port'必须准确,且 MySQL 服务端已授权该账号从 phpMyAdmin 所在机器 IP 连入 - 别在
$cfg['Servers'][1]和[2]之间跳号,索引必须从1开始连续递增
权限表没开,光配 phpMyAdmin 没用
配置文件写得再对,MySQL 服务端没放行,照样连不上。关键命令不是改 phpMyAdmin,而是进生产库执行:
GRANT SELECT, INSERT, UPDATE, DELETE ON `prod_db`.* TO 'pma_admin'@'10.10.20.5' IDENTIFIED BY 'strong_pwd'; FLUSH PRIVILEGES;
注意:'10.10.20.5' 是 phpMyAdmin 所在服务器的内网 IP,不是你本地浏览器的 IP。漏掉这步,前端一切正常,点“执行”后永远卡在连接中——这是最常被忽略的环节。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











