1.1 方法1:PURGE MASTER LOGS
語法:
- PURGE { BINARY | MASTER } LOGS
- { TO 'log_name' | BEFORE datetime_expr }
用於刪除列於在指定的日志或日期之前的日志索引中的所有二進制日志。這些日志也會從記錄在日志索引文件中的清單中被刪除,這樣被給定的日志成為第一個。
實例:
- PURGE BINARY LOGS TO 'mysql-bin.000002';
- PURGE BINARY LOGS BEFORE '2014-04-28 23:59:59';
分別表示:刪除mysql-bin.000002之前的日志(不包括mysql-bin.000002)
刪除2014-04-28 23:59:59時間點之前的日志
具體演示:刪除某個時間點之前的日志
具體演示:刪除某個日志之前的日志
注意事項:
在刪除binlog日志同時,也會清理MySQL-bin.index的文件記錄,清理完后命令中指定的日志文件成為第一個。
主從架構下,如果復制正在進行中,執行該命令是安全的,例如slave正在讀取我們要刪除的log,該語句將什么也不會做,並返回一個錯誤;如果復制是停止的,我們刪除了一個slave還未讀取的日志,則復制重新建立連接時將會失敗。
建議操作步驟:
a 在每個從屬服務器上,使用SHOW SLAVE STATUS來檢查它正在讀取哪個日志。
b 使用SHOW MASTER LOGS獲得主服務器上的一系列日志。
c 在所有的從屬服務器中判定最早的日志。這個是目標日志。如果所有的從屬服務器是最新的,這是清單上的最后一個日志。
d 備份您將要刪除的所有日志。(這個步驟是自選的,但是建議采用。)
e 清理除目標日志之外的所有日志。
1.2 方法2:手動刪除binlog日志文件
1.2.1 查看日志文件:
1.2.2 刪除文件mysql-bin.000009
- [root@localhost data]# rm -f mysql-bin.000009
1.2.3 編輯mysql-bin.index
刪除掉一行./mysql-bin.000009
1.3 方法3:指定過期天數(expire_logs_days)
該參數為全局可動態調整參數,默認值為0,即關閉,取值范圍0-99。
1.3.1 參數的查看:
- mysql> show variables like 'expire_logs_days';
- +------------------+-------+
- | Variable_name | Value |
- +------------------+-------+
- | expire_logs_days | 0 |
- +------------------+-------+
1.3.2 參數調整:
例如我們設置過期為60天
設置完后紅色標注的3個binlog日志將會被刪除。
設置參數:
- mysql> set global expire_logs_days = 60;
- Query OK, 0 rows affected (0.05 sec)
- mysql> show variables like 'expire_logs_days';
- +------------------+-------+
- | Variable_name | Value |
- +------------------+-------+
- | expire_logs_days | 60 |
- +------------------+-------+
刷新日志查看,上述三個日志被清除掉了。
/******************************************************************************/
my.cnf 配置文件中的參數 expire_logs_days 默認值為0,表示“不要自動刪除”
啟動時和二進制日志循環時可能刪除
語法:mysql -u -p進去之后 執行:
set GLOBAL expire_logs_days=5;
但是設置了 不會馬上生效
需要執行:
1.執行 flush logs;
(關閉當前的二進制日志文件並創建一個新文件,新的二進制日志文件的名字在當前的二進制文件的編號上加1。)
2.或者等待當前的日志文件寫滿設定的大小(重啟服務器可選)
expire_logs_days=5 --表示自動刪除5天以前的日志
/******************************************************************************/
- mysql> flush logs;
- Query OK, 0 rows affected (0.07 sec)
- mysql> show master logs;
- +------------------+-----------+
- | Log_name | File_size |
- +------------------+-----------+
- | mysql-bin.000013 | 4097 |
- | mysql-bin.000014 | 54431 |
- | mysql-bin.000015 | 729 |
- | mysql-bin.000016 | 107 |
- +------------------+-----------+
1.3.3 注意事項
在雙機復制環境下,應確保過期天數不應小於從機追趕主機binlog日志的時間。
1.3.4 觸發過期刪除的條件
每次進行 LOG flush的時候會自動刪除過期的日志。
觸發log flush的條件為:
1. 重啟mysql;
2. BINLOG文件大小達到參數max_binlog_size限制;
3. 手工執行命令。
1.4 方法4:重置binlog(reset master)
語法:
- RESET MASTER;
解釋:
該方法可以刪除列於索引文件中的所有二進制日志,把二進制日志索引文件重新設置為空,並創建一個以.000001為后綴新的二進制日志文件。
該語法一般只用在主從環境下初次建立復制時。
在主從復制進行過程中,該語句是無效的。
主從環境下的配置步驟:
a. 啟動master和slave,開啟replication(即復制)
b. 在master上運行一些測試的語句,看數據是否能夠復制到 slave上面
c. 當復制運行正常的話,就在從上stop slave 然后執行 reset slave,去掉不需要的數據
d. 在master上面執行reset master 清除測試產生的數據
2 使用到的命令列表
- show master logs;
- PURGE BINARY LOGS TO 'mysql-bin.000001';
- PURGE BINARY LOGS BEFORE '2014-04-28 23:59:59';
- show variables like 'expire_logs_days';
- set global expire_logs_days = 60;
- flush logs;
- RESET MASTER;
****************************************************************************************
原文地址:http://blog.csdn.net/jesseyoung/article/details/40979129
博客主頁:http://blog.csdn.net/jesseyoung
****************************************************************************************