mongodb备份策略
概述
数据库的备份非常非常非常重要!!!否则出问题连哭的机会有没有(欲哭无泪)今天主要是做一个mongodb的数据库备份。
1、关于备份
备份其实很简单,这里选择的是对mongodb中的某个库进行全备,例如saturn。关于备份策略,要根据实际情况来定,我们是一个小时备份一次。不废话直接上代码:
#!/usr/bin/env python
#-*- encoding: utf-8 -*-
import time
from subprocess import call
go_time = time.strftime("%Y-%m-%d_%H")
dir_path = "/data/backup"
def db_backup(user,pwd,host,db):
call("mongodump -u {} -p {} -h {} -d {} --gzip --archive={}/saturn-{}.gz".format(user,pwd,host,db,dir_path,go_time))
if __name__ == '__main__':
db_backup("hqms","hqms123","127.0.0.1:27017","saturn")
备份的文件saturn_2018-01-17_23.gz
我把备份和删除旧文件分开了,why?写在一个里面不是很好吗,主要是两个任务的执行频率不一样,删除的任务执行频率比较低,每天执行一次既可以,否则会浪费系统资源。
并且过多的耦合总会出问题。下面贴出删除代码:
#!/usr/bin/env python
# -*-encoding: utf-8 -*-
import os
import time
cur_time = time.time()
#当天零点的时间戳
st = cur_time - cur_time%86400 + time.timezone
dir_path = "/data/backup"
#删除
def drop_file(file_dir):
for filename in os.listdir(file_dir):
if os.path.isfile(file_dir + "/" +filename):
ft = os.stat(file_dir + "/" +filename)
lt = int(ft.st_mtime)
nt = cur_time - 3600*2 #距离现在2个小时之前的时间戳
dt = st - 86400*5 #距离现在5天之前的时间戳
#delete file by hour in today
if st < lt < nt:
try:
os.remove(file_dir + "/" + filename)
time.sleep(3)
print "Deleted success" + file_dir + "/" + filename
except (SyntaxError,IOError) as error:
print error
#delete file by day
elif lt < dt:
try:
os.remove(file_dir + "/" + filename)
time.sleep(3)
print "Deleted success" + file_dir + "/" + filename
except (SyntaxError,IOError) as error:
print error
if __name__ == '__main__':
drop_file(dir_path)
说明删除的代码是python2.7版本的。
附:
python3.6版本:
#!/usr/bin/env python
import os
import time
cur_time = time.time()
#获取当天零点的时间戳
st = cur_time - cur_time%86400 + time.timezone
dir_path = "/data/backup"
#删除
def drop_file(file_dir):
for filename in os.listdir(file_dir):
if os.path.isfile(file_dir + "/" +filename):
ft = os.stat(file_dir + "/" +filename)
lt = int(ft.st_mtime)
nt = cur_time - 3600*2 #获取当天保留截止的时间戳
dt = st - 86400*5 #获取保留天数的时间戳
#delete file by hour in today
if st < lt < nt:
try:
os.remove(file_dir + "/" + filename)
time.sleep(3)
print ("Deleted success" + file_dir + "/" + filename)
except (SyntaxError,IOError) as e:
print (e)
#delete file by day
elif lt < dt:
try:
os.remove(file_dir + "/" + filename)
time.sleep(3)
print ("Deleted success" + file_dir + "/" + filename)
except (SyntaxError,IOError) as e:
print (e)
if __name__ == '__main__':
drop_file(dir_path)
2、关于策略
备份脚本是一个小时执行一次,删除脚本是每天执行一次。使用jenkins的pipeline执行,给出删除策略的pipeline:
1)create a pipeline task in jenkins
pipeline{
agent{ label 'db1'}
stages{
stage('drop old file'){
steps{
dir('/data/scripts'){
sh 'python rm_backup.py'
}
}
}
}
}
2)you must create a schedule
Build periodically
50 23 * * *
mongodb备份策略的更多相关文章
- MongoDB 备份与还原 mongodump、mongorestore
目录 MongoDB 备份与还原 一. MongoDB 备份 1.mongodump 2 .cp 或者rsync 3.单节点意外关闭后,如何恢复数据 4.查看备份数据 二.MongoDB 还原 1.m ...
- mongodb 备份
本篇文章来自于阿里云技术专家郑涔(明俨)在2018年<Redis.MongoDB.HBase大咖直播大讲堂>技术直播峰会中的分享,该分享整体由四个部分构成: 1.MongoDB备份恢复 2 ...
- DG环境数据库RMAN备份策略制定
DG环境数据库RMAN备份策略制定: 主库(Primary) 全库备份 归档备份 删除历史文件夹 备库(Standby) 删除归档 引用说明 主库(Primary) $ crontab -l 0 1 ...
- 记录一则RMAN备份策略修正案例
背景:在给某客户处理问题时,发现客户数据库的备份空间即将用尽,进一步查看发现是用户数据库的当前RMAN备份策略存在潜在问题,需要修改备份策略. 环境:SunOS 5.10 + Oracle 11.2. ...
- mongodb 备份 还原 导出 导入
张映 发表于 2013-12-03 分类目录: nosql 标签:mongodb, 备份, 导入, 导出, 还原 mongodb数据备份和还原主要分为二种,一种是针对于库的mongodump和mong ...
- Oracle备份及备份策略
第二章. 了解备份的重要性 可以说,从计算机系统出世的那天起,就有了备份这个概念,计算机以其强大的速度处理能力,取代了很多人为的工作,但是,往往很多时候,它又是那么弱不禁风,主板上的芯片.主板电路.内 ...
- Oracle RMAN备份策略
建立增量备份:如果数据库运行于不归档模式下,只能在数据库干净关闭的情况下 ( 以 normal .immediate . transactional 方式关闭 ) 才能进行一致性的增量备份,如果数据库 ...
- MongoDB 备份(mongodump)恢复(mongorerstore) 导出 (Mongoexport) 导入( Mongoimport)
MongoDB 备份(mongodump) 在Mongodb中我们使用mongodump命令来备份MongoDB数据.该命令可以导出所有数据到指定目录中. mongodump命令可以通过参数指定导出的 ...
- SVN服务器几种备份策略---重点svnsync备份---OK
配置管理的一个重要使命是保证数据的安全性,防止服务器应硬盘损坏.误操作造成数据无法恢复的灾难性后果.因此制定一个完整的备份策略非常重要. 一般来说,备份策略应规定如下几部分内容:备份频度.备份方式.备 ...
随机推荐
- Uncaught TypeError: Illegal invocation
Jquery实现Ajax异步提交时报错"Uncaught TypeError: Illegal invocation",如下图: 排查发现错误在于此: 复制代码代码如下: data ...
- 用delegate实现.NET应用程序的同步函数的异步调用-.NET多线程编程实践之一
在C++中有2种类型的线程:UI Thread和Worker Thread,前者是基于用户界面的有消息循环的线程.后者是没有用户界面的侧重于大时空运算的线程.直接调用Windows相关线程及同步对象的 ...
- AngularJS 脏检查机制
脏检查是AngularJS的核心机制之一,它是实现双向绑定.MVVM模式的重要基础. 一.digest循环 AngularJS将双向绑定转换为一个堆watch表达式,然后递归检查这些watch表达式的 ...
- 《A computer-aided healthcare system for cataract classification and grading based on fundus image analysis》学习笔记
Abstract This paper presents a fundus image analysis based computer aided system for automatic class ...
- [控件]unigui移动端下Unidatepicker时间显示解决方案
[控件]unigui移动端下Unidatepicker时间显示解决方案 http://tz10000.com/kong-jian-unigui-yi-dong-duan-xia-unidatepick ...
- iOS_URI跳转方式多种地图导航的代码实践
先来看一下我们要达到什么效果,就是当我们点导航的时候,会弹出下面这个选择列表. 当然,如果没有安装某个地图APP,那么对应的选项是不会出现的.检测APP是否安装,只要调用下面这个方法就可以了 [[UI ...
- 个人作业四--Alpha阶段个人总结
一.个人总结 在alpha 结束之后, 每位同学写一篇个人博客, 总结自己的alpha 过程: 请用自我评价表:http://www.cnblogs.com/xinz/p/3852177.html 有 ...
- play framework - 初识
背景 研发代码框架是play-framework框架,想看代码的话,需要学习下play框架.IDE工具的话之前一直用的idea,所以本文涉及的idea play的配置 和 一些play的简单知识 认识 ...
- 背水一战 Windows 10 (58) - 控件(集合类): ListViewBase - ListView, GridView
[源码下载] 背水一战 Windows 10 (58) - 控件(集合类): ListViewBase - ListView, GridView 作者:webabcd 介绍背水一战 Windows 1 ...
- file-loader引起的html-webpack-plugin坑
引言 最近,我们的一个后台系统要改版为基于react + redux + react-router + ant-design 技术栈,切换到当下比较新的技术来实现后台系统:在项目实施过程中,选择了基于 ...