温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

【工具】批量删除binlog 的脚本

发布时间:2020-08-10 19:46:12 来源:ITPUB博客 阅读:163 作者:18141908802 栏目:MySQL数据库
  MySQL DBA 偶尔会遇到因为空间不足,在不能删除data之前,可能先想到的是通过删除binlog 暂时解决空间问题。周末本人也遇到这样的情况,因为不在电脑旁边,找领导出马并且使用手机把命令打出发给老板去删除binlog。想想还是写一个binlog 删除工具吧,以后遇到此类问题,直接使用脚本工具合适。

delbinlog.sh
#!/bin/bash
##author yangyi@youzan.com
#date 20160327
#delnums 是每次删除多少个,分批次删除。
#rest_num是要保留多少个binlog ,可以根据实际情况调整。
if [ $# -lt 4 ];then
   echo "Usage: $0  -p PORT -r res_nums"
   exit 1
fi
while getopts ":p:r:" arg
do
    case $arg in
        p)
          #echo "p's arg:$OPTARG"
          PORT=$OPTARG
          ;;
        r)
         #echo "d's arg:$OPTARG"
          res_nums=$OPTARG
          ;;
        ?)  #当有不认识的选项的时候arg为?
          echo "unkonw argument"
          echo "Usage: $0  -p PORT -r res_nums"
          exit 1
          ;;
    esac
done
if [ -S /srv/my_$PORT/mysqld.sock ]; then
   SOCKET="/srv/my_$PORT/mysqld.sock"
elif [ -S /srv/my$PORT/run/mysql.sock  ]; then
   SOCKET="/srv/my$PORT/run/mysql.sock"
fi
MYSQL="mysql -uroot -S ${SOCKET} "
del_nums=3
logs_num=`$MYSQL -e "show master logs;" | wc -l `
echo "there are $logs_num binary logs .."
if [[ $res_nums -gt $logs_num ]];
then
  exit 0
fi
while [[ $res_nums -lt $logs_num ]]; do
   del_to_binlog=`$MYSQL --skip-column-names -e "show master logs;"  | head -n $del_nums | awk 'END {print $1}'`
   $MYSQL -e "purge master logs to '$del_to_binlog' ;"
   echo "purge master logs to  $del_to_binlog ... "
   logs_num=`$MYSQL --skip-column-names -e "show master logs;" | wc -l `
   sleep 2
done
logs_num=`$MYSQL -e "show master logs;" | wc -l `
echo "there are $logs_num binary logs .."

有需要的可以根据自己生产环境的实际情况,适当修改。


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI