config认证模式下多服务器必须明文写死账号密码:每个$cfg['Servers'][$i]['user']和$cfg['Servers'][$i]['password']均需填具体值且索引从1开始连续递增,漏配或断号将导致连接失败或配置失效。
config认证模式下多服务器必须明文写死账号密码
用 auth_type = 'config' 时,每个服务器的 $cfg['servers'][$i]['user'] 和 $cfg['servers'][$i]['password'] 都得填具体值,不能留空。phpmyadmin 启动时就直接拿这些凭据连上去,不弹登录框。
- 所有服务器配置块里都必须包含
user和password,漏一个就会连接失败,报错#2002 Cannot log in to the MySQL server -
$cfg['ServerDefault']设为某个索引(比如1),访问首页就自动跳转到对应服务器,但其他服务器仍会出现在下拉列表里 - 密码明文存在文件里,只适合内网可信环境;生产环境严禁用,尤其不能把 root 密码写进去
- 不同服务器可以用同一套账号(如都用
pma_user),但前提是该账号在每台 MySQL 上都有对应权限且允许从 phpMyAdmin 所在机器 IP 登录
索引必须从 1 开始连续递增,否则 config 模式直接失效
哪怕只配两个服务器,$cfg['Servers'][1] 和 $cfg['Servers'][2] 中间也不能跳号、不能重复、不能缺项。phpMyAdmin 解析 $cfg['Servers'] 数组时,遇到第一个空键或语法错误就停,后面全丢弃。
- 别手写
$cfg['Servers'][1]、$cfg['Servers'][3]——索引断了,3及之后的配置全不生效 - 别在数组里混写注释行(如
// Server A)后紧跟赋值语句,PHP 会把注释当字符串拼进数组,导致解析失败 - 推荐用循环生成:先定义
$hosts = ['192.168.1.10', '192.168.1.11'],再for ($i = 1; $i
config 认证无法切换服务器,必须靠 URL 路径隔离
auth_type = 'config' 是静态绑定的,页面加载即连指定服务器,下拉列表只是摆设——选别的服务器不会重新认证,也不会跳转,点完没反应。
- 想真正支持多服务器切换,只能起多个 phpMyAdmin 实例,每个实例配独立
config.inc.php+ 独立子路径(如/phpmyadmin-server1/、/phpmyadmin-server2/) - Web 服务器(Nginx/Apache)需按路径分发请求,确保每个实例读自己的配置文件
- 别指望靠改
$cfg['ServerDefault']实现运行时切换,它只影响首次加载,默认连哪台,之后就固定了
MySQL 服务端权限必须提前配好,config 模式不解决授权问题
光在 config.inc.php 里写对 host、user、password 不够。MySQL 必须允许该账号从 phpMyAdmin 所在机器的 IP 连接,否则照样报错 #2002。
- 在目标 MySQL 执行授权命令,例如:
GRANT ALL ON *.* TO 'pma_user'@'192.168.1.100' IDENTIFIED BY 'strong_password'; FLUSH PRIVILEGES; - 注意
'pma_user'@'192.168.1.100'中的 IP 是 phpMyAdmin 所在机器的出口 IP,不是你本地浏览器的 IP - 如果 MySQL 开了
require_secure_transport=ON,而 phpMyAdmin 实例没配 SSL,连接会静默失败,日志里可能只显示超时
最容易被忽略的是:config 模式下,你根本没法在同一个 phpMyAdmin 页面里“切换”服务器——它不是设计来干这事的。真要多服务器管理,要么用 cookie 模式配独立 blowfish_secret 和 cookie_path,要么就老老实实跑多个实例。
立即学习“PHP免费学习笔记(深入)”;



















