必须从 $i = 1 开始配置服务器,$cfg['Servers']索引须为连续正整数;若用0或跳号(如[1]后接[3]),会导致后续服务器不显示于登录下拉列表甚至页面空白,正确做法是删除孤立$i语句,用for/foreach循环从1起始生成配置。

config.inc.php 里必须从 $i = 1 开始配服务器
phpMyAdmin 的 $cfg['Servers'] 数组索引必须是连续正整数,且从 1 开始。写成 $i = 0 或跳着编号(比如先写 [1] 再写 [3]),会导致后续服务器不显示在登录页下拉列表里,甚至页面空白。
常见错误是复制默认配置后没删掉开头的 $i = 0;,或者在循环外手动写了两段配置但忘了递增 $i。正确做法是统一用循环控制索引:
- 注释或删除原文件中所有孤立的
$i = 0;、$i++;单行语句 - 用一个干净的数组定义服务器列表,再用
for或foreach遍历生成配置 - 确保循环变量从
1起始,且每次只加1
远程 host 必须填 IP 或域名,不能写 localhost
$cfg['Servers'][$i]['host'] 填 'localhost' 是最常踩的坑——这会让 phpMyAdmin 尝试连接自己本机的 MySQL,而不是你目标远程服务器。哪怕 phpMyAdmin 和 MySQL 在同一台机器,只要它是远程访问,host 就得填对方真实 IP 或可解析域名。
同时注意端口和 SSL:
立即学习“PHP免费学习笔记(深入)”;
- 如果远程 MySQL 不在默认
3306端口,必须显式设$cfg['Servers'][$i]['port'] = '3307'; - 若远程启用了强制 SSL,漏掉
$cfg['Servers'][$i]['ssl'] = true;会导致连接静默失败,页面卡住无报错 - 避免用
'%'当 host 值——那是 MySQL 用户授权时用的,不是 phpMyAdmin 配置项
auth_type 别用 config 存密码明文
设 $cfg['Servers'][$i]['auth_type'] = 'config'; 会把数据库密码明文写进 config.inc.php,一旦 Web 目录权限出问题或被误传到 Git,风险极高。生产环境应改用 'cookie' 或 'http'。
用 'cookie' 时,用户每次登录需手动输入账号密码;'http' 则走 HTTP Basic Auth,更轻量但需 Web 服务器配合。两者都不在配置文件里存敏感信息:
$cfg['Servers'][$i]['auth_type'] = 'cookie';- 删掉或清空
$cfg['Servers'][$i]['user']和$cfg['Servers'][$i]['password']字段 - 保留
$cfg['Servers'][$i]['host']和$cfg['Servers'][$i]['port']即可
MySQL 服务端权限和防火墙才是连不通的主因
phpMyAdmin 配置全对,但浏览器点登录后卡在“正在连接”或报 #2003 - Cannot connect to MySQL server?90% 是 MySQL 服务端没放开。
两个动作缺一不可:
- MySQL 用户必须授权来自该 IP:执行
CREATE USER 'pma'@'192.168.1.100' IDENTIFIED BY 'xxx';,然后GRANT SELECT,INSERT,UPDATE ON *.* TO 'pma'@'192.168.1.100';(别直接用'%') - 检查 MySQL 是否监听外网:
mysql -e "SHOW VARIABLES LIKE 'bind_address';",如果是127.0.0.1,要改/etc/mysql/mysql.conf.d/mysqld.cnf里的bind-address = 0.0.0.0并重启mysql服务 - Ubuntu 上确认
ufw放行了对应端口:sudo ufw allow from 192.168.1.100 to any port 3306
真正建立连接的是 PHP 进程,不是 phpMyAdmin 界面本身;它只是把你在表单里填的 host/port/user/password 转发给 MySQL。所以任何连不通的问题,优先查 MySQL 侧,而不是反复改 phpMyAdmin 配置。



















