MySQL

MySQL binlog 保留时间与清理

·4 分钟阅读·1207 字
📋 目录

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 天前提备份策略完善

关联文档