所有服务器的phpMyAdmin必须共用同一MySQL控制库,controluser需有完整权限且auth_type设为'cookie',控制库表结构须统一并使用InnoDB引擎,配置文件修改后需确认生效位置。
必须让所有服务器的 $cfg['servers'][$i]['pmadb']、$cfg['servers'][$i]['controluser'] 和 $cfg['servers'][$i]['controlpass'] 都指向同一个 mysql 实例上的同一数据库,并确保该 controluser 有完整权限——否则高级功能(如关系视图、用户偏好同步)会静默失效。
controluser 权限不足是最常见的失败原因
即使 pma__* 表存在、路径配置正确,只要 controluser 没被授予全部必要权限,phpMyAdmin 就不会启用高级功能,也不会报错提示。
- 登录目标 MySQL,执行
SELECT User, Host FROM mysql.user WHERE User = 'pma';,确认该用户能从所有 phpMyAdmin 所在服务器的 IP 连入(比如'pma'@'%'或'pma'@'192.168.5.%') - 执行
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `phpmyadmin`.* TO 'pma'@'%'; FLUSH PRIVILEGES;—— 不能只给USAGE - 如果用的是域名或内网 DNS,检查 MySQL 是否启用了
skip-name-resolve;开启时 host 匹配只认 IP,DNS 解析失败会导致连接被拒
控制数据库名和表结构必须严格统一
不同 phpMyAdmin 版本生成的 pma__* 表字段可能不兼容。混用 4.x 和 6.x 实例连同一个控制库,会导致部分功能(如 SQL 历史、跟踪日志)直接不可见。
-
$cfg['Servers'][$i]['pmadb']必须大小写完全一致(Linux 下敏感),默认是phpmyadmin,不能写成PhpMyAdmin或PHPMYADMIN - 所有服务器应统一升级到 phpMyAdmin 5.2.1+ 或 6.0+,避免跨大版本混用
- 用
phpmyadmin/sql/create_tables.sql脚本重刷控制库,不要手动建表或复制结构;执行后检查各表引擎是否均为InnoDB(特别是pma__bookmark和pma__history)
用户偏好同步依赖 pma__userconfig + cookie 登录模式
共享控制库只是前提,真正让偏好“同步”起来,还需要登录方式和 session 存储配合。硬编码 auth_type = 'config' 或本地文件存 session,都会让偏好变成各自为政。
- 所有服务器的
$cfg['Servers'][$i]['auth_type']必须设为'cookie'——'config'模式下根本不会读写pma__userconfig -
pma__userconfig表必须存在于你指定的pmadb中,且controluser对它有SELECT/INSERT/UPDATE权限 - 若要真正实现“单点登录”,PHP 的
session.save_handler不能是files,得切到redis或数据库;否则登录态仍是隔离的
最容易被忽略的一点:改完 config.inc.php 后,务必确认你编辑的是实际被加载的那个文件——XAMPP 用户常误改 config.sample.inc.php,Docker 环境常因挂载路径错误导致配置未生效。运行 php -r "echo ini_get('include_path');" 查 PHP 加载路径,再用 find / -name 'config.inc.php' 2>/dev/null 定位真实配置位置。
立即学习“PHP免费学习笔记(深入)”;



















