删除庞大的MySQL binlog实操


  本文标签:MySQL binlog

  以下的文章主要描述的是清理删除庞大的MySQL binlog的实际操作方案,我们是在MySQL master/slave架构的环境下对清理删除庞大的MySQL binlog进行操作,以下就是文章的具体内容描述  。

  问题:主库硬盘不足s

  原因:MySQL的var下大量bin二进制log,200多个g啊

  目标:安全删除MySQL binlog

  方法:网上搜搜关键词“MySQL bin文件 删除”,还真有~~

  相关语句:

  

  1. PURGE {MASTER | BINARY} LOGS TO log_name  
  2. PURGE {MASTER | BINARY} LOGS BEFORE date  

  用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志  。这些日志也会从记录在日志索引文件中的清单中被删除,这样被给定的日志成为第一个  。

  例如:

  1. PURGE MASTER LOGS TO MySQL-bin.010;  
  2. PURGE MASTER LOGS BEFORE 2003-04-02 22:46:26; 

  BEFORE变量的date自变量可以为YYYY-MM-DD hh:mm:ss格式  。MASTER和BINARY是同义词  。

  如果您有一个活性的从属服务器,该服务器当前正在读取您正在试图删除的日志之一,则本语句不会起作用,而是会失败,并伴随一个错误  。不过,如果从属服务器是休止的,并且您碰巧清理了其想要读取的日志之一,则从属服务器启动后不能复制  。当从属服务器正在复制时,本语句可以安全运行  。您不需要停止它们  。

  删除庞大的MySQL binlog 要清理日志,需按照以下步骤:

  1. 在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志  。

  2. 使用SHOW MASTER LOGS获得主服务器上的一系列日志  。

  3. 在所有的从属服务器中判定最早的日志  。这个是目标日志  。如果所有的从属服务器是更新的,这是清单上的最后一个日志  。

  4. 制作您将要删除的所有日志的备份  。(这个步骤是自选的,但是建议采用  。)

  5. 清理所有的日志,但是不包括目标日志

  实践:

  从库下---

  MySQL> show slave status\G;

  ……

  Master_Log_File: tc-ns-comment-db00-bin.000162

  Relay_Master_Log_File: tc-ns-comment-db00-bin.000162

  ……

  主库下---

  MySQL> show master log;

  …………一堆堆

  MySQL> PURGE MASTER LOGS TO tc-ns-comment-db00-bin.000070;

  ……等待n长时间

  

  1. MySQL>quit  
  2. $du -sh ./  

  

  减少了好多g啊,世界清净了~~

  上述的相关内容就是对删除庞大的MySQL binlog的描述,希望会给你带来一些帮助在此方面  。