必须用含CREATE DATABASE权限且认证为mysql_native_password的用户登录phpMyAdmin;若“Global privileges”区域不显示,说明缺少GRANT OPTION;host不匹配(如localhost与127.0.0.1)或权限未刷新(需FLUSH PRIVILEGES)也会导致建库失败。

直接看当前用户有没有 CREATE DATABASE 权限
别猜,先查。登录 phpMyAdmin 后,点顶部「用户账户」→ 找到你正在用的用户名(比如 root 或 admin)→ 点「编辑权限」。如果页面顶部没出现「Global privileges」区域,只看到「Database-specific privileges」,说明当前用户根本没被授予 GRANT OPTION,连修改权限的入口都被隐藏了。
这时必须切到命令行确认:SHOW GRANTS FOR CURRENT_USER;。输出里如果没有 CREATE DATABASE 或 ALL PRIVILEGES(且作用域是 *.*),就坐实没权限。
为什么 root 登录也提示“无权限”?重点查 host 和认证插件
常见但容易忽略:MySQL 8.4 默认用 caching_sha2_password 插件,而 phpMyAdmin 5.2+ 要求登录用户必须用 mysql_native_password 才能加载完整权限界面。如果你用的是新装 MySQL 8.4,默认 root@localhost 可能是 caching_sha2_password 认证,导致 phpMyAdmin 读不到权限元数据。
检查方法:SELECT user, host, plugin FROM mysql.user WHERE user = 'root';。如果 plugin 是 caching_sha2_password,得先改认证方式:
立即学习“PHP免费学习笔记(深入)”;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
再 FLUSH PRIVILEGES;。否则即使权限全开,phpMyAdmin 也显示不全、建库按钮灰掉。
权限语句写对了,但还是建不了库?检查 host 是否匹配
MySQL 把 'user'@'localhost' 和 'user'@'127.0.0.1' 当作两个完全独立的账号。phpMyAdmin 连接时用的是哪个 host,取决于它的 config.inc.php 里 $cfg['Servers'][$i]['host'] 设的是 localhost 还是 127.0.0.1 —— 而很多 PHP 配置默认走 127.0.0.1,但你只给 localhost 赋了权。
解决办法:
- 查当前连接实际用的 host:
SELECT USER(), CURRENT_USER();。前者是“你声称自己是谁”,后者是“MySQL 认为你是谁”,关键看后者。 - 如果输出是
'myuser'@'127.0.0.1',但你只授权了'myuser'@'localhost',那就立刻补:GRANT CREATE DATABASE ON *.* TO 'myuser'@'127.0.0.1'; - 生产环境别图省事全用
%,host 写太宽会绕过本地 socket 优化,还可能被远程利用。
点了“执行”却没反应?权限变更没生效的典型信号
在 phpMyAdmin 界面点「执行」后,页面静默刷新、用户列表没更新、新建数据库仍报错——这往往不是前端卡住,而是后端权限没真正落库。
原因可能是:
- 你用的账号没有
INSERT或UPDATE权限去写mysql.user表(尤其在启用了--skip-grant-tables的容器或精简版 MySQL 中) - MySQL 版本低于 5.7,
GRANT语句没自动触发FLUSH PRIVILEGES,而 phpMyAdmin 界面又不帮你补这一句 - 你在「Database-specific privileges」里勾了权限,但忘了先清空「Global privileges」区域的勾选(残留的空权限项会导致冲突)
最稳的验证方式:换一个终端,用同一账号直连 MySQL,执行 CREATE DATABASE test_xxx;。能成,说明权限已生效;失败,就说明刚才那波操作根本没写进权限系统。



















