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

来源:互联网 发布:修改js中的字体颜色 编辑:程序博客网 时间:2024/05/02 01:05
#对于每天只产生少量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=3307Host='10.192.203.202'Group=5 #一次清理多少个binlogString1='purge binary logs to 'arg=$(echo $1 | awk -F "." '{print $2}') #取出传入参数binlog后面的数值,清空该日志前的所有binlog日志,如要清空mysql-bin.000033前的日志,则会取出000033#echo $arglogs=(`mysql -u $User -p$Password  -h $Host -P$Port -e "show binary logs" | grep -v 'Log_name' | cut -f 1`)#echo $logsfor ((i=$Group; i< ${#logs[*]}; i=i+$Group)) #i+$Group这里表示一次清空几个binlogdo num=$(echo ${logs[$i]} | awk -F "." '{print $2}') #取出binlog后面的值,与传进来的参数进行比较v2=$(echo $num-$arg | bc)#echo $num#echo $v2if (( $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/nullfidoneString3=$String1\'$1\'';'echo $String3mysql -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[*]}"
0 0
原创粉丝点击