必须在每个要管理的MySQL/MariaDB实例上单独执行create_tables.sql;每台服务器需配置独立的pmadb库名、控制用户及权限,并确保表名前缀(单/双下划线)与配置严格匹配,否则高级功能无法激活。
必须在「每个要管理的 MySQL/MariaDB 实例」上单独执行 create_tables.sql,不能只在某一台上运行就完事。比如你配置了本地 localhost 和远程 192.168.1.100 两台服务器,就得分别登录这两台数据库,各自导入一次 sql/create_tables.sql(路径在 phpMyAdmin 安装目录下)。否则只有被导入的那一台能启用高级功能,其他服务器仍会显示“高级功能尚未激活”。
不能复用同一套 pmadb 表名或控制用户——每台服务器需有自己专属的配置库和凭据。常见错误是把所有 $cfg['Servers'][$i]['pmadb'] 都设成 'phpmyadmin',结果多个实例共用一张 pma__bookmark 表,引发冲突或权限拒绝。
$cfg['Servers'][1]['pmadb'] = 'pma_local'、$cfg['Servers'][2]['pmadb'] = 'pma_remote'
pma_local / pma_remote),并只授予其对对应 pmadb 库的 SELECT/INSERT/UPDATE/DELETE 权限$cfg['Servers'][$i]['controluser'] 和 $cfg['Servers'][$i]['controlpass'] 与实际数据库用户匹配最常忽略的点是:表名前缀不一致。从 phpMyAdmin 4.7+ 开始,默认表名带双下划线(pma__bookmark),但 create_tables.sql 脚本里建的是单下划线(pma_bookmark)——除非你手动改过脚本或用的是旧版。
create_tables.sql 文件中建表语句,确认是 CREATE TABLE `pma_bookmark` 还是 CREATE TABLE `pma__bookmark`
$cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark'
$cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark'
手动递增 $i 极易漏掉或重复,尤其加新服务器时容易覆盖已有配置。最新推荐用 foreach + 自增索引,避免手算:
$servers = [['host' => 'localhost', 'pmadb' => 'pma_dev'],['host' => '192.168.1.100', 'pmadb' => 'pma_prod'],];$i = 0;foreach ($servers as $server) {$i++;$cfg['Servers'][$i]['host'] = $server['host'];$cfg['Servers'][$i]['pmadb'] = $server['pmadb'];$cfg['Servers'][$i]['controluser'] = 'pma_' . $i;$cfg['Servers'][$i]['controlpass'] = 'secure-pass-' . $i;$cfg['Servers'][$i]['auth_type'] = 'cookie';}
这样每新增一台服务器,只需往 $servers 数组追加一项,$i 自动递增,不会错位,也方便维护。