直接上脚本,拿走不谢。
#!/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