MySQL 自動清理binlog日誌的方法


開啟MySQL binlog日誌的服務器,如果不設置自動清理日誌,默認binlog日誌一直保留著,時間一長,服務器磁盤空間被binlog日誌占滿,導致MySQL數據庫出錯。

使用下麵方法可以安全清理binlog日誌

一、沒有主從同步的情況下清理日誌

mysql -uroot -p123456 -e 'PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ),INTERVAL 5 DAY)';

#mysql 定時清理5天前的binlog

mysql -u root -p  #進入mysql 控製台

reset master;  #重置binlog

二、MySQL主從同步下安全清理binlog日誌

1、mysql  -u root -p   #進入從服務器mysql控製台
show slave status\G;   #檢查從服務器正在讀取哪個日誌,有多個從服務器,選擇時間最早的一個做為目標日誌。
2、進入主服務器mysql控製台

show master log;   #獲得主服務器上的一係列日誌
PURGE MASTER LOGS TO 'binlog.000058';   #刪除binlog.000005之前的,不包括binlog.000058
PURGE MASTER LOGS BEFORE '2016-06-22 13:00:00';  #清除2016-06-22 13:00:00前binlog日誌
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);  #清除3天前binlog日誌

三、設置自動清理MySQL binlog日誌

vi  /etc/my.cnf  #編輯配置

expire_logs_days = 15 #自動刪除15天前的日誌。默認值為0,表示從不刪除。log-bin=mysql-bin #注釋掉之後,會關閉binlog日誌binlog_format=mixed #注釋掉之後,會關閉binlog日誌

:wq!  #保存退出

下麵是其它網友給出的方法,大家可以參考一下

MYSQL主從複製(replication)采用 RBR 模式後,binlog的格式為"ROW",能解決很多原先出現的主鍵重複問題。
在一個繁忙的master db server上,binlog日誌文件增長速度很快,如果不定時清除,硬盤空間很快就會被充滿。
設置自動清理mysql binlog日誌,配置my.cnf:

expire_logs_days = 10

在運行時修改:

show binary logs; 
show variables like '%log%'; 
set global expire_logs_days = 10;

清除之前可以采用相應的備份策略。

手動刪除10天前的MySQL binlog日誌:

PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 10 DAY);
show master logs;

MASTER和BINARY是同義詞。

上一篇 下一篇