phpmyadmin 用户偏好默认存于 mysql 的 pma__userconfig 表中,需启用高级功能并统一指向中心数据库;跨服务器同步必须共用该表及 controluser,且登录方式不能为 config 模式。
phpmyadmin 用户偏好存在哪?
默认情况下,phpMyAdmin 的用户偏好(比如主题、SQL 窗口大小、最近表、导航栏折叠状态)是存在本地 MySQL 的 pma__userconfig 表里——但前提是启用了「高级功能支持」且该表由当前实例的 phpmyadmin 数据库提供。它不是存 session 或 cookie,也不是写文件,所以跨服务器时天然不共享。
必须启用 pma__userconfig 并统一数据库后端
如果各台服务器连的是不同 MySQL 实例,pma__userconfig 表各自一份,偏好就永远不同步。真正可行的做法只有一种:让所有 phpMyAdmin 实例连接同一个中央 MySQL(哪怕只是专门用来存 phpMyAdmin 元数据的轻量实例),并确保:
-
$cfg['Servers'][$i]['controluser']和controlpass都指向这个中心库的管理账号 -
$cfg['Servers'][$i]['pmadb']统一设为phpmyadmin(或你自定义的库名) - 运行
create_tables.sql一次,把pma__userconfig等表建在中心库中 - 各实例的
config.inc.php中不要用$cfg['SaveDir']或$cfg['TempDir']来覆盖用户配置路径
用户表集中存储 ≠ 所有设置都自动同步
即使 pma__userconfig 共享了,以下内容仍不会同步:
-
cookie登录态本身(这是浏览器级的,和服务器无关) - 浏览器 localStorage 里的临时状态(如 SQL 查询历史未提交前的内容)
- 通过
$cfg['Servers'][$i]['auth_type'] = 'config'硬编码的用户,根本不会写入pma__userconfig - 如果某台服务器 PHP 的
session.save_path指向本地磁盘,那登录会话还是隔离的——得改用 Redis 或数据库存 session 才能真正“单点登录”
常见错误:以为改 config.inc.php 就能同步偏好
很多人试过直接复制 config.inc.php 到多台服务器,结果发现偏好还是各记各的。这是因为:
-
config.inc.php控制的是全局行为(比如是否启用控制用户、默认排序),不是用户级偏好 - 把
$cfg['UserprefsDisallow']设成true反而会让偏好彻底失效,连本地都存不了 - 误用
$cfg['Servers'][$i]['user']和密码硬编码,导致 phpMyAdmin 根本不尝试读写pma__userconfig - MySQL 账号没被授予对中心
phpmyadmin库的SELECT, INSERT, UPDATE权限,写入静默失败,但界面无提示
真正起作用的只有:中心库 + 正确 controluser + 启用 pma__userconfig + 用户用 cookie 或 http auth 登录(而非 config 模式)。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











