【MySql】如何刪除 bin log

楊奇龍發表於2011-12-11
當mysql 日誌佔用太大空間的時候,要考慮將日誌刪除
一 語法如下:
PURGE {MASTER | BINARY} LOGS TO 'log_name'
PURGE {MASTER | BINARY} LOGS BEFORE 'date'
用於刪除在指定的日誌或日期之前的日誌索引中的所有二進位制日誌。這些日誌也會從記錄在日誌索引檔案中的清單中被刪除,這樣被給定的日誌成為第一個。
例如:
1 刪除指定日誌之前的bin log
PURGE MASTER LOGS TO 'mysql-bin.010';
1) 檢視當前的log
mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       126 |
| mysql-bin.000002 |  88416282 |
| mysql-bin.000003 | 198081520 |
| mysql-bin.000004 |      1358 |
| mysql-bin.000005 |       126 |
| mysql-bin.000006 |       126 |
| mysql-bin.000007 |       126 |
| mysql-bin.000008 |       315 |
| mysql-bin.000009 |       126 |
| mysql-bin.000010 |       126 |
| mysql-bin.000011 |       504 |
| mysql-bin.000012 |       107 |
| mysql-bin.000013 |       107 |
| mysql-bin.000014 |       107 |
| mysql-bin.000015 |       107 |
| mysql-bin.000016 |       521 |
| mysql-bin.000017 |       315 |
| mysql-bin.000018 |       958 |
+------------------+-----------+
18 rows in set (0.04 sec)
2) 刪除mysql-bin.000010 之前的日誌
mysql> purge binary logs to 'mysql-bin.000010';
Query OK, 0 rows affected (0.35 sec)
mysql> show binary logs;                       
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000010 |       126 |
| mysql-bin.000011 |       504 |
| mysql-bin.000012 |       107 |
| mysql-bin.000013 |       107 |
| mysql-bin.000014 |       107 |
| mysql-bin.000015 |       107 |
| mysql-bin.000016 |       521 |
| mysql-bin.000017 |       315 |
| mysql-bin.000018 |       958 |
+------------------+-----------+
9 rows in set (0.00 sec)
3)顯示第一個二進位制日誌: 
mysql> show binlog events;
+------------------+-----+-------------+-----------+-------------+---------------------------------------+
| Log_name         | Pos | Event_type  | Server_id | End_log_pos | Info                                  |
+------------------+-----+-------------+-----------+-------------+---------------------------------------+
| mysql-bin.000010 |   4 | Format_desc |         1 |         107 | Server ver: 5.5.18-log, Binlog ver: 4 |
| mysql-bin.000010 | 107 | Stop        |         1 |         126 |                                       |
+------------------+-----+-------------+-----------+-------------+---------------------------------------+
2 rows in set (0.01 sec)
2 刪除指定日期之前的bin log
PURGE MASTER LOGS BEFORE '2011-12-05 13:00:00';
3 清除N天前的 binlog
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL N DAY);
BEFORE變數的date自變數可以為'YYYY-MM-DD hh:mm:ss'格式。MASTER和BINARY是同義詞。
下面的語句可以清除 7 天前的binlog,
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 7 DAY);
在contab設定定期每天凌晨3點刪除7天前的binlog:
0 3 * * *  `mysql -uroot -e 'PURGE BINARY LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 7 DAY);'`

二 主從架構的日誌刪除
對於主從結構的mysql系統,slave伺服器當前正在讀取試圖刪除的日誌之一,則刪除語句失敗,並且報錯。不過,如果在slave伺服器是停止執行期間清理了其未讀取的日誌之一,則slave伺服器啟動後不能複製。當slave伺服器正在複製時,刪除日誌的語句可以安全執行,並不需要停止它們。
主從架構的可以按照以下步驟清理日誌:
1. 在每個SLAVE伺服器上,使用SHOW SLAVE STATUS來檢查它正在讀取的日誌。
2. 使用SHOW MASTER LOGS獲得主伺服器上的已經歸檔的日誌。
3. 在所有的slave伺服器中判定最早的日誌,既截至目標日誌。如果所有的slave伺服器是更新的,這是清單上的最後一個日誌。
4. 備份將要刪除的所有日誌,防止意外!
5. 刪除日誌,但不包括目標日誌。
三 相關引數:
  配置檔案my.cnf的引數expire-logs-days 指定了日誌過期的天數,比如
expire-logs-days  = 20 表示日誌保留20,超過20則設定為過期的!可以根據實際情況來設定合適的值。

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

相關文章