您的位置:首页 > 其它

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

2016-06-21 15:15 357 查看
#对于每天只产生少量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[*]}"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: