首页/数据/数据工程与 ETL 速查/PURGE BINARY LOGS:清理 binlog
CDC 与同步53 条

PURGE BINARY LOGS:清理 binlog

手动清理 binlog 用 PURGE BINARY LOGS TO(删除到指定文件之前)或 BEFORE(删除指定时间点之前),需要 BINLOG_ADMIN 或 SUPER 权限。清理前必须确认从库与 CDC 消费位点都不在待删区间内,否则只能重建链路。

清理 binlog 的正确姿势

PURGE BINARY LOGS 用来手动删除二进制日志:TO 形式删除指定文件之前的所有文件,BEFORE 形式删除某个时间点之前产生的文件。它是不可逆操作,删掉就找不回来。清理前必须核对两件事——从库的复制位点和 CDC 消费位点是否都落在保留区间之外。日常更应该依赖自动过期参数,手动清理只在磁盘告急的应急场景使用。

基本信息

权限BINLOG_ADMIN(或 SUPER)
TO 形式删除指定文件之前的所有日志
BEFORE 形式删除指定时间点之前产生的日志
可恢复性删除后无法找回,只能依赖备份
替代方式binlog_expire_logs_seconds 自动过期
前置检查SHOW BINARY LOGS 与各消费方当前位点

按文件与时间清理

按文件与时间清理
-- 删除 mysql-bin.000150 之前的所有文件
PURGE BINARY LOGS TO 'mysql-bin.000150';
-- 删除 2026-10-01 之前产生的文件
PURGE BINARY LOGS BEFORE '2026-10-01 00:00:00';

-- 清理前后核对:文件列表与各单位消费位点
SHOW BINARY LOGS;
SHOW REPLICA STATUS\G   -- 查看从库当前读取的日志文件

典型使用场景

  • 磁盘告急:自动过期来不及,需要立即释放空间
  • 沉淀归档:把旧日志归档到对象存储后再从实例上删除
  • 迁移收尾:实例已确认不再承担复制源角色,清理历史日志
  • 保留期调整:把保留时长改小后,用一次手动清理加速收敛
  • 演练与验证:在测试环境确认清理流程与位点核对步骤

清理前后检查项

检查项目的怎么看
日志文件列表确认待删范围SHOW BINARY LOGS
从库读取位点避免从库断流复制状态里的日志文件与偏移
CDC 消费位点避免采集端无法续传采集工具的状态与位点记录
备份可用性确认还能恢复核对最近一次全量备份时间
保留期参数让后续自动过期接管查看 binlog 过期相关变量
清理前先用 SHOW BINARY LOGS 与各消费方位点核对;大促前「腾空间」式清理是 CDC 断链的常见诱因。
保留时长要覆盖最长可能的停机窗口:采集端一次故障修了几个小时才恢复,如果日志保留期短于这个时间,就只能重建全量基线。

易错点

  • 清理时只看磁盘剩余空间,不看 CDC 消费位点,把还没采完的日志删掉
  • 把 PURGE 当成日常操作:应优先用自动过期 + 保留期余量监控,手工清理只用于应急
  • 清理范围写成整套文件名通配,误删当前正在写入的日志
  • 只核对从库不核对 CDC 采集端,非复制类消费者被遗漏
  • 清理后才想起归档,日志已经从实例上消失

数据来源与参考

  • MySQL 8.0 Reference Manual: PURGE BINARY LOGS Statement
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌