必须手动执行FLUSH PRIVILEGES才能生效,因phpMyAdmin 4.9仅执行SQL更新权限表而不重载缓存;若报RELOAD权限错误需高权限账号重登,且须确保操作在主库、Host匹配、认证插件为mysql_native_password。

phpMyAdmin 4.9 无法自动适配旧版 MySQL 权限逻辑,必须手动干预用户认证方式、权限缓存刷新和 Host 匹配规则——否则“保存成功”但权限不生效是常态。
为什么改完权限后点“执行”却没反应
phpMyAdmin 4.9 的权限编辑界面只是生成 UPDATE mysql.user 或 GRANT 语句并执行,MySQL 不会自动重载内存中的权限缓存。你看到“成功”,只代表 SQL 执行了,不代表新权限已加载。
- 必须手动执行
FLUSH PRIVILEGES;—— 这是唯一强制重载权限表的命令 - 如果报错
ERROR 1227 (42000): Access denied; you need (at least one of) the RELOAD privilege(s),说明当前账号没RELOAD权限,需用root或高权限账号重登再执行 - 在只读副本(replica)或 ProxySQL 后端执行该命令无效,
FLUSH PRIVILEGES只能在主库运行且不会同步
MySQL 5.6 及更早版本的用户权限常见断点
旧版 MySQL(尤其是 5.6 及之前)对 User/Host 组合、默认数据库匹配、密码字段长度更敏感,phpMyAdmin 4.9 默认行为容易踩坑:
-
'user'@'localhost'和'user'@'127.0.0.1'是两个完全不同的用户,不能混用;旧版不支持通配符 Host 如'user'@'%'对本地 socket 连接生效 - 若配置了
$cfg['Servers'][$i]['hide_db'] = 'mysql';,则根本看不到mysql库,也就无法访问user表调整权限 - 旧版 MySQL 不识别
caching_sha2_password插件,但 phpMyAdmin 4.9 不报明错,只会卡在登录页或跳回空表单;必须确认用户 plugin 字段为mysql_native_password - 执行
SHOW GRANTS FOR 'u'@'h';比反复点界面“执行”更快定位缺失权限项
怎样让 phpMyAdmin 4.9 正确识别并应用旧版权限语义
关键不是调 phpMyAdmin 界面,而是控制它背后生成和依赖的底层行为:
- 禁用
hide_db:检查config.inc.php中是否含$cfg['Servers'][$i]['hide_db']行,如有且值含mysql,必须删掉或注释 - 强制使用传统认证:对旧版 MySQL 用户,执行
ALTER USER 'u'@'h' IDENTIFIED WITH mysql_native_password BY 'pass';,再FLUSH PRIVILEGES; - 避免图形化授权器:phpMyAdmin 4.9 的权限编辑器可能漏写
Host或生成带反引号的语句,导致旧版解析失败;优先用「SQL」页手写GRANT SELECT ON `db`.* TO 'u'@'h'; - 确认连接目标是主库:在「状态」→「复制」页看是否显示
Replication: Disabled,否则所有权限操作都白做
最容易被忽略的是:phpMyAdmin 4.9 不校验你填的 Host 是否真能连上,也不提示 plugin 不兼容——它只安静地失败。只要登录后看不到 mysql 库、或改完权限仍被拒,第一件事不是重配 phpMyAdmin,而是进命令行查 SELECT User, Host, plugin FROM mysql.user WHERE User = 'xxx'; 和 SHOW GRANTS;。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











