Linux下定时按条件备份mongodb指定的集合
1、说明:
在不使用副本集模式即时备份的情况下,还可以使用Mongdb中自带的两个可以进行备份和恢复的工具,分别是mongodump和mongorestore、mongoexport和mongoimport;
但是这两种备份并没有定时的功能,假如我们需要每天固定一个时间备份数据的话,需要使用linux中的shell脚本并结合linux系统的定时任务crontab;
2、示例脚本代码,脚本逻辑如下:
(1)、获取系统时间,得到备份时的查询条件,开始和结束时间;
(2)、根据开始和结束条件备份数据到指定的临时文件夹dumptest中;
(3)、判断当前日期是不是每月的第一或第二天,如果是第一天,需要把备份的前一天的数据放回到上个月的备份存储文件中;如果是当月第二天,需要新建一个本月的备份数据存储文件;
(4)、把dumptest中每日备份的临时文件追加到相应的数据存储文件中。
dumptest1.sh文件内容如下(本示例在192.168.0.160上操作):
#获取系统时间并转换成毫秒数
currentsec=`date "+%S"`
#从定时任务到这里获取系统时间要消耗一秒,因此减掉
lastsec=$((currentsec-1))
current=`date "+%Y-%m-%d %H:%M:"`$lastsec
timeStamp=`date -d "$current" +%s`
#当前时间的毫秒数
currentTimeStamp=$((timeStamp*1000))
#一天前这个时候的毫秒数
yestodayTimeStamp=$((currentTimeStamp-24*60*60*1000));
#获取当前是哪一天
currentDay=`date "+%d"`
#获取当前月
currentMonth=`date "+%Y%m"`
echo $currentMonth
#上个月月份
lastMonth=`date -d "last month" +%Y%m`
#判断每日备份的临时文件目录是否存在
if [ -e /home/admin/dumptest ]; then
rm -rf dumptest
echo "$current delete dumptest and dump start,currentTimeStamp $currentTimeStamp lastTimeStamp $yestodayTimeStamp" >>/home/admin/testlog.log
else
echo "$current only dump start,currentTimeStamp $currentTimeStamp currentTimeStamp $yestodayTimeStamp" >>/home/admin/testlog.log
fi