清理 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 断链的常见诱因。
保留时长要覆盖最长可能的停机窗口:采集端一次故障修了几个小时才恢复,如果日志保留期短于这个时间,就只能重建全量基线。