Mysql

刪除 mysql-bin 文件是否安全?

  • August 21, 2021

我在 mysql 中有 MM 複製,我想在框中擠出一些可用空間來刪除不必要的文件,我在裡面遇到了這些mysql-bin文件/var/db/mysql/有數百個這樣的文件mysql-bin.000123mysql-bin.000223等等。我已經通過做檢查了 mysql 複製show master statusshow slave status它們是在某些位置使用一些 mysql-bin 文件,但我猜所有其他 bin 文件都是剩餘的,將不再使用。在這種情況下,除了複製目前指向的文件之外,刪除所有這些 mysql-bin 文件是否安全?

如果刪除是安全的,那麼有什麼辦法可以在這些文件不使用時自動刪除它們?

請不要只在作業系統中刪除它們。

您需要讓 mysqld 為您執行此操作。以下是 mysqld 的管理方式:

該文件mysql-bin.[index]保留了 mysqld 生成並自動輪換的所有二進制日誌的列表。清除 binlogs 的機制mysql-bin.[index]有:

PURGE BINARY LOGS TO 'binlogname';
PURGE BINARY LOGS BEFORE 'datetimestamp';

這些將清除您剛剛指定的二進制日誌或時間戳之前的所有二進制日誌。

例如,如果您執行

PURGE BINARY LOGS TO 'mysql-bin.000223';

這將清除之前的所有二進制日誌mysql-bin.000223

如果你跑

PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 3 DAY) + INTERVAL 0 SECOND;

這將在 3 天前的午夜之前清除所有二進制日誌。

如果您想讓 binlog 自動輪換並保留 3 天,只需設置以下內容:

mysql> SET GLOBAL expire_logs_days = 3;

然後將其添加到/etc/my.cnf

[mysqld]
expire_logs_days=3

mysqld 會為你刪除它們的日誌

顯示從屬狀態\G

這很關鍵。執行時SHOW SLAVE STATUS\G,您將看到來自 Master 的兩個二進制日誌:

  • Master_Log_File
  • Relay_Master_Log_File

當複制很少或沒有延遲時,這些通常是相同的值。當有很多複制滯後時,這些值是不同的。只是為了簡單起見,選擇任何東西Relay_Master_Log_File,然後回到 Master 並執行

PURGE BINARY LOGS TO 'Whatever Relay_Master_Log_File Is';

這樣,複製就不會中斷。

引用自:https://dba.stackexchange.com/questions/41050