/var/lib/mysql/ 下出現大量 mysql-bin.000001、mysql-bin.000002... 檔案,單檔可達 GB 級,總量遠超資料本身,導致 df -h 顯示磁碟 98%+ 滿載。
mysql -u root -p
mysql> PURGE BINARY LOGS BEFORE '2023-01-01 00:00:00';
# 或保留最近 N 天
mysql> PURGE BINARY LOGS TO 'mysql-bin.000050';
優點: 自動更新索引檔,不會損壞複寫。
mysql> RESET MASTER;
刪除所有 Binlog,重新從 mysql-bin.000001 開始。**會中斷所有從庫複寫**,謹慎使用。
# /etc/my.cnf 或 /etc/mysql/my.cnf
[mysqld]
log_bin = mysql-bin
expire_logs_days = 7 # 自動清理 7 天前的 Binlog
max_binlog_size = 100M # 單檔上限,防止單檔過大
binlog_expire_logs_seconds = 604800 # MySQL 8.0 替代參數(秒)
修改後 systemctl restart mysqld 生效。
# /etc/my.cnf
[mysqld]
# 註解或移除以下行
# log_bin = mysql-bin
# log-bin = mysql-bin
# 或顯式關閉(MySQL 8.0+)
disable_log_bin
重啟 MySQL 後生效。警告: 關閉 Binlog 將無法進行時間點恢復(PITR)與主從複寫。
mysql -u root -pPURGE BINARY LOGS BEFORE '2023-01-01'; 或 RESET MASTER;my.ini 註解 log-bin=mysql-binnet stop mysql & net start mysql# 1. 先停止寫入流量(應用層熔斷/維護模式)
# 2. 移動舊 Binlog 到其他磁碟(軟連結回來)
mv /var/lib/mysql/mysql-bin.00000* /mnt/backup_disk/
ln -s /mnt/backup_disk/mysql-bin.000001 /var/lib/mysql/mysql-bin.000001
# ... 依序建立軟連結
# 3. 或截斷當前寫入檔(極端情況)
> /var/lib/mysql/mysql-bin.000050 # 僅清空內容,保留 inode
# 4. 執行 PURGE BINARY LOGS 釋放空間
# 5. 恢復流量
expire_logs_days = 7(或依備份策略調整)disk_usage 與 binlog_count,設定告警SHOW BINARY LOGS 與 SHOW SLAVE STATUS 一致性