定期清理binlog日志脚本(一次清理5个binlog日志,清理完成后睡眠3秒钟)

#对于每天只产生少量binlog的服务器来说,可以通过设置expire_logs_days来自动删除。否则,为了避免导致大量磁盘IO,数据库抖动,需要写脚本来完成这一操作(分批删除binlog)
#一次清理5个binlog日志,清理完成后睡眠3秒钟。
#调用该脚本需要传入一个参数,如:sh clear_binlog.sh mysql-bin.000025,表示清理mysql-bin.000025前所有的binlog日志

User='root'
Password='system@123'
Port=3307
Host='10.192.203.202'
Group=5 #一次清理多少个binlog
String1='purge binary logs to '

arg=$(echo $1 | awk -F "." '{print $2}') #取出传入参数binlog后面的数值,清空该日志前的所有binlog日志,如要清空mysql-bin.000033前的日志,则会取出000033
#echo $arg

logs=(`mysql -u $User -p$Password  -h $Host -P$Port -e "show binary logs" | grep -v 'Log_name' | cut -f 1`)
#echo $logs

for ((i=$Group; i< ${#logs[*]}; i=i+$Group)) #i+$Group这里表示一次清空几个binlog
do
 	
	num=$(echo ${logs[$i]} | awk -F "." '{print $2}') #取出binlog后面的值,与传进来的参数进行比较
	v2=$(echo $num-$arg | bc)
#	echo $num
#	echo $v2
	if (( $v2 > 0 ))
	then
	   break 
	else
	    String2=$String1\'${logs[$i]}\'';'
	    echo $String2
	    mysql -u $User -p$Password  -h $Host -P $Port -e "$String2"
          echo '睡眠三秒钟 sleep(3)'';'
	    mysql -u $User -p$Password  -h $Host -P $Port -e "select sleep(3);" > /dev/null
	fi

done

String3=$String1\'$1\'';'
echo $String3
mysql -u $User -p$Password  -h $Host -P $Port -e "$String3"
#退出上面的for循环后但小于传入的参数的binlog,在这里进行处理。比如binlog日志从mysql-bin.000030~mysql-bin.000035,Group=2.i=2,4,6.logs[4]=000034,logs[6]=000036,传入的000035<000036,因此退出了,故只能purge binary logs to 000034,就少了purge binary logs to 000035.所以在这里进行处理

#echo "array len:${#logs[*]}"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值