mysql binlog管理

longqidong發表於2012-07-18

 檢視資料庫的日記資訊:

1.mysql> show binary logs;

mysql> show binary logs;

+------------------+-----------+

| Log_name         | File_size |

+------------------+-----------+

| mysql-bin.000009 |       125 |

| mysql-bin.000010 |       644 |

+------------------+-----------+

2.刪除bin-log(刪除mysql-bin.000010之前的而沒有包含 mysql-bin.000010)

mysql> purge binary logs to ' mysql-bin .000010';

Query OK, 0 rows affected (0.16 sec)

3.  查詢結果(現在只有一條記錄了.)

mysql> show binary logs;

+------------------+-----------+

| Log_name         | File_size |

+------------------+-----------+

| mysql-bin.000010 |       644 |

+------------------+-----------+

1 row in set (0.00 sec)

(  mysql-bin.000009 已被刪除)

 命令說明

 PURGE {MASTER | BINARY} LOGS TO 'log_name'

 PURGE {MASTER | BINARY} LOGS BEFORE 'date'

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


  例如

  PURGE MASTER LOGS TO 'mysql-bin.010';

  PURGE MASTER LOGS BEFORE '2012-07-17 13:00:00';

    清除3天前的 binlog

PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);

  BEFORE變數的date自變數可以為'YYYY-MM-DD hh:mm:ss'格式。MASTER和BINARY是同義詞。

三 同步場景

  如果您有一個活性的從屬伺服器,該伺服器當前正在讀取您正在試圖刪除的日誌之一,則本語句不會起作用,而是會失敗,並伴隨一個錯誤。不過,如果從屬伺服器是休止的,並且您碰巧清理了其想要讀取的日誌之一,則從屬伺服器啟動後不能複製。當從屬伺服器正在複製時,本語句可以安全執行。

 

  要清理日誌,需按照以下步驟:

  1. 在每個從屬伺服器上,使用SHOW SLAVE STATUS來檢查它正在讀取哪個日誌。

  2. 使用SHOW MASTER LOGS獲得主伺服器上的一系列日誌。

  3. 在所有的從屬伺服器中判定最早的日誌。這個是目標日誌。如果所有的從屬伺服器是更新的,這是清單上的最後一個日誌。

  4. 製作您將要刪除的所有日誌的備份。(這個步驟是自選的,但是建議採用。)

  5. 清理所有的日誌

 

另外一種方式:

你可以先

flush logs

再執行

pure master logs xxx

 

這樣就能達到你的目的了,而且也非常安全。

flush logs之後會產生一個新的日誌,老的日誌重新生成一個檔案。

比如你現在有一個大日誌有800M,叫bin-log.00001

flush logs之後,就有兩個檔案bin-log.00001和bin-log.00002新的日誌只寫到bin-log.00002中

 

slave中的資訊也自動指向bin-log.00002,這時候再

purge master logs to 'bin-log.00002';

就能把老的那個刪除,達到你所描述的目的。masterslave都很安全。

 

四 配置選項

但沒有看到刪除的配置mysqlshow了一下variables

mysql> show variables like '%log%';

查到了

| expire_logs_days                | 0                                     |

這個預設是0,也就是logs不過期,這個是一個global的引數,所以需要執行

set global expire_logs_days=8;

這樣8天前的log就會被刪除了,如果有回覆的需要,請做好備份工作,但這樣設定還不行,下次重啟mysql了,配置又恢復預設了,所以需在my.cnf中設定

 expire_logs_days = 8

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22418990/viewspace-735924/,如需轉載,請註明出處,否則將追究法律責任。

相關文章