MySQL 8.0+ 必须配置 binlog_expire_logs_seconds(如604800秒)并设 binlog_expire_logs_auto_purge=ON 才能自动清理binlog,expire_logs_days已废弃且设则报错3683;需先查log_bin是否启用、该参数是否非零且auto_purge为ON,再手动PURGE前核对从库Relay_Master_Log_File安全下限,最后执行FLUSH LOGS释放句柄。

MySQL 8.0 的 binlog 占用磁盘过大,根本不是日志“太多”,而是默认永不清除——binlog_expire_logs_seconds 默认为 0,且 expire_logs_days 已废弃不生效。不改配置、不手动清理,它就会一直涨,直到撑爆磁盘。
确认 binlog 是否启用及清理策略是否生效
别凭感觉配,先查实况。很多问题其实压根没开 binlog,或开了但参数根本没生效:
- 运行
mysql -uroot -p -e "SHOW VARIABLES LIKE 'log_bin';",返回ON才说明已启用 - 执行
SHOW VARIABLES LIKE 'binlog_expire_logs_seconds';,若值为0或空,代表自动清理完全关闭 - 执行
SHOW VARIABLES LIKE 'binlog_expire_logs_auto_purge';,必须是ON,否则设了秒数也白搭 - 用
SHOW BINARY LOGS;看文件数量和总大小,File_size 列加起来超 2GB 就该动手了
MySQL 8.0+ 必须用 binlog_expire_logs_seconds 配置自动清理
expire_logs_days 在 MySQL 8.0.11+ 中已被官方弃用,设了不仅不生效,还可能触发错误 [3683]。必须用秒级参数,并写进配置文件才真正可靠:
- 7 天对应秒数是
604800,临时生效:SET GLOBAL binlog_expire_logs_seconds = 604800; - 永久生效:编辑宝塔路径
/www/server/mysql/etc/my.cnf(不是/etc/my.cnf),在[mysqld]段末尾添加:binlog_expire_logs_seconds = 604800binlog_expire_logs_auto_purge = ON - 若之前设过
expire_logs_days,顺手清掉:SET GLOBAL expire_logs_days = 0;,避免冲突 - 保存后必须重启:
systemctl restart mysqld,再查SHOW VARIABLES LIKE 'binlog_expire_logs_seconds';确认值已更新
PURGE BINARY LOGS 手动清理前必须核对主从状态
配置只管“未来”,已堆积的旧日志不会自动删。磁盘告急时得手动清理,但误删一条就断主从——PURGE 是永久删除、不可回滚的操作:
- 主库上执行
SHOW MASTER STATUS;,记下当前File字段(如mysql-bin.000042) - 每台从库执行
SHOW SLAVE STATUS\G,重点看Relay_Master_Log_File(如mysql-bin.000035) - 取所有从库中
Relay_Master_Log_File序号最小的那个,就是安全下限——最多只能PURGE TO 'mysql-bin.000036'; - 如果是 GTID 模式(
gtid_mode = ON),禁止用TO,必须用时间点:PURGE BINARY LOGS BEFORE '2026-06-25 00:00:00'; - 执行前务必先
SHOW BINARY LOGS;确认目标文件存在,避免输错序号(比如把000036写成000030)
清理后空间没释放?大概率是文件句柄没关
PURGE 后 df -h 显示空间没变,不是命令失效,而是 Linux 下文件虽被 unlink,MySQL 进程仍持有打开句柄:
- 验证方式:
lsof | grep deleted,能看到类似mysqld.*deleted的条目 - 立刻释放空间的方法:执行
FLUSH LOGS;(触发日志切换,内核回收句柄),或直接重启 MySQL - 注意:
RESET MASTER在有从库时绝对禁用,它会重置序列号,导致从库报错Got fatal error 1236
最易被忽略的点是:即使配置了 binlog_expire_logs_seconds,MySQL 也不会立即删旧文件——它只在启动、FLUSH LOGS 或 binlog 切换时检查过期。所以配完别忘了补一句 FLUSH LOGS;,否则你得等几个小时甚至几天才看到效果。


















