MySQL binlog 保留时间与清理
实操篇 — 配置与管理
一、版本与参数对应
| MySQL 版本 | 参数 | 说明 |
|---|---|---|
| 5.7 / 8.0.22 及更早 | expire_logs_days | 按天保留 |
| 8.0.23+ | binlog_expire_logs_seconds | 按秒保留(推荐),旧参数已弃用 |
| 默认(8.0) | — | 30 天(2592000 秒) |
二、永久生效(my.cnf / my.ini)
MySQL 5.7
[mysqld]
log_bin = ON
expire_logs_days = 7 # 保留 7 天
max_binlog_size = 500M # 单个 binlog 大小
修改后重启:systemctl restart mysqld
MySQL 8.0+(推荐)
[mysqld]
log_bin = ON
binlog_expire_logs_seconds = 604800 # 7天 = 7*24*3600
max_binlog_size = 500M
三、动态设置(不重启,立即生效)
5.7
SET GLOBAL expire_logs_days = 7;
8.0+
SET PERSIST binlog_expire_logs_seconds = 604800;
PERSIST:动态生效 + 写入配置文件,重启不丢GLOBAL:仅当前实例生效,重启恢复默认
四、查看当前保留时间
-- 5.7
SHOW VARIABLES LIKE 'expire_logs_days';
-- 8.0
SHOW VARIABLES LIKE 'binlog_expire_logs_seconds';
五、手动清理 binlog(应急)
-- 清理 7 天前的
PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);
-- 清理到某个文件为止(不含该文件)
PURGE BINARY LOGS TO 'mysql-bin.000123';
六、触发自动清理时机
- MySQL 启动时
- flush logs 时
- binlog 达到 max_binlog_size 轮转时
七、生产推荐值
| 场景 | 保留时间 | 说明 |
|---|---|---|
| 常规 | 7 天(604800 秒) | 标准配置 |
| 数据敏感/恢复窗口长 | 15–30 天 | 需配合充足磁盘 |
| 磁盘紧张 | 3 天 | 前提备份策略完善 |
关联文档
- MySQL 高可用方案 — 高可用架构理论
- MySQL 主从复制备份方式对比 — 主从复制原理
- ../../kubernetes/core/K8s 核心概念#StatefulSet — MySQL 有状态部署