import os
from datetime import datetime, timedeltamongodb
username = '帐号'
password = '密码'
nowDate = datetime.today().date()
lastDate = nowDate - timedelta(days=185)数据库
while nowDate != lastDate:
startDate, endDate = lastDate, lastDate + timedelta(days=1)
dirName = startDate.strftime("%Y-%m-%d")bash
startDate = startDate.strftime("%Y-%m-%d %H:%M:%S")
endDate = endDate.strftime("%Y-%m-%d %H:%M:%S")性能
lastDate += timedelta(days=1)
command = 'mongodump -d pusher -c records -q \'{\"$and\":[{\"create_time\":{\"$lt\":"%s"}},{\"create_time\":{\"$gt\":"%s"}}]}\' ' \
'--gzip --archive=/home/deploy/mongobackup/"%s".archive -u "%s" -p "%s"' %(endDate, startDate, dirName, username, password)测试
os.system(command)优化
备份完以后你的目录下面应该是这样子的spa
能够用如下命令来测试下,测试图我不上了3d
(1)先登陆mongo, 在use相应的数据库rest
mongo --port 27017 -u "" -p "" --authenticationDatabase "" use "your db"
(2)查询某一天的数据code
db.dbname.find({"$and":[{"create_time":{"$gt":"2019-01-21 00:00:00"}},{"create_time":{"$lt":"2019-01-22 00:00:00"}}]}) 或者直接统计:db.dbname.count({"$and":[{"create_time":{"$gt":"2019-01-21 00:00:00"}},{"create_time":{"$lt":"2019-01-22 00:00:00"}}]})
(3)删除这一天的数据
db.dbname.remove({"$and":[{"create_time":{"$gt":"2019-01-21 00:00:00"}},{"create_time":{"$lt":"2019-01-22 00:00:00"}}]})
(4)恢复某一天的数据
mongorestore -u "" -p "" --authenticationDatabase dbname --nsInclude db.collection --gzip --archive=2019-01-21/ # db.collection --》 数据库.表名
# 这里使用了--gzip压缩, 不压缩文件太大了, 不过压缩的话会消耗必定的性能,看我的须要
(5)测试一下数据有没有恢复(重复第二步的命令)
db.dbname.find({"$and":[{"create_time":{"$gt":"2019-01-21 00:00:00"}},{"create_time":{"$lt":"2019-01-22 00:00:00"}}]}) 或者直接统计:db.dbname.count({"$and":[{"create_time":{"$gt":"2019-01-21 00:00:00"}},{"create_time":{"$lt":"2019-01-22 00:00:00"}}]})
import os from datetime import datetime, timedelta username = '' password = '' endDate = datetime.today().date() startDate = endDate - timedelta(days=1) dirName = startDate.strftime("%Y-%m-%d") startDate = startDate.strftime("%Y-%m-%d %H:%M:%S") endDate = endDate.strftime("%Y-%m-%d %H:%M:%S") command = 'mongodump -d db -c collection -q \'{\"$and\":[{\"create_time\":{\"$lt\":"%s"}},{\"create_time\":{\"$gt\":"%s"}}]}\' ' \ '-o "%s" -u "%s" -p "%s"' %(endDate, startDate, dirName, username, password) os.system(command)
这一步能够写成脚本,contrab去天天执行
import os from datetime import datetime, timedelta username = '' password = '' queryDate = datetime.today().date() - timedelta(days=7) queryDate = queryDate.strftime("%Y-%m-%d %H:%M:%S") command = 'mongo dbname -u"%s" -p"%s" --eval \'db.records.remove({\"create_time\":{\"$lt\":"%s"}})\'' %(username, password, queryDate) os.system(command)
import os from datetime import datetime, timedelta username = '' password = '' # 1. 先备份前一天的数据 endDate = datetime.today().date() startDate = endDate - timedelta(days=1) dirName = startDate.strftime("%Y-%m-%d") startDate = startDate.strftime("%Y-%m-%d %H:%M:%S") endDate = endDate.strftime("%Y-%m-%d %H:%M:%S") command = 'mongodump -d dbname -c collection -q \'{\"$and\":[{\"create_time\":{\"$lt\":"%s"}},{\"create_time\":{\"$gt\":"%s"}}]}\' ' \ '-o "%s" -u "%s" -p "%s"' %(endDate, startDate, dirName, username, password) os.system(command) # 2. 在清理7天以前的数据 queryDate = datetime.today().date() - timedelta(days=7) queryDate = queryDate.strftime("%Y-%m-%d %H:%M:%S") command = 'mongo dbname -u"%s" -p"%s" --eval \'db.collection.remove({\"create_time\":{\"$lt\":"%s"}})\'' %(username, password, queryDate) os.system(command)
设置crontab
crontab -e
#!/bin/bash # 定义要检测的文件夹 BACK_DIR=/home/deploy/mongobackup # 设置要保存的文件个数 SAVE_COUNT=185 cd $BACK_DIR # 1.判断文件个数 count=$(ls -l | grep "^-" | wc -l) delcount=$[$count - $SAVE_COUNT] # 2.是否进行删除 if [ $delcount -gt 0 ];then # 获取时间最久的文件名称 filename=$(ls -tr | head -n $delcount) for each in ${filename[*]} do rm -rf $each echo "deling file is" $each done fi
也加到进去crontab 里面,每周一次