
MySQL Binlog 檔案數量日益增加,其大小以 GB 為單位增加。如何阻止 binlog 檔案大小不斷增加?它們正在填滿磁碟空間。
答案1
對於 MySQL8,他們預設會開啟二進位日誌記錄,而二進位日誌的預設清除(過期/刪除)設定為 30 天。
進入 SSH 和 mysql 後,您可以使用以下命令
顯示二進位日誌
mysql> SHOW BINARY LOGS;
手動清除二進位日誌直到某個時刻
mysql> PURGE BINARY LOGS TO 'binlog.000142';
將自動預設清除到期時間從 30 天(預設)變更為 3 天
mysql> SET GLOBAL binlog_expire_logs_seconds = 259200;
Query OK, 0 rows affected (0.00 sec)
mysql> SET PERSIST binlog_expire_logs_seconds = 259200;
Query OK, 0 rows affected (0.01 sec)
上面的值以秒為單位,即3天以秒為單位=(60秒x 60分鐘x 24小時x 3天)= 259200
答案2
如果你不需要保留這些二進位日誌,你可以在 MySQL 中「修剪」它們,如下所示:
mysql> PURGE BINARY LOGS BEFORE '2021-01-01 00:00:00';
當然,您可以將日期更改為您想要的任何時間。如果您想修剪到特定的二進位日誌文件,可以這樣做:
mysql> PURGE BINARY LOGS TO 'mysql-bin.12345';
請務必指定您要修剪到的實際文件。
重要的:不要簡單地從檔案系統中刪除檔案。 MySQL 在將來的某個時候會以一種可怕的方式抱怨。透過使用節省不必要的停機時間 PURGE BINARY LOGS
來自 MySQL 內部的命令。
答案3
複製和某些形式的備份需要二進位日誌。聽起來你也沒有做。
為了更改設置,我喜歡添加一個新文件,例如(其中“rj”是我的姓名縮寫):
/etc/mysql/mysql.conf.d/rj.cnf
並進行覆蓋,如下圖所示。在裡面。進行更改後,
sudo systemctl restart mysql
log_bin
控制binlog的創建。
要保持它們被清除,請添加binlog_expire_logs_seconds = 86400
(或其他數字)。
另一個設定控制每個 binlog 檔案的最大大小;這不會影響所使用的總磁碟空間,除了最後一個檔案將保留到「過期」為止。任何重新啟動(或重新啟動 mysql)後都會啟動新的 binlog,因此您可能會看到很多小檔案。
所以,我的 rj.cnf 檔案可能包含以下一些內容:
# Added by Rick James
[mysqld]
log_bin = # turn off
binlog_expire_logs_seconds = 86400 # 1 day
max_binlog_size = 104857600 # 100M
答案4
您可以使用可用的腳本 https://github.com/Thibs/monitor_mysql_binary_logging/blob/main/monitor_mysql_binary_logging.sh
管理二進位日誌檔案的大小/數量