结论是phpMyAdmin“配置存储未完全配置”提示的根本原因是phpmyadmin数据库缺失、表结构未导入或controluser权限不足,必须手动创建数据库、导入create_tables.sql、配置专用controluser并正确设置config.inc.php中的controlhost/controluser/controlpass及pmadb,缺一不可。
直接说结论:这个提示不是配置写错了,而是 phpmyadmin 数据库根本不存在,或者里面缺表、权限没给够。不手动建库建表、不配专用控制用户,光改 config.inc.php 永远会弹窗。
为什么“配置存储未完全设置”反复出现
phpMyAdmin 的「保存查询」「列偏好」「关系视图」「隐藏字段」等功能,全依赖 phpmyadmin 库里的 15 张表(比如 pma__bookmark、pma__history)。它不会自己创建这些表——你得先让数据库有这个库、有这些表、有能读写的用户。
- 常见错觉:以为改了
$cfg['Servers'][$i]['controluser']就完事,其实 controluser 连连不到空库,照样失败 - MySQL 8+ 用户特别容易卡在认证插件上:用
mysql_native_password创建 controluser,别用caching_sha2_password(除非你明确配了兼容模式) - 表名前缀随版本变:
pma_(旧版) vspma__(4.8+),配错一个就整组功能失效
手动创建 phpmyadmin 库和 controluser
别在 phpMyAdmin 里点「导入」——此时它可能还不能稳定访问 MySQL。用命令行最稳:
CREATE DATABASE IF NOT EXISTS `phpmyadmin`; GRANT SELECT, INSERT, UPDATE, DELETE ON `phpmyadmin`.* TO 'pma'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_strong_pass'; FLUSH PRIVILEGES;
-
IDENTIFIED WITH mysql_native_password是 MySQL 8+ 必加项,否则 controluser 登录失败 - 密码含
@、$、/等字符?在config.inc.php里要用反斜杠转义,比如'pass@123'得写成'pass\@123' - 导入表结构前,确认路径:
/usr/share/phpmyadmin/sql/create_tables.sql(Debian/Ubuntu)或/usr/share/doc/phpMyAdmin-*/examples/create_tables.sql(RHEL/CentOS)
config.inc.php 关键配置项怎么填
编辑 config.inc.php,重点只改这几行($i 通常是 1,除非你配了多个服务器):
$cfg['Servers'][$i]['controlhost'] = 'localhost'; $cfg['Servers'][$i]['controluser'] = 'pma'; $cfg['Servers'][$i]['controlpass'] = 'your_strong_pass'; $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
-
pmadb必须和 CREATE DATABASE 的库名**完全一致**(大小写敏感,尤其在 Linux 上) - 所有
pma__xxx表名要和实际导入的表名对齐:新版是双下划线(pma__history),老版是单下划线(pma_history),看create_tables.sql文件头注释确认 - 如果 MySQL 绑的是 socket 而非 TCP,
controlhost可留空字符串'',但必须确保mysql --socket=/var/run/mysqld/mysqld.sock -u pma -p能连上
验证是否真生效
改完别急着刷新页面——先做三件事:
立即学习“PHP免费学习笔记(深入)”;
- 用 controluser 登录 MySQL:运行
mysql -u pma -p -D phpmyadmin -e "SHOW TABLES;",确认至少看到 15 张表 - 检查 PHP 错误日志:如果
controlpass错或插件不兼容,Apache/Nginx 日志里会有mysqli_real_connect(): (HY000/1045)类报错 - 清浏览器 cookies:这个提示带状态缓存,旧 session 不清,新配置可能被忽略
真正容易被忽略的是:controluser 必须只能操作 phpmyadmin 库,不能给全局权限;而 create_tables.sql 必须由 controluser 执行过(或 root 执行后授权),否则表存在但 controluser 没 INSERT 权限,照样报错。



















