#!/usr/bin/bashsql
#define:Mongodb data backup regularly, delete data before the specified timemongodb
#date:2016-12-20shell
curr_dir=`pwd`
back_dir="/data/bak/mongodb_bak"
mongo_comm="/usr/local/mongodb/bin/mongo"
mongo_dump="/usr/local/mongodb/bin/mongodump"
mongo_data="
robot
engine
edi"bash
####rsync同步信息
rsync_user=***
rsync_passwd=****
echo "$rsync_passwd" > $curr_dir/rsync_passwd
passwd="$curr_dir/rsync_passwd"
rsync_server=****
rsync_module=mongo_com大数据
#####mongodb各库须要保存的天数
#robot_delete_day=`date -d "25 days ago" +"%Y-%m-%d %H:%M:%S"`
robot_delete_day=`date -d "24 days ago" +"%Y-%m-%d"`
#engine_delete_day=`date -d "60 days ago" +"%Y-%m-%d %H:%M:%S"`
engine_delete_day=`date -d "13 days ago" +"%Y-%m-%d"`
#edi_delete_day=`date -d "16 days ago" +"%Y-%m-%d %H:%M:%S"`
edi_delete_day=`date -d "52 days ago" +"%Y-%m-%d"`
today=`date +"%Y%m%d"`
transferr_data_dir="/data/bak/mongo_data_back/$today"日志
id_dir="/data/bak/mongo_id/$today"
[[ -d $id_dir ]]|| mkdir -p $id_dirserver
logdir="/data/log/mongodb_delete_log" #日志路径
log=$logdir/log"$today".log #日志文件
is_font=1 #终端是否打印日志: 1打印 0不打印
is_log=1 #是否记录日志: 1记录 0不记录
[[ -d $logdir ]]||mkdir -p $logdir #确保日志目录存在ci
datef(){
date "+%Y-%m-%d %H:%M:%S"
}rem
print_log(){
if [[ $is_log -eq 1 ]];then
[[ -d $logdir ]] || mkdir -p $logdir
echo -e "[ $(datef) ] $1" >> $log
fi
if [[ $is_font -eq 1 ]];then
echo -e "[ $(datef) ] $1"
fi
}get
####mongodb数据按期备份、压缩、同步至大数据存储
mongodb_back_regualy() {
for data in $mongo_data
do
print_log "判断备份目录是否存在"
[[ -d $back_dir/$today/$data ]]|| mkdir -p $back_dir/$today/$data
while true
do
print_log "$data 开始备份"
$mongo_dump -d $data -o $back_dir/$today/$data
if [[ $? -eq 0 ]];then
print_log "$data 备份成功"
break
else
print_log "$data 备份失败,继续"
fi
done
cd $back_dir/$today/$data
while true
do
print_log "$data 开始压缩"
[[ -d $transferr_data_dir ]]|| mkdir -p $transferr_data_dir
tar -zcf $transferr_data_dir/"$data"_"$today".tar.gz "$data"
if [[ $? -eq 0 ]];then
print_log "'$data'_'$today' 压缩成功"
break
else
print_log "'$data'_'$today' 压缩失败,继续压缩"
fi
done
while true
do
print_log "'$data'_'$today'.tar.gz 开始传输"
#####rsync传输,传输目录变量待修改
#rsync -avzr --password-file=$passwd $transferr_data_dir $rsync_user@$rsync_server::$rsync_module
if [[ $? -eq 0 ]];then
print_log "'$data'_'$today'.tar.gz 传输成功"
break
else
print_log "'$data'_'$today'.tar.gz 传输失败"
fi
done
done
}
mongo_robot_delete() {
print_log "开始统计robot库总条数"
mongo_sql_sum='db.robotTask.find().count()'
mongo_sql_sum_cal=`echo "$mongo_sql_sum"|$mongo_comm $data --shell|grep ^[0-9]`
print_log "robot库总条数为------$mongo_sql_sum_cal-------"
#print_log "开始统计robot库要删除的条数"
while true
do
mongo_sql_count='db.robotTask.find({"startTime":{$lt:ISODate("'$robot_delete_day'")}}).count()'
mongo_sql_count_cal=`echo "$mongo_sql_count"|$mongo_comm $data --shell`
need_delete_total=`echo "$mongo_sql_count_cal"|grep ^[0-9]`
if [[ $need_delete_total -le 0 ]];then
print_log "robot 删除完毕"
break
else
print_log "robot库须要删除的条数为 $need_delete_total --------------------------"
mongo_data_delete='db.robotTask.remove({"startTime":{$lt:ISODate("'$robot_delete_day'")}})'
echo "$mongo_data_delete" | $mongo_comm $data --shell
fi
done
}
mongo_engine_delete() {
print_log "开始统计engine库总条数"
mongo_sql_sum='db.rulemessage.find().count()'
mongo_sql_sum_cal=`echo "$mongo_sql_sum"|$mongo_comm $data --shell|grep ^[0-9]`
print_log "engine库总条数为--------$mongo_sql_sum_cal---------"
#print_log "开始统计engine库要删除的条数"
while true
do
mongo_sql_count='db.getCollection("rulemessage").find({"lastUpdated":{$lte:new Date("'$engine_delete_day'").getTime()}}).count()'
mongo_sql_count_cal=`echo "$mongo_sql_count"|$mongo_comm $data --shell`
need_delete_total=`echo "$mongo_sql_count_cal"|grep ^[0-9]`
if [[ $need_delete_total -le 0 ]];then
print_log "engine 删除完毕"
break
else
print_log "engine库须要删除的条数为 $need_delete_total --------------------------"
mongo_data_delete='db.rulemessage.remove({"lastUpdated":{$lte:new Date("'$engine_delete_day'").getTime()}})'
echo "$mongo_data_delete" | $mongo_comm $data --shell
fi
done
}
mongo_edi_delete() {
print_log "开始统计edi库总条数"
mongo_sql_sum='db.action_log.find().count()'
mongo_sql_sum_cal=`echo "$mongo_sql_sum"|$mongo_comm $data --shell |grep ^[0-9]`
print_log "edi库总条数为-------$mongo_sql_sum_cal---------"
#print_log "开始统计edi库要删除的条数"
while true
do
mongo_sql_count='db.action_log.find({"sendTime":{$lt:ISODate("'$edi_delete_day'")}}).count()'
mongo_sql_count_cal=`echo "$mongo_sql_count"|$mongo_comm $data --shell`
need_delete_total=`echo "$mongo_sql_count_cal"|grep ^[0-9]`
if [[ $need_delete_total -le 0 ]];then
print_log "edi 删除完毕"
break
else
print_log "edi库须要删除的条数为 $need_delete_total --------------------------"
mongo_data_delete='db.action_log.remove({"sendTime":{$lt:ISODate("'$edi_delete_day'")}})'
echo "$mongo_data_delete" | $mongo_comm $data --shell
fi
done
}
data_delete(){
cd $id_dir
print_log "删除各库10天之前的id数据"
find ./ -mtime +10 |xargs rm -rf
print_log "删除各库备份两天之前的数据"
cd $back_dir
find ./ -mtime +1 |xargs rm -rf
print_log "删除各库压缩4天之前的数据"
cd $transferr_data_dir
find ./ -mtime +3 |xargs rm -rf
}
mongodb_back_regualy
for data in $mongo_data
do
case $data in
robot)
mongo_robot_delete
;;
engine)
mongo_engine_delete
;;
edi)
mongo_edi_delete
;;
*)
echo "$1"
echo "Usage:集合不存在"
;;
esac
done
data_delete