phpMyAdmin的UI设置(主题、字体、导航栏状态等)仅存于浏览器localStorage,跨域名或路径即隔离,无法通过config.inc.php或pma__userconfig表同步;唯一可靠方案是统一访问入口或手动操作localStorage。
因为 phpmyadmin 的 ui 个性化设置(主题、字体、导航栏折叠状态等)默认存在浏览器 localstorage 里,不是服务器端数据,跨服务器访问时域名或路径稍有不同就完全隔离——根本不存在“保存到服务器再同步”这回事。
为什么改了 config.inc.php 也同步不了 UI 设置
很多人误以为统一配置 $cfg['Servers'] 或共享 pma__userconfig 表就能让界面偏好一致,但这是两套完全独立的机制:
-
pma__userconfig只存服务端级偏好:比如默认排序、SQL 窗口高度、是否启用 Designer,它由 PHP 写入 MySQL,受controluser权限控制 -
localStorage存纯前端状态:比如当前选中的 theme、navigation_collapsed、fontsize,它不发请求、不走 PHP、不依赖数据库 - 即使所有服务器都连同一个中心库,
https://db1.example.com/phpmyadmin/和https://db2.example.com/phpmyadmin/的localStorage互不可见
导入 config.json 后没生效的常见卡点
你点了“导入配置”,页面提示成功,但主题没变、导航栏还是展开的——大概率栽在这几个地方:
- 导入必须在**同源页面**操作:
https://db.example.com/phpmyadmin/导出的,只能在完全相同的 URL 下导入;子路径差一个/或协议从http换成https都会失败 - 导入只是合并 JSON,不强制刷新 UI:比如
navigation_collapsed值变了,但 DOM 还没重绘,得手动拖动一次导航栏宽度,才会触发持久化写入 - 浏览器隐私策略干扰:启用了“防止网站跟踪”或在无痕窗口中操作,
localStorage实际是内存临时存储,关页即丢 - JS 报错静默失败:打开开发者工具 → Console 标签,看是否有
SecurityError(跨源)、QuotaExceededError(存储满)或语法错误
真正能跨服务器复用 UI 设置的唯一办法
没有官方支持的服务器端同步方案,但你可以绕过限制,把 localStorage 变成可迁移的“配置包”:
- 只在**一个固定入口域名**下使用 phpMyAdmin,比如统一用
https://pma.example.com/反代所有后端服务器,这样所有连接都在同一源下,localStorage自然共享 - 导出后,用浏览器开发者工具直接编辑
localStorage中的phpMyAdmin_config值,粘贴 config.json 内容,然后刷新页面——比点“导入”按钮更可控 - 写个简易 Bookmarklet,在任意 phpMyAdmin 页面运行,自动注入配置:
javascript:localStorage.setItem('phpMyAdmin_config', JSON.stringify({theme:'pmahomme',fontsize:'13px',navigation_collapsed:true}));location.reload(); - 注意:每次 phpMyAdmin 升级可能调整配置项 key 名(如旧版用
DefaultTabTable,新版可能叫default_tab_table),导入前先对比版本号
UI 设置本质是前端状态,和服务器数量无关;强行把它和多服务器配置混为一谈,只会陷入“改了又没完全改”的调试循环。最省事的做法,是接受它的本地性,把 config.json 当作个人配置快照来管理,而不是试图让它“自动同步”。
立即学习“PHP免费学习笔记(深入)”;



















