MySQL 的 binlog(二进制日志)文件 随着时间推移会越来越多、占用大量磁盘空间
所以需要定期清理旧的 binlog。
下面是清理 binlog 的安全方法和建议做法👇
🧩 一、查看当前 binlog 状态
在 MySQL 控制台执行:
SHOW BINARY LOGS;可以看到所有 binlog 文件列表和大小。
再看当前正在写入的 binlog:
SHOW MASTER STATUS;输出示例:
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| binlog.000254 | 123456 | | |
+------------------+----------+--------------+------------------+当前正在写入的是 binlog.000254,只能清理比它旧的文件。
🧹 二、安全清理方法(推荐命令)
1️⃣ 按文件名清理
删除某个文件之前的所有 binlog:
PURGE BINARY LOGS TO 'binlog.000250';👉 表示清理掉 binlog.000249 及更早的文件,保留 binlog.000250 之后的日志。
2️⃣ 按时间清理
删除指定时间点之前的 binlog:
PURGE BINARY LOGS BEFORE '2025-11-01 00:00:00';👉 比 2025-11-01 00:00:00 更早的 binlog 会被删除。
3️⃣ 设置自动清理策略(推荐配置)
动态设置 MySQL binlog 自动过期清理时间 的命令。
SET GLOBAL binlog_expire_logs_seconds = 604800;📘 参数解释
🧠 生效机制
从现在起,MySQL 会自动删除 7 天前生成的 binlog 文件。
不需要重启 MySQL,立即生效。
但 不会修改配置文件,MySQL 重启后会恢复默认值(除非你写入配置文件)。
💾 若想永久生效,请写入配置文件
编辑 /etc/my.cnf:
[mysqld]
binlog_expire_logs_seconds = 604800保存后重启服务:
systemctl restart mysqld🔍 验证当前设置
执行:
SHOW VARIABLES LIKE 'binlog_expire_logs_seconds';输出应类似:
+----------------------------+--------+
| Variable_name | Value |
+----------------------------+--------+
| binlog_expire_logs_seconds | 604800 |
+----------------------------+--------+
评论区