概述

数据库的备份非常非常非常重要!!!否则出问题连哭的机会有没有(欲哭无泪)今天主要是做一个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备份策略的更多相关文章

  1. MongoDB 备份与还原 mongodump、mongorestore

    目录 MongoDB 备份与还原 一. MongoDB 备份 1.mongodump 2 .cp 或者rsync 3.单节点意外关闭后,如何恢复数据 4.查看备份数据 二.MongoDB 还原 1.m ...

  2. mongodb 备份

    本篇文章来自于阿里云技术专家郑涔(明俨)在2018年<Redis.MongoDB.HBase大咖直播大讲堂>技术直播峰会中的分享,该分享整体由四个部分构成: 1.MongoDB备份恢复 2 ...

  3. DG环境数据库RMAN备份策略制定

    DG环境数据库RMAN备份策略制定: 主库(Primary) 全库备份 归档备份 删除历史文件夹 备库(Standby) 删除归档 引用说明 主库(Primary) $ crontab -l 0 1 ...

  4. 记录一则RMAN备份策略修正案例

    背景:在给某客户处理问题时,发现客户数据库的备份空间即将用尽,进一步查看发现是用户数据库的当前RMAN备份策略存在潜在问题,需要修改备份策略. 环境:SunOS 5.10 + Oracle 11.2. ...

  5. mongodb 备份 还原 导出 导入

    张映 发表于 2013-12-03 分类目录: nosql 标签:mongodb, 备份, 导入, 导出, 还原 mongodb数据备份和还原主要分为二种,一种是针对于库的mongodump和mong ...

  6. Oracle备份及备份策略

    第二章. 了解备份的重要性 可以说,从计算机系统出世的那天起,就有了备份这个概念,计算机以其强大的速度处理能力,取代了很多人为的工作,但是,往往很多时候,它又是那么弱不禁风,主板上的芯片.主板电路.内 ...

  7. Oracle RMAN备份策略

    建立增量备份:如果数据库运行于不归档模式下,只能在数据库干净关闭的情况下 ( 以 normal .immediate . transactional 方式关闭 ) 才能进行一致性的增量备份,如果数据库 ...

  8. MongoDB 备份(mongodump)恢复(mongorerstore) 导出 (Mongoexport) 导入( Mongoimport)

    MongoDB 备份(mongodump) 在Mongodb中我们使用mongodump命令来备份MongoDB数据.该命令可以导出所有数据到指定目录中. mongodump命令可以通过参数指定导出的 ...

  9. SVN服务器几种备份策略---重点svnsync备份---OK

    配置管理的一个重要使命是保证数据的安全性,防止服务器应硬盘损坏.误操作造成数据无法恢复的灾难性后果.因此制定一个完整的备份策略非常重要. 一般来说,备份策略应规定如下几部分内容:备份频度.备份方式.备 ...

随机推荐

  1. [kuangbin]树链剖分 C - Tree

    和平常的树链剖分维护边权不同的地方在于对线段树的要求较高 NEGATE 反转区间,也就是a - b 内所有的边权取相反数 而Query询问是最大值,所以也就是维护可取反区间的最大值问题 需要维护的值是 ...

  2. mysql变更数据的捕获和入库

    问题:涉及状态的信息,mysql中是update的,缺少中间状态的记录.数据分析中需要这部分数据. 思路:后端服务通过监控某张表的某个字段,根据mysql的binlog文件,还原数据,发送到kafka ...

  3. Swift3 页面顶部实现拉伸效果代码

    //懒加载 //顶部需要拉伸自定义视图 lazy var headView:MyHeaderView = { //let hframe = CGRect(x: 0, y: 0, width: swid ...

  4. 4.动态HTML处理和机器图像识别

    Selenium Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上, ...

  5. 软件测试实践平台(Mooctest)FAQ

    0. 背景 我们在<软件测试技术>课程使用 MOOCTEST (mooctest.net) 作为课程的实践教学平台. 在教学过程中学生们遇到了一些问题,本文将一一总结. 注意:本文在解决问 ...

  6. 行人检测(Pedestrian Detection)资源

    一.论文 综述类的文章 [1]P.Dollar, C. Wojek,B. Schiele, et al. Pedestrian detection: an evaluation of the stat ...

  7. WebAPI中发送字节数组

    今天工作中遇到了一个情景: 前端向后台发送一个请求,希望后台返回一组数据,由于后台返回的数据量很大,希望尽可能压缩响应的大小 我的想法:后台将数据(Short的数组)直接转换成Byte[]  然后将b ...

  8. 剑指offer编程题Java实现——面试题3二维数组中的查找

    题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数.   下面是我实现的代码 ...

  9. underscore.js源码研究(5)

    概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...

  10. activemq在一台服务器上启动多个Broker

    步骤如下: 1.把整个conf文件夹复制一份,比如叫conf2 2.修改里面的activemq.xml文件 ①brokerName不能和原来的重复 ②数据存放的文件名称不能重复,比如<kahaD ...