12组nodes MySQL DB,每组2台Master-Master,批量清除过期的binlog释放磁盘空间

接到call,磁盘报警了,发现是大量dml操作导致N多binlog产生,所以需要清除已经sync过的binlog日志,12组nodes MySQL DB,每组2台Master-Master,需要批量清除过期的binlog释放磁盘空间。


方案,总共24台db,一台台进去清理肯定不行,得需要写一个脚本,进行批量操作,方案思路大概如下

1, 建立双master列表masterlist; 一个master一行。

2,远程获取master db上面的binlog位置以及对应master的master主机名(也许是ip地址)

3,拿到binlog位置以及master主机名,然后ssh远程清理掉远程master上面的binlog

4, 采用shell for循环操作step 2以及step 3。


clearbinlog.sh脚本如下

for masterdb in `cat master.db.full`;do
	#1 echo get the binlog position infomation
	str_log_files=`ssh $masterdb "/opt/mysql/product/5.5.25a/bin/mysql -uroot --password="" -e \"show slave status\G;\" |grep -i master_Log_File "`
	echo $str_log_files;
	log_file=`echo $str_log_files | awk '{print $2}'`; 
	echo $log_file;

	#2 echo get the master ip address or master hostname
	db01tmp=`ssh $masterdb "  /opt/mysql/product/5.5.25a/bin/mysql  -uroot  --password=""  -e \"show slave status\G;\" |grep -i Master_Host  "`;  
	db01=`echo $db01tmp | awk '{print $2}'`

	#3 begin to clear the old binlog 
	ssh $db01 "/opt/mysql/product/5.5.25a/bin/mysql  -uroot  --password="" -e \"purge master logs to '$log_file';\""

	#4 check the disk space for master
	ssh $db01 "df -h"
	echo " "
	echo " -- -- -- ";
done;

OK,run sh脚本

shclearbinlog.sh 就可以开始清理所有db的binlog了。


最后再次check disk space,执行check_disk.sh脚本,脚本内容如下:

for masterdb in `master.db.full`;do
  ssh  $masterdb "df -h" |grep -i mysqldatadir;
done;

执行sh check_disk.sh开始check

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值