二進制日誌記錄所有資料變更,是主從複寫、時間點恢復 (PITR) 的核心。但若不加管理,會佔滿磁碟導致資料庫掛掉。本文完整說明查看、手動/自動清理、主從環境安全刪除流程。
-- 登入 MySQL
mysql -u root -p
-- 兩種等價指令
SHOW MASTER LOGS;
SHOW BINARY LOGS;
-- 輸出範例
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000010 | 63355376 |
+------------------+-----------+
-- 清空所有 binlog,重新從 000001 開始編號
RESET MASTER;
⚠️ 嚴禁在有從庫的主庫執行,會導致從庫複寫中斷、需重新搭建。
SHOW SLAVE STATUS\G
-- 關鍵欄位:Master_Log_File, Read_Master_Log_Pos
SHOW MASTER LOGS;
Master_Log_File 最小者即為目標檔案(不可刪)。-- 1. 指定檔案名稱:刪除 'mysql-bin.000080' 之前的所有
PURGE MASTER LOGS TO 'mysql-bin.000080';
PURGE BINARY LOGS TO 'mysql-bin.000080'; -- 同義
-- 2. 指定時間點:刪除 2023-01-01 00:00:00 之前的所有
PURGE MASTER LOGS BEFORE '2023-01-01 00:00:00';
PURGE BINARY LOGS BEFORE '2023-01-01 00:00:00';
編輯 /etc/my.cnf (或 /etc/mysql/my.cnf) [mysqld] 區段:
[mysqld]
# 保留 7 天 (單位:天),超期自動刪除
expire_logs_days = 7
# MySQL 8.0 新參數:以秒為單位,優先級高於 expire_logs_days
binlog_expire_logs_seconds = 604800 -- 7*24*3600
修改後重啟:systemctl restart mysqld 或 SET GLOBAL expire_logs_days = 7; (動態生效,但重啟失效,需寫入配置檔)。
[mysqld]
# 註解掉以下兩行
# log-bin=mysql-bin
# binlog_format=mixed
# 或顯式關閉
skip-log-bin
⚠️ 停用後無法搭建從庫、無法 PITR 恢復。僅建立純開發/測試實例時使用。
執行 PURGE 或 RESET MASTER 前,**務必先備份即將刪除的 binlog 檔案** (複製至異地儲存)。一旦誤刪導致從庫斷點丟失,需重新全量同步,極其耗時。
FLUSH LOGS、ROTATE 事件、啟動時檢查。可手動 FLUSH BINARY LOGS 觸發。datadir。Binlog 管理鐵律:主從環境「先問從庫、再刪主庫」、自動過期務必開啟、操作前必備份。這三條守住,磁碟不會爆、從庫不會斷。