必须用循环生成$cfg['servers']数组,索引从1开始连续,避免跳号或重复;必须设$cfg['serverdefault']=0,auth_type统一用'cookie',否则新服务器不显示在登录页下拉列表。
config.inc.php里必须用循环生成$cfg['servers']数组
硬编码多个$cfg['servers'][1]、$cfg['servers'][2]看似直觉,但极易因索引跳号、重复或语法错误导致后续项完全不加载——phpmyadmin遍历$cfg['servers']时遇到第一个空值或解析失败就中止。官方推荐且最稳的方式是定义一个$hosts数组,再用foreach或for动态填充$cfg['servers'][$i]。
常见错误现象:只显示一个服务器、下拉列表为空、页面白屏。根本原因几乎全是$cfg['Servers']索引没从1开始连续,或某一项里漏了host、auth_type等必需键。
- 索引必须从
1开始,不能用0;$i必须严格递增,不能在 if/else 里分段写 -
$hosts数组下标也建议从1开始,避免 count() 和循环错位 - 每个服务器块必须包含
host(或socket)、auth_type、verbose(可选但推荐),否则可能被跳过 - 别在配置块里写注释行(如
// First server)后直接跟 PHP 代码,PHP 会把注释当字符串拼进数组,引发语法错误
auth_type必须设为'cookie',绝不要用'http'
auth_type = 'http'在多服务器场景下基本不可用。它把认证交给 Web 服务器(Apache/Nginx),phpMyAdmin 拿不到用户选的是哪台 MySQL,所有服务器只能共用同一套 HTTP 凭据,且无法透传 SSL 参数。一旦目标 MySQL 启用了 require_secure_transport=ON,连接必然失败。
正确做法是统一用 auth_type = 'cookie',登录页靠下拉列表选服务器,凭据由 session 管理,切换服务器无需退出重登。
-
auth_type = 'config'仅限内网可信环境,因为user和password明文写在文件里 - 若用
'cookie',$cfg['Servers'][$i]['user']和$cfg['Servers'][$i]['password']可留空,实际凭据由登录时输入决定 - 务必设置
$cfg['LoginCookieValidity'] = 86400;,否则 cookie 过期太快,频繁掉线
远程服务器要提前开权限,不能只改 config.inc.php
phpMyAdmin 配置只是“客户端”一端,MySQL 服务端必须允许对应账号从 phpMyAdmin 所在机器的 IP 远程登录。光改 config.inc.php,不授权,#2002 Cannot log in to the MySQL server 错误照常出现。
典型授权命令(在目标 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 - 如果 phpMyAdmin 跑在 Docker 或 Nginx 反代后,得填容器网关或反代服务器 IP
- 禁止用
'%'@'%',最小权限原则:只放开必要 IP 和必要库表 - 确认 MySQL 的
bind_address没锁死127.0.0.1,否则拒绝所有远程连接
socket 连接优先于 host+port,本地多实例别填错
如果远程服务器其实是同一台物理机上的多实例(比如 3307 和 3308),且启用了 Unix socket,优先填 socket 路径而不是 host+port。否则可能绕过 socket 层权限校验,连上错实例,甚至触发 SELinux 拒绝。
例如本地 MariaDB 多实例常用 socket 路径:/var/run/mysqld/mysqld-3307.sock、/var/run/mysqld/mysqld-3308.sock。
- 填了
socket就不用填host和port,两者互斥 -
socket路径必须真实存在,且 phpMyAdmin 进程有读取权限(常被 SELinux 或文件权限卡住) - 用
mysql --socket=/path/to/socket -u user -p先手动验证 socket 是否通,比在 phpMyAdmin 里试错快得多
配置生效后新服务器仍不显示,大概率是 PHP 解析 config.inc.php 时挂了。打开 PHP 错误日志,搜 Parse error 或 unexpected,90% 是少了个分号、括号不匹配,或者中文标点混入。这种细节不报在网页上,只记在日志里。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











