• ADADADADAD

    【工具】批量删除binlog 的脚本[ mysql数据库 ]

    mysql数据库 时间:2024-12-03 12:13:53

    作者:文/会员上传

    简介:

    MySQL DBA 偶尔会遇到因为空间不足,在不能删除data之前,可能先想到的是通过删除binlog 暂时解决空间问题。周末本人也遇到这样的情况,因为不在电脑旁边,找领导出马并且使用手机

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    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 .."

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


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

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: binlog删除工具