binlog_expire_logs_seconds = 604800
✅ 含义:MySQL Binlog 保留 7 天(604800 = 7 × 24 × 3600)
MySQL 8.0+ 参数,单位:秒,替代老版本
expire_logs_days(8.2+ 已移除)
关键要点
-
清理触发时机
不是定时轮询删除;只在 MySQL 启动、binlog 切换滚动(flush) 时才检查并清理过期日志👉 极端场景:binlog 很久不滚动,超过7天的旧日志可能暂时还在磁盘上
-
默认值
默认2592000= 30天;0代表永不自动清理,磁盘会持续上涨 -
动态修改(无需重启,全局生效)
SET GLOBAL binlog_expire_logs_seconds = 604800;
-- 写入 my.cnf [mysqld] 持久化:
binlog_expire_logs_seconds = 604800
查看当前配置:
SHOW VARIABLES LIKE 'binlog_expire_logs_seconds';
- 业务风险提醒(CDC/主从同步重点)
- 主从延迟、DTS、Canal、Flink-CDC 如果中断超过7天,binlog 被清,同步断档,只能全量重拉
-
要预留大于业务最大可能中断窗口;如果同步链路经常停,建议调大(14天:1209600)
-
配套常用 binlog 配置参考
[mysqld]
server_id=1
log_bin=mysql-bin
binlog_format=ROW
binlog_row_image=FULL
max_binlog_size=256M
binlog_expire_logs_seconds=604800
sync_binlog=1
- 手动清理命令
# 删除早于指定时间的binlog
PURGE BINARY LOGS BEFORE '2026-11-01 00:00:00';