首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 巨量 Binlog 實戰清理:主從環境下 PURGE MASTER LOGS 安全操作全記錄

     編輯:MySQL 綜合教學

生產案例:主庫磁碟 200GB+ Binlog 緊急清理實錄

記錄一次主從架構下,主庫 /var/lib/mysql 被 200GB+ binlog 撐爆的完整處理流程,含指令、驗證步驟與磁碟釋放結果。

一、問題現場

  • 架構:MySQL Master / Slave
  • 症狀:主庫磁碟使用率 95%+,du -sh /var/lib/mysql 顯示 binlog 佔 200GB+
  • 目標:安全刪除歷史 binlog,釋放空間,不中斷複制

二、核心指令

PURGE {MASTER | BINARY} LOGS TO 'log_name';
PURGE {MASTER | BINARY} LOGS BEFORE 'YYYY-MM-DD hh:mm:ss';

MASTER 與 BINARY 同義。

三、安全清理標準流程(必須遵循)

  1. 從庫確認:SHOW SLAVE STATUS\G 記錄 Master_Log_File 與 Relay_Master_Log_File
  2. 主庫清單:SHOW MASTER LOGS 取得所有 binlog 檔名與大小
  3. 基準點判定:所有從庫中「最舊仍在讀取」的 binlog = 保留基準點
  4. 備份(建議):將待刪除 binlog 複製至備份磁碟/異地
  5. 執行清理:PURGE MASTER LOGS TO '基準檔名';

四、實操記錄

1. 從庫狀態

mysql> SHOW SLAVE STATUS\G;
...
Master_Log_File: tc-ns-comment-db00-bin.000162
Relay_Master_Log_File: tc-ns-comment-db00-bin.000162
...

2. 主庫清單(節錄)

mysql> SHOW MASTER LOGS;
+------------------------------------------+-----------+
| Log_name                                 | File_size |
+------------------------------------------+-----------+
| tc-ns-comment-db00-bin.000001            |   1073741824 |
...
| tc-ns-comment-db00-bin.000162            |   1073741824 |
+------------------------------------------+-----------+

3. 執行清理

mysql> PURGE MASTER LOGS TO 'tc-ns-comment-db00-bin.000070';
Query OK, 0 rows affected (120.45 sec)
# 等待約 2 分鐘,刪除 000001~000069

4. 驗證釋放空間

mysql> QUIT;
$ du -sh /var/lib/mysql
# 從 200GB+ 降至 50GB 級,釋放超 150GB

五、關鍵注意事項

  • 從庫正在讀取的檔案不可刪:否則報錯 ERROR 1513 (HY000)。
  • 從庫離線時刪除其需求檔:從庫重啟後複制中斷,需重新同步。
  • 複制進行中可安全執行:無需停止 Slave SQL 執行緒。
  • 大量刪除耗時:檔案系統層面刪除大量 inode 需秒~分級時間,耐心等待。
  • 事後檢查:SHOW SLAVE STATUS\G 確認 Seconds_Behind_Master=0。

六、長效機制

[mysqld]
expire_logs_days = 7
binlog_format = MIXED
max_binlog_size = 1G

配合監控告警(binlog 總大小 > 50GB 觸發),徹底杜絕磁碟爆滿風險。

此案例驗證:標準流程 + 耐心等待 = 安全釋放空間,零複制中斷。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved