mysql之二進制日誌清理及過期設置

1 幾種方法

    1.1 方法1:PURGE MASTER LOGS

    語法:
  1. PURGE { BINARY | MASTER } LOGS
  2. { TO 'log_name' | BEFORE datetime_expr }

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

    實例:

  1. PURGE BINARY LOGS TO 'mysql-bin.000002';
  2. 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 參數的查看:

  1. mysql> show variables like 'expire_logs_days';
  2. +------------------+-------+
  3. | Variable_name | Value |
  4. +------------------+-------+
  5. | expire_logs_days | 0 |
  6. +------------------+-------+
    1.3.2 參數調整:

    例如我們設置過期爲60天


    設置完後紅色標註的3個binlog日誌將會被刪除。

    設置參數:

  1. mysql> set global expire_logs_days = 60;
  2. Query OK, 0 rows affected (0.05 sec)
  3. mysql> show variables like 'expire_logs_days';
  4. +------------------+-------+
  5. | Variable_name | Value |
  6. +------------------+-------+
  7. | expire_logs_days | 60 |
  8. +------------------+-------+
    刷新日誌查看,上述三個日誌被清除掉了。

  1. mysql> flush logs;
  2. Query OK, 0 rows affected (0.07 sec)
  3. mysql> show master logs;
  4. +------------------+-----------+
  5. | Log_name | File_size |
  6. +------------------+-----------+
  7. | mysql-bin.000013 | 4097 |
  8. | mysql-bin.000014 | 54431 |
  9. | mysql-bin.000015 | 729 |
  10. | mysql-bin.000016 | 107 |
  11. +------------------+-----------+
    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 使用到的命令列表

  1. show master logs;
  2. PURGE BINARY LOGS TO 'mysql-bin.000001';
  3. PURGE BINARY LOGS BEFORE '2014-04-28 23:59:59';
  4. show variables like 'expire_logs_days';
  5. set global expire_logs_days = 60;
  6. flush logs;
  7. RESET MASTER;

****************************************************************************************
    原文地址:http://blog.csdn.net/jesseyoung/article/details/40979129
    博客主頁:http://blog.csdn.net/jesseyoung
****************************************************************************************

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章