如何解決MySQL Binlog檔案大小不斷增加的問題?

如何解決MySQL Binlog檔案大小不斷增加的問題?

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

管理二進位日誌檔案的大小/數量

相關內容