萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 二進制日誌 (Binlog) 刪除與管理完整指南

四種刪除方式對比

方式命令適用場景風險
1. 清空全部RESET MASTER;全新環境、測試庫、主從重建前**刪除所有 binlog,從庫將中斷**
2. 刪除指定檔案前PURGE BINARY LOGS TO 'mysql-bin.000018';保留最新 N 個檔案需確認從庫已同步至該檔案
3. 刪除指定時間前PURGE BINARY LOGS BEFORE '2024-05-01 00:00:00';按時間保留策略同前
4. 自動過期expire_logs_days = 7 (5.7) / binlog_expire_logs_seconds = 604800 (8.0)生產環境標準配置無風險,自動化

操作實戰

查看現有 Binlog

SHOW BINARY LOGS;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |   1357315 |
| mysql-bin.000002 |       117 |
...
| mysql-bin.000021 |    181229 |
+------------------+-----------+

刪除至指定檔案 (保留 000018 及之後)

PURGE BINARY LOGS TO 'mysql-bin.000018';
SHOW BINARY LOGS;  -- 僅剩 000018 之後

查看 Binlog 事件內容

SHOW BINLOG EVENTS IN 'mysql-bin.000018' LIMIT 10;
-- 或命令列工具
mysqlbinlog --no-defaults mysql-bin.000018 | head -50

關閉 Binlog(非主庫/不需同步/備份場景)

[mysqld]
# 註釋或移除
# log-bin=mysql-bin
# binlog_format=mixed

# 重啟生效
systemctl restart mysqld

生產環境最佳實踐

  1. 啟用自動過期:binlog_expire_logs_seconds = 604800 (7 天),MySQL 8.0 預設 30 天。
  2. 限制單檔大小:max_binlog_size = 100M,避免單檔過大難以傳輸/解析。
  3. Row 格式:binlog_format = ROW,支援完整行級復制,避免非確定性函數問題。
  4. GTID 模式:gtid_mode=ON + enforce_gtid_consistency=ON,簡化故障轉移與拓撲變更。
  5. 異地備份 Binlog:定期 rsync 或 mysqlbinlog --raw --read-from-remote-server 同步至異地,防單點災難。
  6. 監控磁碟空間:Binlog 目錄佔用超過 80% 告警,防止寫入阻塞。

手動刪除檔案系統層面檔案(極不推薦)

# 只有在 MySQL 已停止、確認無從庫、無備份需求時
systemctl stop mysqld
rm -f /var/lib/mysql/mysql-bin.00000*
# 必須同步刪除 index 檔案條目,否則啟動報錯
systemctl start mysqld

警告:直接 rm 會導致 mysql-bin.index 與實際檔案不一致,MySQL 啟動失敗或從庫報錯。**嚴禁在運行中直接刪檔**。

總結

Binlog 管理核心原則:**自動過期為主,手動 PURGE 為輔,嚴禁 rm 物理刪除**。配置 expire_logs_days/binlog_expire_logs_seconds、max_binlog_size、binlog_format=ROW、GTID,構建零維護、高可靠的 Binlog 生命週期管理。

copyright © 萬盛學電腦網 all rights reserved