phpMyAdmin提示#1146错误,根本原因是mysql.user表物理缺失或损坏,须用mysqld --initialize-insecure重建系统表,而非手动建表或前端修复。
phpmyadmin 提示无法加载用户权限表,大概率是 mysql.user 表损坏、缺失,或当前用户没权限查它——不是前端 bug,而是底层系统表或权限链断了。
看到 #1146 - Table 'mysql.user' doesn't exist 就该停手重查
这个错误说明 MySQL 根本找不到 mysql.user 表,不是 phpMyAdmin 显示异常,是系统库真的空了。常见于误删、崩溃后未初始化、或升级 MySQL 后跳过初始化步骤。
- 别在 phpMyAdmin 里 CREATE TABLE mysql.user —— 系统表不能手动建,MySQL 会拒绝或导致后续权限失效
- 必须用
mysqld --initialize-insecure重建:先停服务(sudo systemctl stop mysql),再执行命令,注意--datadir路径要和实际一致(如/var/lib/mysql) - 执行后若启动失败,检查
datadir所属用户是否为mysql,且目录下不能残留ibdata1或旧日志文件
能连上但用户列表卡在 Loading…,多半是没索引或权限不足
SELECT * FROM mysql.user 查询慢,本质是全表扫描。MySQL 8.0+ 因 caching_sha2_password 插件让 mysql.user 行数变多,而默认没索引,尤其用户数超 50 时明显卡顿。
- 确认引擎:
SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA='mysql' AND TABLE_NAME='user';—— 大概率是MyISAM,不能直接ALTER TABLE - 只对
User和Host建复合索引有效:CREATE INDEX idx_user_host ON mysql.user (User, Host);,建完必须重启 MySQL - 同时检查当前用户是否有
SELECT ON mysql.user权限:SHOW GRANTS FOR CURRENT_USER;,缺就补:GRANT SELECT ON mysql.user TO 'your_user'@'%'; FLUSH PRIVILEGES;
config.inc.php 权限设成 777 反而触发“配置文件权限错误”
phpMyAdmin 主动拒绝加载组或其他用户可写的配置文件,这是硬性安全拦截,不是警告。chmod 777、664、775 全都会报错。
- 正确权限只有
644(文件)或755(目录):chmod 644 config.inc.php - Windows 用户需进资源管理器 → 属性 → 安全 → 编辑,确保 “Users” 组只有“读取和执行”“读取”,去掉“写入”
- 改完必须重启 Apache(XAMPP 控制面板 Stop → Start),否则不生效
- 顺带核对
$cfg['Servers'][$i]['auth_type']、password和AllowNoPassword是否匹配 MySQL 实际状态,比如 root 设过密码却还留着AllowNoPassword = true,就会静默用空密码连,报Access denied for user 'root'@'localhost' (using password: NO)
点编辑按钮灰掉、保存直接报错,其实是前端禁止直改系统表
phpMyAdmin 在「浏览」页禁用对 mysql 库所有表的编辑,哪怕你是 root。这不是权限问题,是设计如此。想改权限,必须走 SQL 标签页手写语句。
立即学习“PHP免费学习笔记(深入)”;
- 新建用户/赋权优先用
CREATE USER+GRANT(MySQL 8.0+ 强制要求),避免直接UPDATE mysql.user写错字段(比如把Password当列名) - 执行
GRANT报ERROR 1410,说明当前用户没GRANT OPTION,得让更高权限账号运行:GRANT GRANT OPTION ON *.* TO 'your_user'@'localhost' WITH GRANT OPTION; - 每次改完必须
FLUSH PRIVILEGES;,否则新权限不落地;如果磁盘已满或innodb_system表空间损坏,这条命令可能静默失败,得先查df -h和 MySQL 错误日志
真正难排查的点往往藏在两处:一是 mysql.user 表重建后,root 认证插件被重置为 caching_sha2_password,但 phpMyAdmin 版本太低(FLUSH PRIVILEGES 因磁盘满或 InnoDB 故障没真正刷进磁盘,重启 MySQL 就还原。



















