能,但需在config.inc.php中为每个端口显式配置独立服务器条目,索引从1开始连续递增,host用127.0.0.1、禁用socket、统一mysqli扩展、认证插件对齐为mysql_native_password、auth_type设为cookie,并确保MySQL bind-address为127.0.0.1或0.0.0.0。

能,但必须在 config.inc.php 中为每个端口显式定义一个独立服务器条目;phpMyAdmin 不会自动扫描本地端口,也不会根据端口号推断实例存在。
配置多个 $cfg['Servers'][$i] 条目时索引必须连续且从 1 开始
常见错误是手动写 $i = 0 或跳号(如直接写 $cfg['Servers'][2] 却漏掉 [1]),这会导致后续配置被忽略或登录页只显示一个选项。
- 正确做法:用
$i++控制递增,且每个块前都执行一次 - 错误示例:
$i = 2;→ 后续所有$cfg['Servers'][$i]都写进索引 2,覆盖前一个 - 索引 0 是非法值,phpMyAdmin 会报 “无效的服务器索引: ‘0’”
host 填 127.0.0.1,别填 localhost
填 localhost 会让 mysqli 尝试走 Unix socket 连接,而多实例通常禁用 socket 或各用不同 socket 文件,结果就是连错实例或报错 #2002。
- 统一用
$cfg['Servers'][$i]['host'] = '127.0.0.1'; - 明确指定端口:
$cfg['Servers'][$i]['port'] = '3306';、'3307'、'3308'等 - 删掉或注释掉
$cfg['Servers'][$i]['socket']行,避免干扰
MySQL 5.7 和 8.0 实例共存时,认证插件必须对齐
MySQL 8.0 默认用 caching_sha2_password,而 phpMyAdmin 的 mysqli 扩展(尤其旧版本)可能不兼容,导致登录失败或空白页。
立即学习“PHP免费学习笔记(深入)”;
- 对所有实例用户执行:
ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pass'; FLUSH PRIVILEGES; - 确认
$cfg['Servers'][$i]['extension'] = 'mysqli';(不是mysql或pdo) - 不要设
auth_type = 'config':它会把密码硬编码进配置,无法区分实例;必须用'cookie'
Nginx 和 MySQL 实例端口之间没有映射关系
Nginx 只代理 PHP 请求,不转发 MySQL 流量。你访问 /phpmyadmin/ 走的是 HTTP,而 phpMyAdmin 连 127.0.0.1:3307 是 PHP 进程发起的 TCP 连接,两者完全隔离。
- 只要 PHP 进程能访问对应端口(如
telnet 127.0.0.1 3307通),Nginx 配置就无需改动 - 别在 Nginx 的
upstream里加 MySQL 地址——那没用,Nginx 默认不支持 MySQL 协议代理 - 若页面报 502,问题一定出在 PHP-FPM 或 MySQL 网络连通性,和多实例配置无关
最容易被忽略的一点:每个实例的 bind-address 必须设为 127.0.0.1 或 0.0.0.0,不能是空或 localhost;否则即使端口开着,PHP 也连不上。



















