MySQL binlog越积越多因默认不自动清理,需配置binlog_expire_logs_seconds或手动PURGE;误删不可恢复,须提前备份并校验;slow_log和error_log需用logrotate+copytruncate归档。
MySQL的
为什么越积越多
默认开启的
会持续追加写入,不自动清理。哪怕业务量不大,几个月下来也可能占几十GB——尤其当有大事务、频繁
或
时,单个
文件就可能几百MB。
常见错误现象:
看到上百个文件;磁盘报警但
显示
目录异常臃肿;备份失败报“no space left on device”。
没设或设为0(MySQL 8.0+已弃用,改用
)
手动执行过
但没配成定时任务
主从复制延迟高,导致从库还没读完的
不敢删
安全清理
的三步实操
不能直接
日志文件,MySQL进程还在写,会崩溃。必须走SQL接口或配置驱动。
先确认从库同步状态:
,检查
和
,确保要删的
已被从库读取完毕
临时清理:用
(删掉指定文件之前的所有日志)或
永久生效:在
里加
(30天),然后
重启写入新文件
和
怎么压缩归档
这两类日志不支持MySQL内置轮转,得靠外部工具。直接
或
原文件会导致MySQL写失败(它只认固定文件名)。
MySQL(Linux)
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
下载
停写再操作:
→
+
→
(注意:部分版本重启后需重设
)
更稳妥用
:配置
,关键项包括
(清空原文件而非重命名,避免MySQL丢失句柄)、
、
和
路径别写错:
默认是
,但可能被
覆盖,务必用
确认真实路径
误删
后还能恢复吗
不能。MySQL不存
的校验或快照,删了就是没了。所谓“恢复”,只能靠提前备份的
文件或全量备份+后续
回放。
线上环境务必启用
(MySQL 5.6.2+默认),能早发现文件损坏
定期把
同步到另一台机器:
,比等出事再抢救靠谱得多
如果用了
,删
前多看一眼
,避免从库因缺失GTID区间卡住
最常被忽略的是主从场景下
命令的时机判断——不是看时间,而是看
里的
对应哪个
文件。差一个文件,从库就再也追不上了。
binlogbinlogUPDATELOAD DATAbinlogSHOW BINARY LOGS;df -h/var/lib/mysqlexpire_logs_daysbinlog_expire_logs_secondsPURGE BINARY LOGSbinlogbinlogrm -fSHOW SLAVE STATUS\GSeconds_Behind_MasterRelay_Master_Log_FilebinlogPURGE BINARY LOGS TO 'mysql-bin.000123';PURGE BINARY LOGS BEFORE '2024-05-01 00:00:00';my.cnfbinlog_expire_logs_seconds = 2592000mysqladmin flush-logsslow_query_logerror_logmvgzipSET GLOBAL slow_query_log = OFF;mvgzipSET GLOBAL slow_query_log = ON;slow_query_log_filelogrotate/etc/logrotate.d/mysqlcopytruncatecompressdailyrotate 7slow_query_log_file/var/lib/mysql/slow.logmysqld_safeSELECT @@slow_query_log_file;binlogbinlogbinlogbinlogbinlog_checksum = CRC32binlogrsync -av --delete /var/lib/mysql/mysql-bin.* user@backup:/backup/binlog/GTIDbinlogSELECT @@gtid_executed;PURGESHOW SLAVE STATUSExec_Master_Log_Posbinlog