侧边栏壁纸
博主头像
鱼箴日记,AI,Java,Liunx,Spring,Spring AI博主等级

行动起来,活在当下

  • 累计撰写 16 篇文章
  • 累计创建 10 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

MySQL 如何安全清理 Binlog?只保留最近 1 天的完整实践指南

Administrator
2026-03-04 / 0 评论 / 0 点赞 / 2 阅读 / 4585 字 / 正在检测是否收录...

在生产环境中,MySQL binlog(Binary Log) 经常会无限增长,最终导致磁盘爆满。

本文结合实战经验,讲清楚:

  • 如何立即清理 binlog

  • 如何设置自动过期

  • 只保留最近 1 天的正确做法

  • 生产环境的安全注意事项


一、什么是 Binlog?

Binlog 是 MySQL 的二进制日志,用于:

  • 主从复制

  • 数据恢复(Point In Time Recovery)

  • 数据审计

只要开启:

log-bin=mysql-bin

MySQL 就会持续写入 binlog 文件。


二、查看当前 Binlog 情况

在清理前,建议先查看现状:

SHOW BINARY LOGS;

查看当前使用中的日志:

SHOW MASTER STATUS;

如果是主从架构,一定要检查:

SHOW SLAVE STATUS\G

确认从库已经同步完成。


三、立即清理 1 天以前的 Binlog

如果你现在磁盘已经告警,可以执行:

PURGE BINARY LOGS BEFORE NOW() - INTERVAL 1 DAY;

作用:

  • 删除 1 天以前的 binlog

  • 不会删除当前正在使用的文件

  • 如果从库未同步,会报错并阻止删除

适合:

  • 紧急释放磁盘空间

  • 单机环境


四、设置自动只保留 1 天

MySQL 8 推荐使用:

SET GLOBAL binlog_expire_logs_seconds = 86400;

86400 秒 = 1 天

永久生效需写入配置文件:

[mysqld]
binlog_expire_logs_seconds=86400

重启 MySQL 后生效。


五、最佳实践:立即清理 + 自动过期

如果目标是:

现在开始只保留 1 天

建议按以下步骤操作:

第一步:立即清理

PURGE BINARY LOGS BEFORE NOW() - INTERVAL 1 DAY;

第二步:设置自动过期

SET GLOBAL binlog_expire_logs_seconds = 86400;

这样:

  • 历史日志立即清除

  • 未来自动控制在 1 天以内


六、生产环境风险提醒(非常重要)

⚠ 如果你有主从复制:

  • 从库延迟超过 1 天

  • 将直接导致复制失败

⚠ 如果你做增量备份:

  • 只能恢复 1 天以内的数据

  • 超过 1 天无法做时间点恢复


七、常见错误做法

很多人直接:

rm mysql-bin.*

这是错误的。

原因:

  • MySQL 有 binlog 索引文件

  • 会导致 MySQL 启动异常

  • 主从复制直接崩溃

正确方式永远是使用 SQL 命令删除。


八、不同场景建议保留时间

场景

推荐保留时间

本地开发

1 天

普通生产

3~7 天

核心业务系统

7~15 天

金融系统

15 天以上

0

评论区