MySQL执行GRANT后,为何需FLUSH_操作以同步内存缓存与磁盘表数据?

2026-05-20 13:200阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计914个文字,预计阅读时间需要4分钟。

MySQL执行GRANT后,为何需FLUSH_操作以同步内存缓存与磁盘表数据?

plaintextGRANT 后面不需要 FLUSH PRIVILEGES——这是一个流传甚广的错误理解,执行它不仅没有用,还可能引发实际问题。

GRANT 语句本身就会同步内存与磁盘

MySQL 的 GRANTREVOKECREATE USER 等权限管理语句,在内部实现上会同时完成两件事:写入磁盘的 mysql.user(或 mysql.db 等)表,以及更新内存中的权限结构(如 acl_users 数组)。这意味着权限变更在语句返回成功后就已生效,无需额外触发刷新。

常见误操作:

  • 写了 GRANT SELECT ON mydb.* TO 'u'@'localhost',又顺手加一行 FLUSH PRIVILEGES → 多余,且容易让你误以为“不加就不生效”
  • 执行完 GRANT 仍连不上 → 实际可能是 host 不匹配(比如用了 'u'@'localhost' 却从 127.0.0.1 连),或没重连已有连接

FLUSH PRIVILEGES 只在直接改系统表时才必要

FLUSH PRIVILEGES 的唯一合法用途,是当你绕过 SQL 接口、直接用 UPDATE mysql.userINSERT INTO mysql.db 修改权限表之后。此时 MySQL 完全不知情,内存缓存仍是旧快照,必须靠 FLUSH PRIVILEGES 强制全量重载磁盘数据。

阅读全文
标签:Mysql

本文共计914个文字,预计阅读时间需要4分钟。

MySQL执行GRANT后,为何需FLUSH_操作以同步内存缓存与磁盘表数据?

plaintextGRANT 后面不需要 FLUSH PRIVILEGES——这是一个流传甚广的错误理解,执行它不仅没有用,还可能引发实际问题。

GRANT 语句本身就会同步内存与磁盘

MySQL 的 GRANTREVOKECREATE USER 等权限管理语句,在内部实现上会同时完成两件事:写入磁盘的 mysql.user(或 mysql.db 等)表,以及更新内存中的权限结构(如 acl_users 数组)。这意味着权限变更在语句返回成功后就已生效,无需额外触发刷新。

常见误操作:

  • 写了 GRANT SELECT ON mydb.* TO 'u'@'localhost',又顺手加一行 FLUSH PRIVILEGES → 多余,且容易让你误以为“不加就不生效”
  • 执行完 GRANT 仍连不上 → 实际可能是 host 不匹配(比如用了 'u'@'localhost' 却从 127.0.0.1 连),或没重连已有连接

FLUSH PRIVILEGES 只在直接改系统表时才必要

FLUSH PRIVILEGES 的唯一合法用途,是当你绕过 SQL 接口、直接用 UPDATE mysql.userINSERT INTO mysql.db 修改权限表之后。此时 MySQL 完全不知情,内存缓存仍是旧快照,必须靠 FLUSH PRIVILEGES 强制全量重载磁盘数据。

阅读全文
标签:Mysql