目的:MongoDB不断的增长,需要定时清理历史数据,只保留45 天的数据;
shell脚本如下,仅供参考;
#!/bin/bash
#######################################################################
#清理mongodb的audio-file-xx集合历史数据
#建议:第一次清理,开启compact命令,后续可以每7天清理一次,具体结合现场存储空间决定
#0 22 * * 6 /bin/sh /home/iikp/clear_mogondb.sh
#
#检查指定时间对应集合是否存在数据
#echo "$MongobinPath/mongo 172.31.161.78:27017/droidme -u 'droid' -p 'zong123!' --authenticationDatabase "admin" --quiet --eval 'db.getCollection($line).findOne({"creatTime":{$lt:\"$rmdate\"}},{"_id":1})'" |bash
#
cd /home/zong/
echo "Begin ......................................." >> ./time.log;
echo $(date +%Y-%m-%d-%H:%M:%S) >>./time.log;
rmdate=`date +"%Y-%m-%d %H:%M:%S" --date '45 days ago'`
MongobinPath="/home/public/mongodb/4_0_21/mongodb-linux-x86_64-4.0.21/bin"
lt='$lt'
#获取所有集合CollectionNames清单
rm -rf CollectionNames.txt
test=`$MongobinPath/mongo 192.168.22.201:27017/droidme -u droid -p 'zong123!' --authenticationDatabase "admin" --quiet --eval 'db.getCollectionNames()' > CollectionNames.txt`
#删除第一行
sed -i '1d' CollectionNames.txt
#删除最后三行
sed -i '$d' CollectionNames.txt
sed -i '$d' CollectionNames.txt
sed -i '$d' CollectionNames.txt
sed -i 's/,//g' CollectionNames.txt
cat CollectionNames.txt | while read line;
do
#清理集合指定时间点之前的数据
echo "$MongobinPath/mongo 192.168.22.201:27017/droidme -u 'droid' -p 'zong123!' --authenticationDatabase "admin" --quiet --eval 'db.getCollection($line).remove({"creatTime":{$lt:\"$rmdate\"}})'" |bash
echo "$(date +%Y-%m-%d-%H:%M:%S) remove "$rmdate" done "$line" " >> ./audio-file.log
##空间释放(PS:首次执行此脚本需执行以下命令行,后续此脚本可以每7天执行一次,此命令行则无需执行)
#release_start=`date +%s`
#echo "$MongobinPath/mongo 192.168.22.201:27017/droidme -u 'droid' -p 'zong123!' --authenticationDatabase "admin" --quiet --eval 'db.runCommand({'compact':$line})'" |bash
#release_end=`date +%s`
#sumTime=$[ $release_end - $release_start ]
#echo "$(date +%Y-%m-%d-%H:%M:%S) compact "$rmdate" done "$line" Total:"$sumTime" seconds " >> ./audio-file.log
done
echo $(date +%Y-%m-%d-%H:%M:%S) >>./time.log;
echo "End ......................................." >> ./time.log;
设置定时任务每天执行;
编辑定时任务:crontab -e
每天凌晨两点执行
0 2 * * * /iflytek/install/py_dics/clear-mongdb.sh
重新启用定时任务:sudo systemctl start crond