MySQL FLUSH 命令
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 权限
SUPER 或 SYSTEM_VARIABLES_ADMIN(用于 MySQL 8+ 中的敏感操作)
示例:
GRANT RELOAD ON *.* TO 'admin'@'localhost';结论
FLUSH 命令家族对于 MySQL 中的管理控制至关重要。无论你是在管理权限、日志还是缓存状态,了解如何以及何时使用 FLUSH 都有助于在无需重启的情况下保持最佳服务器性能和可靠性。请在适当权限下谨慎使用,尤其是在生产环境中。


