需手动创建phpmyadmin数据库并导入对应版本的create_tables.sql脚本,配置专用controluser账号并授权,确保表结构完整、字段匹配且MySQL会话模式兼容。
phpMyAdmin 报错 “The phpMyAdmin configuration storage is not completely configured” 怎么办
这个提示说明 pma 数据库里缺表,或者表结构不全,导致无法启用高级功能(如用户偏好、sql 历史、跟踪、pdf 导出关系图等)。不是配置文件写错了,而是底层支撑表没建好。
核心动作是:手动创建或修复 phpmyadmin 数据库,并导入官方提供的 create_tables.sql 脚本。别指望点几下界面就能自动完成——它默认不自动创建,也不报具体缺哪张表。
- 先确认你用的是哪个版本的 phpMyAdmin,
create_tables.sql必须和它严格匹配(路径通常在./sql/create_tables.sql或./examples/create_tables.sql) - 用 root 或有
CREATE权限的账号登录 MySQL,手动执行建库和建表:CREATE DATABASE IF NOT EXISTS `phpmyadmin` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 再执行:
USE `phpmyadmin`; SOURCE /path/to/phpmyadmin/sql/create_tables.sql;
(注意路径必须是 MySQL 服务端能访问的绝对路径,不是浏览器能下载的路径) - 如果提示
Table 'pma__table_uiprefs' doesn't exist这类错误,说明脚本没跑完或中途失败,得清空phpmyadmin库重来
config.inc.php 里 $cfg['Servers'][$i]['controluser'] 和 ['controlpass'] 是干啥的
这是 phpMyAdmin 连接自身控制数据库用的专用账号,和你登录 phpMyAdmin 的账号完全无关。它必须拥有对 phpmyadmin 库的全部操作权限(SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX),但不能是 root —— 出于安全,建议单独建一个最小权限账号。
常见翻车点:把普通登录账号填进这里,或者用了 root 但没给 phpmyadmin 库授权;又或者密码含特殊字符(如 @、/)没做转义,导致连接失败后只显示空白页或 500 错误。
- 建专用账号示例:
CREATE USER 'pma'@'localhost' IDENTIFIED BY 'your_secure_password';<br>GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX ON `phpmyadmin`.* TO 'pma'@'localhost';<br>FLUSH PRIVILEGES;
- 在
config.inc.php中配对填写:$cfg['Servers'][$i]['controluser'] = 'pma';<br>$cfg['Servers'][$i]['controlpass'] = 'your_secure_password';
- 如果 MySQL 启用了
skip-name-resolve,必须用'pma'@'127.0.0.1'而非'pma'@'localhost',否则认证会静默失败
为什么改完 config.inc.php 还不生效,页面还是提示“高级功能未启用”
因为 phpMyAdmin 会缓存配置检查结果,而且它校验的是“所有依赖表是否存在 + controluser 是否能连上 + 表字段是否完整”,缺一不可。哪怕只少一张 pma__tracking,或者 pma__bookmark 缺了 user 字段,都会降级为“未启用”。
立即学习“PHP免费学习笔记(深入)”;
最直接的验证方式:打开 phpMyAdmin → 左侧选中 phpmyadmin 库 → 看表列表是否包含 pma__bookmark、pma__history、pma__tracking 等(前缀由 $cfg['Servers'][$i]['pmadb'] 和 $cfg['Servers'][$i]['bookmarktable'] 等参数决定);再点开任意一张表,确认字段名和官方 SQL 脚本一致。
- 检查 controluser 连通性:
mysql -u pma -p -h 127.0.0.1 phpmyadmin -e "SELECT 1;"
能返回 1 才算通 - 确认
$cfg['Servers'][$i]['pmadb']值是'phpmyadmin'(注意引号和大小写),不是'pma'或空字符串 - 如果你用的是 Nginx + PHP-FPM,改完
config.inc.php后要重启 PHP-FPM,不是只刷新网页
MySQL 8.0+ 和 MariaDB 10.5+ 下建表失败或字段报错
新版 MySQL 默认禁用 ANSI_QUOTES 模式,而旧版 create_tables.sql 里大量用双引号包字段名(如 "username"),会导致语法错误。MariaDB 则可能因 sql_mode 包含 STRICT_TRANS_TABLES 拒绝插入空字符串到 NOT NULL 字段。
解决办法不是改 SQL 脚本本身(容易漏),而是临时调整 MySQL 会话模式后再导入:
- 登录 MySQL 后先执行:
SET SQL_MODE='';<br>SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ANSI_QUOTES',''));
- 再
USE phpmyadmin; SOURCE ... - 或者更稳妥:编辑
create_tables.sql,把所有双引号字段名(如"username")替换成反引号(`username`),这是 MySQL 官方推荐的标识符写法 - MariaDB 用户注意:脚本里
TYPE=MyISAM已废弃,要全局替换成ENGINE=MyISAM,否则建表失败
真正卡住的地方往往不是不会配,而是以为“建了库、跑了脚本、填了 controluser 就完事了”——其实每张表的字段、索引、外键约束都得对得上,错一个就全盘无效。手动比对 create_tables.sql 和实际表结构,比反复重启服务有用得多。











