binlog过期时间设置

binlog_expire_logs_seconds = 604800

✅ 含义:MySQL Binlog 保留 7 天(604800 = 7 × 24 × 3600)

MySQL 8.0+ 参数,单位:秒,替代老版本 expire_logs_days(8.2+ 已移除)

关键要点

  1. 清理触发时机
    不是定时轮询删除;只在 MySQL 启动、binlog 切换滚动(flush) 时才检查并清理过期日志

    👉 极端场景:binlog 很久不滚动,超过7天的旧日志可能暂时还在磁盘上

  2. 默认值
    默认 2592000 = 30天;0 代表永不自动清理,磁盘会持续上涨

  3. 动态修改(无需重启,全局生效)

SET GLOBAL binlog_expire_logs_seconds = 604800;
-- 写入 my.cnf [mysqld] 持久化:
binlog_expire_logs_seconds = 604800

查看当前配置:

SHOW VARIABLES LIKE 'binlog_expire_logs_seconds';
  1. 业务风险提醒(CDC/主从同步重点)
  2. 主从延迟、DTS、Canal、Flink-CDC 如果中断超过7天,binlog 被清,同步断档,只能全量重拉
  3. 要预留大于业务最大可能中断窗口;如果同步链路经常停,建议调大(14天:1209600)

  4. 配套常用 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
  1. 手动清理命令
# 删除早于指定时间的binlog
PURGE BINARY LOGS BEFORE '2026-11-01 00:00:00';
上一篇 多租户反馈平台MultiFeedbackSystem
下一篇 CentOS/Anolist关闭图形界面