phpMyAdmin 在 Plesk 中默认仅显示当前客户权限内的数据库,这是由租户隔离机制和 psa 元数据双重过滤决定的;需手动配置多 server 条目或切换客户账户才能访问其他站点数据库。
phpMyAdmin 在 Plesk 里默认不绑定多站点数据库
你点开 plesk 的 phpmyadmin,看到的只是当前登录客户账户(或管理员)能访问的数据库列表——它不会自动列出其他客户站点的数据库,哪怕你在同一台服务器上托管了几十个网站。这不是权限没开全,而是 phpmyadmin 本身在 plesk 中被限制为“租户隔离模式”:每个客户只能看到自己 database 和 user 的组合,且连接走的是本地 socket 或受限的 localhost 用户,不是 root。
常见错误现象:Access denied for user 'admin'@'localhost' 或登录后空列表,其实是账号根本没被授权查别的库;还有人误以为在 Plesk > Tools & Settings > phpMyAdmin 设置里勾了“允许所有 IP”就能跨站管理——没用,那只是控制 Web 访问来源,不改数据库权限模型。
- 真正想查其他站点数据库?得手动给目标数据库用户加权限,或者临时切到对应客户账户下操作
- Plesk 18.0+ 默认禁用
root登录 phpMyAdmin,即使你知道密码也连不上;老版本开启需改/etc/phpmyadmin/config.inc.php,但不推荐 - 别直接改 phpMyAdmin 的
$cfg['Servers'][$i]['host']指向远程 MySQL 地址——Plesk 的防火墙和 SELinux 通常会拦掉,而且绕过 Plesk 权限体系容易出安全审计问题
怎么让一个 phpMyAdmin 实例看到多个客户数据库
核心是绕过 Plesk 的“单客户视图”,但又不破坏隔离性。最稳妥的做法是:用 Plesk 自带的 mysql 命令行 + 客户专属用户,再配合 phpMyAdmin 的“配置文件认证”方式加载不同连接。
实操路径:先确认目标数据库归属哪个客户(进 Plesk > Domains > example.com > Databases),记下数据库名、用户名、密码;然后 SSH 登录服务器,用该用户测试能否连通:
mysql -u <code>db_user_abc</code> -p<code>secret123</code> -D <code>example_db</code> -e "SHOW TABLES LIMIT 1"
如果成功,说明凭据有效。接下来在 phpMyAdmin 配置中新增一个 server 条目(修改 /usr/local/psa/admin/htdocs/domains/databases/phpMyAdmin/libraries/config.default.php 或更推荐:在 /usr/local/psa/admin/htdocs/domains/databases/phpMyAdmin/config.inc.php 末尾追加):
$cfg['Servers'][$i]['host'] = 'localhost';<br>$cfg['Servers'][$i]['port'] = '';<br>$cfg['Servers'][$i]['verbose'] = 'example.com DB';<br>$cfg['Servers'][$i]['auth_type'] = 'config';<br>$cfg['Servers'][$i]['user'] = '<code>db_user_abc</code>';<br>$cfg['Servers'][$i]['password'] = '<code>secret123</code>';<br>$cfg['Servers'][$i]['extension'] = 'mysqli';
注意:$i 要比现有最大索引大 1(比如已有 0 和 1,这里填 2);密码明文写入配置文件有风险,建议仅用于内网调试,生产环境改用 auth_type = 'cookie' 并由用户手动输。
为什么不能直接用 Plesk 的“数据库服务器”设置统一管理
因为 Plesk 的 Tools & Settings > Database Servers 只管 MySQL 实例级连接参数(如 host/port/socket),不负责用户映射或权限分发。它定义的是“phpMyAdmin 连哪台 MySQL”,而不是“能看哪些库”。就算你在这里把 host 改成 127.0.0.1,phpMyAdmin 启动时仍用当前 Plesk session 绑定的客户上下文去查 information_schema,结果还是只返回该客户拥有的库。
性能与兼容性影响很实际:如果你硬塞一堆 server 配置进 phpMyAdmin,每次打开首页都会尝试预连接所有 server(哪怕没点进去),导致页面加载变慢;Plesk 升级时还可能覆盖自定义的 config.inc.php,得手动备份还原。
- 升级前务必备份
/usr/local/psa/admin/htdocs/domains/databases/phpMyAdmin/config.inc.php - 不要在
config.default.php里改——那是只读模板,改了也没用 - PHP 版本切换(比如从 7.4 升到 8.1)可能导致 mysqli 扩展行为变化,
$cfg['Servers'][$i]['extension']必须显式设为mysqli,不能留空
客户自己访问 phpMyAdmin 时看不到别的库,这正常吗
完全正常,而且是设计使然。Plesk 把 phpMyAdmin 当作客户自助工具,不是 DBA 控制台。客户登录后看到的数据库,严格对应其在 Plesk > Databases 页面里创建的那些;即使你手动给某个客户用户授了 SELECT ON *.*,phpMyAdmin 依然只列他“拥有”的库——这是通过 Plesk 的 psa 数据库里的 data_bases 表做二次过滤的,不是 MySQL 层面的权限开关。
所以别花时间调 MySQL 权限来“解锁”多库显示,重点检查三点:psa.data_bases 表里该客户的 dom_id 是否正确指向其域名记录;该数据库用户是否真在 mysql.user 表里存在;phpMyAdmin 当前 session 是否绑定了正确的 Plesk 客户 ID(可通过查看 cookie 中 plesk_session 解码验证)。
复杂点在于:这种双层过滤(MySQL 权限 + Plesk 元数据)让调试变得隐蔽。最容易被忽略的是,客户重命名数据库后没同步更新 psa.data_bases 表,导致 phpMyAdmin 显示空列表,而命令行却能连上——这时候光看 MySQL 日志没用,得查 Plesk 的 psa 库一致性。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











