# 錯誤日誌
Disk is full writing './mysql-bin.~rec~' (Errcode: 28).
Waiting for someone to free space...
# df -h 確認
/dev/sda1 30G 28G 0 100% /
/var/lib/mysql 被 mysql-bin.0000xx 佔滿 (案例中單檔 270MB,累計 500MB+)。
systemctl stop mysqldcd /var/lib/mysql
ls -lh mysql-bin.*
rm -f mysql-bin.000011 mysql-bin.000012 mysql-bin.000013 mysql-bin.000014
# 保留 000020、000021 及 index 檔
systemctl start mysqld⚠️ 切勿刪除 mysql-bin.index**!它記錄所有 binlog 檔名,刪除會導致 MySQL 遺失 binlog 追蹤能力。
vim /etc/my.cnf
# 註釋掉以下兩行
# log_bin = mysql-bin
# binlog_format = mixed
systemctl restart mysqld
[mysqld]
log_bin = mysql-bin
binlog_format = ROW
binlog_expire_logs_seconds = 604800 # 7 天 (8.0+)
# 或舊版
expire_logs_days = 7
max_binlog_size = 100M
-- 清理 7 天前的 binlog
PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);
-- 或清理到指定檔案
PURGE BINARY LOGS TO 'mysql-bin.000020';
此命令會同步更新 mysql-bin.index,安全無風險。
df -h 磁碟使用率 > 80% 告警。SHOW BINARY LOGS; 檔案數量/總大小納入監控。logrotate 對 error.log、slow.log 切割壓縮。expire_logs_days / binlog_expire_logs_seconds 生效。