MySQL缓存机制包含查询缓存(仅5.7及以下)、InnoDB缓冲池、主机缓存等;1. 旧版可用RESET QUERY CACHE清空查询缓存;2. FLUSH HOSTS解决主机阻塞问题;3. FLUSH TABLES关闭表缓存,支持读锁用于备份;4. FLUSH STATUS重置状态计数器,FLUSH PRIVILEGES刷新权限;5. InnoDB缓冲池无法直接清空,依赖自动管理或重启释放,可通过参数控制启停时的数据加载。新版MySQL 8.0已移除查询缓存,日常维护以FLUSH HOSTS和FLUSH TABLES为主,合理配置优于频繁清理。

MySQL的缓存机制包括查询缓存(Query Cache,旧版本)、InnoDB缓冲池、临时表缓存等。不同类型的缓存清理方式不同。注意:新版MySQL(8.0+)已移除查询缓存功能,因此以下操作主要适用于需要手动管理缓存的场景。
1. 清理查询缓存(Query Cache)
仅适用于 MySQL 5.7 及以下版本,MySQL 8.0 已废弃 Query Cache。如果你使用的是较老版本的 MySQL,可以通过以下命令清理查询缓存:
- RESET QUERY CACHE; —— 清空查询缓存内容
- FLUSH TABLES; —— 刷新表,间接影响缓存
示例:
RESET QUERY CACHE;2. 清空主机缓存(Host Cache)
当出现“Host is blocked because of many connection errors”错误时,可清空主机缓存:
- FLUSH HOSTS; —— 清除主机连接错误缓存
该命令会重置由于频繁连接失败而被阻塞的主机列表。
3. 刷新表和缓存(FLUSH TABLES)
刷新所有表并关闭已打开的表缓存,同时可配合读锁使用:
- FLUSH TABLES; —— 关闭所有打开的表,强制关闭缓存
- FLUSH TABLES WITH READ LOCK; —— 加读锁并刷新表(常用于备份)
4. 重置状态计数器缓存
某些状态信息也属于缓存范畴,可通过以下命令重置:
- FLUSH STATUS; —— 重置状态变量(如 Com_select、Qcache_hits 等)
- FLUSH PRIVILEGES; —— 刷新权限缓存(用户权限修改后需执行)
5. InnoDB 缓冲池管理(重点)
InnoDB 缓冲池是主要数据页缓存,不能直接“清空”,但可通过以下方式间接处理:
- 重启 MySQL 服务:最彻底的方式释放缓冲池
- 设置 innodb_buffer_pool_dump_at_shutdown 和 innodb_buffer_pool_load_at_startup,控制冷启动性能
- 通过命令触发缓冲池状态保存与加载(不等于清空):
SET GLOBAL innodb_buffer_pool_load_now = ON;
注意:InnoDB 缓冲池设计为长期驻留内存,通常无需手动清理,系统会自动管理LRU链。
基本上就这些常用操作。日常维护中,FLUSH HOSTS 和 FLUSH TABLES 最常见,而查询缓存清理在新版本中已无意义。合理配置参数比频繁清理更有效。










