MySQL FLUSH 命令

热门:
升级您的服务器配置! 申请 AVA 并使用 立减 15%
使用优惠码:

MySQL FLUSH 命令

在托管领域,MySQL 仍然是为动态网站、电子商务商店、内容管理系统 (CMS) 和 SaaS 平台提供支持的最关键组件之一。无论你是在管理一个 shared hosting cluster、一个 VPS infrastructure,还是为企业客户提供 dedicated servers,掌控 MySQL 的内部操作都至关重要。

一个经常被忽视但功能强大的工具是 FLUSH 命令——一组管理性 SQL 语句,可让你重新加载权限、清除日志、重置状态,并在不重启服务器的情况下确保一致性。

什么是 MySQL 中的 FLUSH?

FLUSH 语句用于:

  • 清除内部缓存

  • 重新加载配置文件(如权限表)

  • 重置状态信息

  • 强制 MySQL 将缓冲数据写入磁盘

只有具有 RELOAD 权限(或更高权限,如 SUPER)的用户才能执行大多数 FLUSH 操作。

常见的 FLUSH 命令

1. 🔐 FLUSH PRIVILEGES

从 mysql 数据库中的授权表重新加载用户权限:

FLUSH PRIVILEGES;

何时使用:

  • 在手动编辑 mysql.user 或其他授权表之后。

  • 当你通过直接 UPDATE 语句而不是 GRANT 更改用户访问权限时。

2.  FLUSH TABLES

关闭所有打开的表并强制重新打开。适用于文件系统维护或备份。

FLUSH TABLES;

你也可以刷新特定的表:

FLUSH TABLES table_name [, table_name] ...;

何时使用:

  • 在使用外部工具进行备份之前(例如,mysqldump –single-transaction)。

  • 在可能使表缓存过载的大规模写入之后。

3.  FLUSH QUERY CACHE

从 query cache 中移除所有查询结果(如果已启用):

FLUSH QUERY CACHE;

注意:Query cache 已弃用,并在 MySQL 8.0 中移除。

4.  FLUSH LOGS

关闭并重新打开所有日志文件(general log、error log、binary log、relay log)。

FLUSH LOGS;

或者刷新特定类型:

FLUSH BINARY LOGS;
FLUSH ERROR LOGS;
FLUSH ENGINE LOGS;
FLUSH SLOW LOGS;

何时使用:

  • 日志轮转之后

  • 当日志被移动或归档时

  • 用于重置日志以进行调试或合规性检查

5. FLUSH HOSTS

重置失败客户端连接的 host cache。

FLUSH HOSTS;

何时使用:

  • 当收到以下错误时:

    Host 'xxx' is blocked because of many connection errors

6. FLUSH STATUS

将大多数状态变量重置为零(不影响像 Uptime 这样的全局计数器)。

FLUSH STATUS;

何时使用:

  • 在基准测试或性能测试之前。

  • 使用 SHOW STATUS 获取干净的指标。

7. FLUSH TABLES WITH READ LOCK

刷新并锁定所有表,防止其他会话写入。

FLUSH TABLES WITH READ LOCK;

何时使用:

  • 用于一致性快照备份(例如,使用 LVM 或文件复制工具)。

  • 重要:始终使用

    UNLOCK TABLES;

    手动解锁

8. FLUSH DES_KEY_FILE

重新加载旧版 DES_ENCRYPT()/DES_DECRYPT() 中使用的 DES key files(legacy)。

FLUSH DES_KEY_FILE;

9.  FLUSH USER_RESOURCES

重置按用户的资源限制(如 MAX_QUERIES_PER_HOUR)计数器。

FLUSH USER_RESOURCES;

何时使用:

  • 为资源受限用户进行周期中重置。

已弃用/已移除的命令

  • FLUSH QUERY CACHE 在 MySQL 8.0 中已 移除

  • FLUSH DES_KEY_FILE 是 legacy

  • 可考虑在 MySQL 8.0 中使用更新的替代方案,如 RESET PERSIST。

所需权限

大多数 FLUSH 操作需要:

  • RELOAD 权限

  • SUPERSYSTEM_VARIABLES_ADMIN(用于 MySQL 8+ 中的敏感操作)

示例:

GRANT RELOAD ON *.* TO 'admin'@'localhost';

结论

FLUSH 命令家族对于 MySQL 中的管理控制至关重要。无论你是在管理权限、日志还是缓存状态,了解如何以及何时使用 FLUSH 都有助于在无需重启的情况下保持最佳服务器性能和可靠性。请在适当权限下谨慎使用,尤其是在生产环境中。