【shell脚本】一个删除mysql数据库中的超过当前时间一个月之前的所有表(数据同时清除)

直接上脚本,拿走不谢。

#!/bin/bash
# 删除性能库database01到04库中的超过当前时间一个月之前的表
# 示例:
# Usage: ./script user password dbname
# Usage: ./script user password dbname server-ip
# Usage: ./script user password dbname mysql.nixcraft.in
# Usage: 如果执行脚本报错: syntax error near unexpected token `do
#        是因为脚本中存在^M,请在linux中执行sed -i 's/^M//g' tablexxxx_clean.sh命令就可以执行了。
#        注意上面的^M的输入方式是键盘同时按住ctrl+v+m,其他^A ^B 类似
# ---------------------------------------------------

MUSER="username"
MPASS="password"
MDBS=("database01" "database02" "database03" "database04")
MHOST="10.xxx.40.xx"
MHOSTS=("10.xxx.40.xx" "10.xxx.44.xx" "10.xxx.48.xx" "10.xxx.43.xx")
#[ "$2" != "" ] && MHOST="$2"
MPORTS=(3301 3302 3303 3304)

# 设置命令路径
MYSQL=$(which mysql)
AWK=$(which awk)
GREP=$(which grep)

# help
# if [ ! $# -ge 3 ]
# then
    # echo "Usage: $0 {MySQL-Database-Name} [host-name] [port]"
    # echo "Delte table1 and table2 datas from a MySQL"
    # exit 1
# fi
# 连接mysql数据库
for MHOST in ${MHOSTS[@]}
do
    for MPORT in ${MPORTS[0]}
    do
        echo ""
        echo ""
        #echo "MPORT=$MPORT"
        #MDB="database01"
        MDB=${MDBS[0]}

        for i in $(seq 1 3)
        do
            echo $i
            if [ $MHOST == ${MHOSTS[$i]} ]
            then
                MDB=${MDBS[$i]}
                MPORT=${MPORTS[$i]}
            fi
        done

        $MYSQL -A -u $MUSER -p$MPASS -h $MHOST -P $MPORT -e "use $MDB"  &>/dev/null
        #echo "user=$MUSER,pass=$MPASS,host=$MHOST,port=$MPORT,db=$MDB"
        if [ $? -ne 0 ]
        then
            echo "Error - 用户名或密码或host或port无效,无法连接mysql数据库"
            exit 1
        fi

        XXXXXX_TABLES=$($MYSQL -A -u $MUSER -p$MPASS -h $MHOST -P $MPORT -D $MDB -e 'show tables' | $AWK '{ print $1}' | $GREP -E 'tablexxxxxx_' )

        if [ "$XXXXXX_TABLES" == "" ]
        then
            echo "Error - 在数据库中 $MDB 未发现相关表"
            exit 2
        fi

        #时间处理-当前时间点和距离当前时间点1个月之前的时间点
        #time_now=$(date -d +%Y%m%d)
        time_1_month_ago=$(date --date="1 month ago"  +%Y%m%d)
        #echo $time_1_month_ago

        echo "=============================["+$MDB+"start]==============================="
        echo "drop $MDB 1_month_ago tablexxxxxx_table  start:"
        for tablexxxxxx_table in ${XXXXXX_TABLES[@]}
        do
            OLD_IFS="$IFS"
            IFS="_"
            tablexxxxxx_table_arr=($tablexxxxxx_table)
            IFS="$OLD_IFS"

            #取得表时间,比较大小
            tablexxxxxx_table_time=${tablexxxxxx_table_arr[1]}

            if [ $tablexxxxxx_table_time -lt $time_1_month_ago ] && [ $tablexxxxxx_table_time -gt 19970901 ]
            then
                # let us drop table
                echo "drop table $tablexxxxxx_table start"
                $MYSQL -A -u $MUSER -p$MPASS -h $MHOST -P $MPORT -D $MDB -e "drop table $tablexxxxxx_table;"
                if [ $? -ne 0 ]
                then
                    echo "Error - 用户名或密码或host或port无效,无法连接mysql数据库"
                    exit 4
                fi
                echo "drop table $tablexxxxxx_table finish"
            fi
        done
        echo "drop $MDB 1_month_ago tablexxxxxx_table finish!"
        echo "=============================["+$MDB+"end]==============================="

    done
done

发布了77 篇原创文章 · 获赞 55 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/langhailove_2008/article/details/100714189