mysql運維-二進制日誌BINARY LOG清理_ mysql-bin磁盤佔用高處理辦法

1.1 方法1:PURGE MASTER LOGS

語法:mysql

PURGE { BINARY | MASTER } LOGS
{ TO 'log_name' | BEFORE datetime_expr }sql

用於刪除列於在指定的日誌或日期以前的日誌索引中的全部二進制日誌。這些日誌也會從記錄在日誌索引文件中的清單中被刪除,這樣被給定的日誌成爲第一個。安全

 

例子:服務器

PURGE BINARY LOGS TO 'mysql-bin.000002';    刪除mysql-bin.000002以前的日誌(不包括mysql-bin.000002)
PURGE BINARY LOGS BEFORE '2014-04-28 23:59:59';    刪除2014-04-28 23:59:59時間點以前的日誌     架構

    具體演示:刪除某個時間點以前的日誌測試

具體演示:刪除某個日誌以前的日誌spa

  注意事項:.net

        在刪除binlog日誌同時,也會清理mysql-bin.index的文件記錄,清理完後命令中指定的日誌文件成爲第一個。
        主從架構下,若是複製正在進行中,執行該命令是安全的,例如slave正在讀取咱們要刪除的log,該語句將什麼也不會作,並返回一個錯誤;若是複製是中止的,咱們刪除了一個slave還未讀取的日誌,則複製從新創建鏈接時將會失敗。日誌


    建議操做步驟:blog

        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)  刪除日誌後,配置此環境變量,防止後期mysql再次產生大量日誌。

    該參數爲全局可動態調整參數,默認值爲0,即關閉,取值範圍0-99。

1.3.1 參數的查看:

mysql> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 0 |
+------------------+-------+

 

 1.3.2 參數調整:

    例如咱們設置過時爲60天 (如無主從備份,建議設置爲7天

設置完後紅色標註的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 |
+------------------+-------+

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 |
+------------------+-------+

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;

 

 

引自:

https://blog.csdn.net/jesseyoung/article/details/40979129

相關文章
相關標籤/搜索