mysql的binlog安全刪除


理論上,應該在配置文件/etc/my.cnf中加上binlog過期時間的配置項,expire_logs_days = 10

但是如果沒有加這一項,隨着產生越來越多的binlog,磁盤被吃掉了不少。可以直接刪除binlog文件,但是可以通過mysql提供的工具來刪除更安全。因為purge會更新mysql-bin.index中的條目,而直接刪除的話,mysql-bin.index文件不會更新。mysql-bin.index的作用是加快查找binlog文件的速度。

先help一下吧:

mysql> help purge
Name: 'PURGE MASTER LOGS'
Description:
Syntax:
PURGE {MASTER | BINARY} LOGS TO 'log_name'
PURGE {MASTER | BINARY} LOGS BEFORE 'date'

(purge:肅清; 清除 )

Deletes all the binary logs listed in the log index prior to the
specified log or date. The logs also are removed from the list recorded
in the log index file, so that the given log becomes the first.

This statement has no effect if the --log-bin option has not been
enabled.

URL: http://dev.mysql.com/doc/refman/5.0/en/purge-master-logs.html

Examples:
PURGE MASTER LOGS TO 'mysql-bin.010';
PURGE MASTER LOGS BEFORE '2003-04-02 22:46:26';

 

兩種方法都可用。第一個是刪除至某一個文件為止,第二個是刪除到某個日期為止。

比如我們讓它保留近3天的log,可以這樣

PURGE MASTER LOGS BEFORE '2010-10-17 00:00:00';

 

看下執行前后的文件數:

執行前:

part2# ls mysql-bin.*|wc -l
     243

執行purge:

mysql> PURGE MASTER LOGS BEFORE '2010-10-17 00:00:00';
Query OK, 0 rows affected (0.02 sec)

執行后:

part2# ls mysql-bin.* | wc -l
      88

可見把17號前的binlog全部刪除了。

 

需要注意的是:最好到slave上面去看下當前同步到那個binlog文件了,用show slave status查看。否則,master上刪多了的話,就造成slave缺失日志文件而導致數據不一致了。


 

默認情況下mysql會一直保留mysql-bin文件,這樣到一定時候,磁盤可能會被撐滿,這時候是否可以刪除這些文件呢,是否可以安全刪除,是個問題。

首先要說明一下,這些文件都是mysql的日志文件,如果不做主從復制的話,基本上是沒用的,雖然沒用,但是不建議使用rm命令刪除,這樣有可能會不安全,正確的方法是通過mysql的命令去刪除。

mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2819416 Server version: 5.5.24-0ubuntu0.12.04.1-log (Ubuntu) Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> reset master; Query OK, 0 rows affected (3 min 37.65 sec)

其實關鍵的命令就是reset master;這個命令會清空mysql-bin文件。

另外如果你的mysql服務器不需要做主從復制的話,建議通過修改my.cnf文件,來設置不生成這些文件,只要刪除my.cnf中的下面一行就可以了。

log-bin=mysql-bin

如果你需要復制,最好控制一下這些日志文件保留的天數,可以通過下面的配置設定日志文件保留的天數:

expire_logs_days = 7

表示保留7天的日志,這樣老日志會自動被清理掉。

 參考:
http://blog.csdn.net/atco/article/details/24259333


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM