phpmyadmin需手动配置每个mysql实例,$i须从1连续递增,host填穿透域名及端口,禁用socket,auth_type必须为'cookie';nginx仅转发php请求,不参与数据库连接。

phpMyAdmin 本身不支持自动发现 MySQL 实例,config.inc.php 中必须手动为每台 MySQL(含内网穿透地址)逐条配置 $cfg['Servers'][$i],Nginx 只负责转发 PHP 请求,完全不参与数据库连接逻辑。
config.inc.php 中必须显式添加每个 MySQL 实例
phpMyAdmin 启动时只读取 config.inc.php 已定义的 $cfg['Servers'] 条目,删掉、注释错位置或漏写都会导致下拉列表里不显示对应服务器。
-
$i必须从1开始连续递增,每次新增前先执行$i++;写成$i = 2或跳号(如跳过3)会导致后续配置被忽略 - 每台实例需独立指定
host、port、auth_type、user、password(或留空由登录页输入) - 若走内网穿透(如
db-prod.cpolar.io:3307),host填域名,port填穿透端口——别填localhost或127.0.0.1,否则连的是本地 MySQL - 务必删掉或注释掉残留的
$cfg['Servers'][$i]['socket']行,否则 phpMyAdmin 会优先走 socket 连接,直接无视host+port
auth_type 必须设为 'cookie',禁用 'http'
auth_type = 'http' 在 Nginx 反代场景下几乎必然失败,不是配置问题,而是架构不兼容。
-
auth_type = 'http'依赖 Nginx 做 HTTP Basic Auth,但 phpMyAdmin 拿不到你输的凭据去匹配不同 MySQL 实例——所有实例共用一套用户名密码,无法区分“连测试库还是生产库” - 穿透服务(frp/ngrok/cpolar)通常不透传或会剥离
Authorization请求头,认证直接被拒 -
auth_type = 'cookie'是唯一可靠选择:登录页下拉选服务器 → 输入对应账号密码 → 凭据存 session → 安全且可区分实例
Nginx 配置只需确保 PHP 正常执行,不代理 MySQL
Nginx 在这里只做一件事:把 /phpmyadmin/ 路径下的请求正确转发给 PHP-FPM。它不解析 MySQL 协议,也不参与数据库路由。
- 确认
location ~ \.php$块中fastcgi_pass指向正确的 PHP-FPM 地址(如127.0.0.1:9000或unix:/var/run/php/php8.1-fpm.sock) - 不要在 Nginx 层用
upstream做 MySQL 负载均衡——MySQL 不是 HTTP 协议,Nginx 默认不支持 MySQL 代理 - 如果页面报 502 或空白,优先检查 PHP-FPM 是否运行、
fastcgi_param SCRIPT_FILENAME路径是否拼错、以及open_basedir是否限制了/usr/share/phpMyAdmin
最容易被忽略的是 $i 的连续性与 socket 字段残留——哪怕只多写一行 $cfg['Servers'][2]['socket'] = '/tmp/mysql.sock';,第二台服务器就可能永远不出现在下拉菜单里。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











