【shellスクリプト】mysqlデータベースから現在の1ヶ月を超えるすべてのテーブルを削除します(データは同時に消去されます).

11547 ワード

スクリプトに直接行って、持って行っても感謝しません.
#!/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