清理300多台MySQL数据库的过期binlog日志

来源:互联网 发布:刚果内战 知乎 编辑:程序博客网 时间:2024/05/23 00:31
早晨睡梦中,被on-call了,说磁盘报警,赶紧起来打开email,收到上百封email报警,数据库磁盘不够了,查询了原因
  1. [xxx@xxxx cacti]$ ssh xxxx "df -h"   
  2. /dev/mapper/Sys-mysqldata  
  3.                       300G   270G   30G  90% /mysqldata  
  4.                        15G  166M   14G   2% /mysqldata/binlog  

  
这2天业务量增长比较快,猜测可能是产生了过多的binlog导致的。
  1. [xxx@xxxx cacti]$ ssh xxxx  " sudo -u mysql ls /mysqldata/data/" |grep mysql-bin  
  2. mysql-bin.001350  
  3. .......  
  4. mysql-bin.002352  
  5. mysql-bin.log.index  


binlog都有1000个了,赶紧去清理吧,手动一个个肯定不现实了,还是写脚本吧。


clear_binlog.sh脚本如下  
  1. for i in `cat server03list`; do #循环遍历db列表  
  2.     # 1 获取数据库的master binlog名称,并在控制台打印出当前执行的db名称  
  3.     echo $i;  
  4.     binlog=`ssh $i " /opt/mysql/product/5.5.25a/bin/mysql  -uxxxx  -ppassword --ssl-ca=/ssl/ca-cert.pem --ssl-cert=/ssl/server-cert.pem --ssl-key=/ssl/server-key.pem -e \" show master status;\" "|grep mysql-bin |awk '{print $1}'`;  
  5.     echo $binlog;  
  6.     # 2 开始执行binlog purge清理操作。  
  7.     ssh $i " /opt/mysql/product/5.5.25a/bin/mysql  -uxxxx  -ppassword --ssl-ca=/ssl/ca-cert.pem --ssl-cert=/ssl/server-cert.pem --ssl-key=/ssl/server-key.pem -e \" purge master logs to '$binlog';\" "  
  8.     # 3 check清理完的磁盘空间。  
  9.     ssh $i "df -h" |grep mysqldata;  
  10.     # 4 输入空行分隔  
  11.     echo "";  
  12.     echo "";  
  13.     echo "";  
  14. done;  

然后执行清理操作,并且把结果输出到日志里面
sh clear_binlog.sh > clear_binlog.log
0 0