FLUSH PRIVILEGES 通常不必要,仅在直接修改系统表(如 UPDATE mysql.user)后才需执行;GRANT/ALTER USER 等语句已自动同步权限,且已存在连接需重连才能生效。

不需要——绝大多数情况下,执行 FLUSH PRIVILEGES 不仅不必要,还会掩盖真实问题。
GRANT 或 ALTER USER 后执行 FLUSH PRIVILEGES 是冗余操作
MySQL 5.7 及以后(含 8.0+)中,所有标准权限语句都会自动同步磁盘与内存:
-
GRANT、REVOKE、CREATE USER、DROP USER立即写入mysql.user等表,并更新内存 ACL 缓存 -
ALTER USER ... IDENTIFIED BY在 8.0.16+ 中已完全原子化,改完即生效 - 执行
FLUSH PRIVILEGES后看到 “Query OK”,不代表它起了作用,只是没报错
什么情况下真得用 FLUSH PRIVILEGES?
只有一种场景:你绕过 SQL 接口,直接用 DML 操作了系统表。
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
UPDATE mysql.user SET authentication_string = '$A$...' WHERE User='u'INSERT INTO mysql.db (Host, Db, User, Select_priv) VALUES ('%', 'test', 'u', 'Y')- 用
mysqldump导入权限表后未走GRANT流程
这些操作 MySQL 完全不感知,内存缓存仍是旧的,必须靠 FLUSH PRIVILEGES 强制重载。
执行了 FLUSH PRIVILEGES 还是不生效?常见陷阱
这不是命令失效,而是权限模型本身的限制:
- 已存在的连接不会重载权限——每个连接登录时就固化了权限快照,必须
QUIT后重连 -
'u'@'localhost'和'u'@'127.0.0.1'是两个独立账号,改了前者,用后者连当然无效 - 客户端不支持
caching_sha2_password插件时,连都连不上,和刷不刷权限无关 -
FLUSH PRIVILEGES需要RELOAD权限,普通用户执行直接报错ERROR 1227
真正容易被忽略的点,从来不是要不要刷,而是你改的那条 user@host 记录,到底是不是当前连接实际匹配的那一条——用 CURRENT_USER() 确认,比盲目刷新管用得多。

















