phpMyAdmin 5.2 多服务器配置必须使用从1开始的连续整数索引(如$cfg'Servers'、[2]),禁止索引为0或中断;每个配置块须含host、port、user、password、auth_type等完整字段,且阿里云RDS填内网地址、腾讯云CDB需显式设ssl=false。

phpMyAdmin 5.2 多服务器配置必须用 $i 从 1 开始递增
phpMyAdmin 5.2 不再接受索引为 0 的服务器配置,$cfg['Servers'][0] 会被直接忽略。所有服务器块必须使用从 1 开始的连续整数索引,否则登录页只显示一个选项,甚至报 Undefined index: 1 错误。
常见错误是沿用旧版写法,在 config.inc.php 里手动写 $cfg['Servers'][1]、$cfg['Servers'][2],但中间漏掉某个索引(比如跳过 3),或在条件判断里动态赋值导致索引不连续。phpMyAdmin 解析时一旦遇到断点就终止后续读取。
- 正确做法:统一用循环初始化,确保
$i = 1起步,每次$i++后再配置 - 不要在
if或foreach外部硬编码索引值 - 每个服务器块必须包含完整字段:
host、port、user、password、auth_type,缺一不可
阿里云 RDS 实例要填内网地址 + 端口,不能用公网地址
阿里云 RDS 默认关闭公网访问,即使你开了白名单并分配了公网地址,phpMyAdmin 通过 Web 服务端连接时仍应优先走内网。若 phpMyAdmin 部署在同地域 ECS 上,$cfg['Servers'][$i]['host'] 必须填 RDS 控制台「基本信息」页里的「内网地址」,例如 rds-xxx.mysql.rds.aliyuncs.com;port 填控制台显示的端口(通常不是 3306,而是类似 3306 或 3328 的自定义值)。
填错公网地址会导致连接超时,且错误信息不明确——浏览器只卡在登录页,Network 面板里 index.php 返回 500 或空响应,日志中可能看到 mysqli_real_connect(): (HY000/2002): Connection timed out。
立即学习“PHP免费学习笔记(深入)”;
- 确认 RDS 白名单已添加 ECS 所在安全组的内网 IP 段(如
172.16.0.0/12) - 检查 RDS 实例「网络类型」是否为 VPC,且与 ECS 在同一 VPC 和交换机下
- 不要在配置里写
http://或带路径的 host,$cfg['Servers'][$i]['host']只接受纯域名或 IP
腾讯云 CDB 需显式关闭 SSL,否则连接失败
腾讯云 CDB 默认强制 SSL 连接,而 phpMyAdmin 5.2 的 mysqli 扩展默认不携带客户端证书,直接连接会报 SSL connection error: protocol version mismatch 或静默失败。必须在对应服务器配置中加入 'ssl' => false 显式禁用。
这个参数不能放在全局,必须按实例单独设置。如果多个 CDB 实例混配,只给其中一个加 ssl => false,其余未加的仍会尝试 SSL 握手并中断。
- 在服务器配置块内添加:
$cfg['Servers'][$i]['ssl'] = false; - 同时确保
$cfg['Servers'][$i]['auth_type']设为'cookie'或'config',不能用'http'(CDB 不支持 HTTP Basic Auth) - 若你确实需要 SSL,得额外配置
ssl_key、ssl_cert、ssl_ca路径,但绝大多数 CDB 用户没必要走这一步
跨云厂商配置共存时 blowfish_secret 和 cookie 加密必须唯一
同一个 phpMyAdmin 实例管理阿里云 RDS 和腾讯云 CDB,本质仍是单入口多后端。但很多人忽略:$cfg['blowfish_secret'] 是整个 phpMyAdmin 实例的会话加密密钥,不是按服务器隔离的。如果该值太短(少于 32 字符)或重复使用旧值,会导致登录后跳转异常、Cookie 被拒绝、甚至部分服务器选项无法保存。
更隐蔽的问题是:当两个云厂商数据库都启用双因素认证(2FA)时,$cfg['TwoFactorAuth'] 全局开关只生效一次。若一个实例要求 TOTP,另一个不支持,phpMyAdmin 会在登录阶段直接报错退出,而不是让用户选服务器后再验。
-
$cfg['blowfish_secret']必须是 32 字节随机字符串,可用openssl rand -base64 24生成 - 避免在多服务器配置里重复定义
$cfg['Servers'][$i]['auth_type'] = 'config'并硬编码密码——这等于把 CDB 密码明文写进文件,极不安全 - 生产环境建议统一用
'cookie'认证,靠 Web 层反向代理或 Nginx auth_basic 做第一道访问控制



















