定时清理MongoDB历史数据shell脚本

本文介绍了一个用于定期清理MongoDB中历史数据的shell脚本,包括检查数据创建时间、清理指定时间点前的数据以及可能的compact操作,建议每7天执行一次以维护数据库存储空间。
摘要由CSDN通过智能技术生成

目的: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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值