用Python写脚本,实现完全备份和增量备份的示例

需求:

在/root/backup下面有两个文件夹dst和src。要求在周一的时候进行完全备份,其余日子进行增量备份。从src备份到dst。

思路及关键点:

建立一个文件,以字典方式记录src的文件名以及文件对应的md5的值

完全备份的时候将文件名和md5值写在一个文件里面。cPickle的知识点。

增量备份的时候比较文件名是否在key里面,没有就要备份;有的话,这个文件的md5值是否改变,改变了就要备份

os.path.join()拼接路径,os.listdir(),os.chdir()

time.strftime()判断周几

cPickle,可以无损记录所有Python的变量类型。文件操作。

tarfile对文件打包的使用

hashlib用于计算文件md5的值。注意不要一次打开一个文件,4k地打开,防止打开一个超大文件爆内存。

with file()可以打开一个文件之后不f.close()

#!/usr/bin/env python
import time
import os
import cPickle as p
import tarfile
import hashlib
baseDir = '/root/backup'
srcDir = 'src'
dstDir = 'dst'
fullName = "full_%s_%s.tar.gz" % (srcDir, time.strftime('%Y%m%d'))
incrName = "incr_%s_%s.tar.gz" % (srcDir, time.strftime('%Y%m%d'))
md5file = 'md5.data'
def md5sum(fname):
 m = hashlib.md5()
 with file(fname) as f:
  while True:
   data = f.read(4096)
   if len(data) == 0:
    break
   m.update(data)
 return m.hexdigest()
def fullBackup():
 md5Dict = {}
 fileList = os.listdir(os.path.join(baseDir,srcDir))
 for eachFile in fileList:
  md5Dict[eachFile] = md5sum(os.path.join(baseDir,srcDir,eachFile))
 with file(os.path.join(baseDir,dstDir,md5file),'w') as f:
  p.dump(md5Dict,f)
 tar = tarfile.open(os.path.join(baseDir,dstDir,fullName),'w:gz')
 os.chdir(baseDir)
 tar.add(srcDir)
 tar.close()
def incrBackup():
 newmd5 = {}
 fileList = os.listdir(os.path.join(baseDir,srcDir))
 for eachFile in fileList:
  newmd5[eachFile] = md5sum(os.path.join(baseDir,srcDir,eachFile))
 with file(os.path.join(baseDir,dstDir,md5file)) as f:
  storedmd5 = p.load(f)
 tar = tarfile.open(os.path.join(baseDir,dstDir,incrName),'w:gz')
 os.chdir(baseDir)
 for eachKey in newmd5:
  if (eachKey not in storedmd5) or (newmd5[eachKey] != storedmd5[eachKey]):
   tar.add(os.path.join(srcDir,eachKey))
 tar.close()
 with file(os.path.join(baseDir,dstDir,md5file),'w') as f:
  p.dump(newmd5,f)
def main():
 if time.strftime('%a') == 'Mon':
  fullBackup()
 else:
  incrBackup()
if __name__ == '__main__':
 main()
~  

以上这篇用Python写脚本,实现完全备份和增量备份的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

您可能感兴趣的文章:

  • Python 实现文件的全备份和差异备份详解
  • Python实现网站文件的全备份和差异备份
  • Python实现备份文件实例
  • python在windows下实现备份程序实例
  • Python实现配置文件备份的方法
(0)

相关推荐

  • Python实现备份文件实例

    本文实例讲述了Python实现备份文件的方法,是一个非常实用的技巧.分享给大家供大家参考.具体方法如下: 该实例主要实现读取一个任务文件, 根据指定的任务参数自动备份. 任务文件的格式: (注意,分号后面注释是不支持的) [task] ; 一项任务开始 dir=h:/Project ; 指定备份的目录 recusive=1 ; 是否递归子目录 suffix=h|cpp|hpp|c|user|filters|vcxproj|sln|css|gif|html|bmp|png|lib|dsw|dsp|

  • Python 实现文件的全备份和差异备份详解

    Python实现文件的全备份和差异备份 之前有写利用md5方式来做差异备份,但是这种md5方式来写存在以下问题: md5sum获取有些软连接的MD5值存在问题 不支持对空目录进行备份,因为md5sum无法获取空目录的md5值 权限的修改md5sum无法判断 解决方案: 利用文件的mtime ctime mtime(Modified time)是在写入文件时随文件内容的更改而更改的 ctime(Create time)是在写入文件.更改所有者.权限或链接设置时随Inode的内容更改而更改的 废话不

  • python在windows下实现备份程序实例

    很多书籍里面讲的Python备份都是在linux下的,而在xp上测试一下也可以执行备份功能,代码都差不多相同,就是到执行打包的时候是不一样的.而且要用到winrar,其他的压缩文件也是一样的. 首先我们要把winrar的路径添加到path里面,这里添加完了要重启机子才有效. 这里要注意:把winrar的路径添加到path里面之后一定要重启,否则path的设定不会起作用,打包就会失败!   这里用到得命令是:winrar a xxx.zip xxxx xxx为任意字符   实例代码如下: #备份脚

  • Python实现网站文件的全备份和差异备份

    之前有写利用md5方式来做差异备份,但是这种md5方式来写存在以下问题: •md5sum获取有些软连接的MD5值存在问题 •不支持对空目录进行备份,因为md5sum无法获取空目录的md5值 •权限的修改md5sum无法判断 解决方案: 利用文件的mtime ctime mtime(Modified time)是在写入文件时随文件内容的更改而更改的 ctime(Create time)是在写入文件.更改所有者.权限或链接设置时随Inode的内容更改而更改的 废话不多说直接上代码: #!/usr/b

  • Python实现配置文件备份的方法

    本文实例讲述了Python实现配置文件备份的方法.分享给大家供大家参考.具体如下: 这里平台为Linux: #!/usr/bin/python #Author:gdlinjianying@qq.com import os import time source = ['/etc/sysconfig/network-scripts', '/etc/sysconfig/network', '/etc/resolv.conf'] target_dir = '/opt/' target = target_

  • 用Python写脚本,实现完全备份和增量备份的示例

    需求: 在/root/backup下面有两个文件夹dst和src.要求在周一的时候进行完全备份,其余日子进行增量备份.从src备份到dst. 思路及关键点: 建立一个文件,以字典方式记录src的文件名以及文件对应的md5的值 完全备份的时候将文件名和md5值写在一个文件里面.cPickle的知识点. 增量备份的时候比较文件名是否在key里面,没有就要备份:有的话,这个文件的md5值是否改变,改变了就要备份 os.path.join()拼接路径,os.listdir(),os.chdir() ti

  • Python写脚本常用模块OS基础用法详解

    收集了一些关于OS库的用法,整理归纳一下,方便使用 import os # 系统操作 print(os.sep) # 获取当前系统的路径分隔符 print(os.name) # 获取当前使用的工作平台 print(os.getenv('PATH')) # 获取名为 PATH 的环境变量 print(os.getcwd()) # 获取当前的路径 print(os.environ['PATH']) # 可以返回环境相关的信息 不传参时,以字典的方式返回所有环境变量 # 调用系统命令 os.syste

  • 用Python写脚本自动评论再也不怕碰到喷子

    自从上次在B站看到一个喷子,一个人喷一堆人,当时我就看不过去了,直接用Python写了个自动评论软件,他说一句我能说十句,当场教育喷子~ 于是乎,顺便整理一下,做了一手教程,分享给大家,当然不是教大家去做喷子,只是学学这么个技术~ 不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以加这个群点我免费领取资料 包括今天的代码,过几天我还会做个视频教程出来,有需要也可以领取~ 给大家准备的学习资料包括但不限于: Python

  • mysql全量备份、增量备份实现方法

    mysql全量备份.增量备份.开启mysql的logbin日志功能.在/etc/my.cnf文件中加入以下代码: [mysqld] log-bin = "/home/mysql/logbin.log" binlog-format = ROW log-bin-index = "/home/mysql/logindex" binlog_cache_size=32m max_binlog_cache_size=512m max_binlog_size=512m 重启mys

  • mysql mysqldump数据备份和增量备份

    本篇文章主要讲如何使用shell实现mysql全量,增量备份.增量备份在周一-周六凌晨3点,会复制mysql-bin.00000*到指定目录:而全量备份则使用mysqldump将所有的数据库导出,每周日凌晨3点执,并会删除上周留下的mysq-bin.00000*.然后对mysql的备份操作会保留在bak.log文件中.如下图:开始:2013年05月02日 15:10:57 结束:2013年05月02日 15:12:16 20130502.sql.tgz succ是由DBFullyBak.sh产生

  • linux实现对上传文件的定时备份、增量备份的方法

    介绍 如果你们使用的是类似阿里云的OSS存储服务,那么可以使用服务提供的定时备份,这样可以不用考虑在服务器上做文件备份. 实际上想实现基础的备份还是非常简单的,我们平常使用tar.unzip等命令打包文件,在这个基础上编写一个shell脚本,利用linux的crontab功能添加一个定时执行程序,这样就可以简单实现文件备份.但是这种方式在文件量不断增大后还行吗?答案肯定是不行,当文件量不断增加,所占存储空间增大.这种简单的备份方式会让压缩时间过长,占用过多的存储空间.那么怎么解决这一问题呢?我们

  • MySQL数据库完全备份与增量备份详解

    目录 定义 完全备份与恢复演示 定义 完全备份就是将数据库中的数据及所有对象全部备份. 由于 MySQL 服务器中的数据文件是基于磁盘的文本文件,所以完全备份就是复制数据库文件,是最简单也是最快速的方式. 但 MySQL 服务器的数据文件在服务器运行期间,总是处于打开状态,为实现真正的完全备份,需要先停止 MySQL 数据库服务器. 为了保障数据的完整性,在停止 MySQL 服务器之前,需要先执行 flush tables 语句将所有数据写入到数据文件中.对于该方法同学们只需了解,因为将生产环境

  • MySQL数据库备份以及常用备份工具集合

    一.数据库备份种类 按照数据库大小备份,有四种类型,分别应用于不同场合,下面简要介绍一下: 1.1完全备份 这是大多数人常用的方式,它可以备份整个数据库,包含用户表.系统表.索引.视图和存储过程等所有数据库对象.但它需要花费更多的时间和空间,所以,一般推荐一周做一次完全备份. 1.2事务日志备份 事务日志是一个单独的文件,它记录数据库的改变,备份的时候只需要复制自上次备份以来对数据库所做的改变,所以只需要很少的时间.为了使数据库具有鲁棒性,推荐每小时甚至更频繁的备份事务日志. 1.3差异备份 也

  • OpenStack虚拟机快照和增量备份实现方法

    目录 1 快照的概念 2 主流libvirt快照实现介绍 2.1 libvirt的内部快照操作 2.2 libvirt的外部快照操作 3 OpenStack原生虚拟机快照和备份 4 使用ceph实现OpenStack虚拟机快照功能 5 使用ceph实现OpenStack虚拟机增量备份功能 5.1 创建备份 5.2 恢复备份 1 快照的概念 一般对快照的理解就是能够将系统还原到某个瞬间,这就是快照的作用.快照针对要保存的数据分为内存快照和磁盘快照,内存快照就是保存当前内存的数据,磁盘快照就是保存硬

  • MySQL选择合适的备份策略和备份工具

    目录 一.多地部署 二.备份的常见分类 1.物理备份 VS 逻辑备份 1)物理备份 2)逻辑备份 2.离线备份 VS 在线备份 3.全量备份 VS 增量备份 三.MySQL中的备份工具 1.物理备份 2.逻辑备份 四.mysqlbackup VS mysqldump 五.如何检测备份的有效性 六.RTO 和 RPO 1.RTO 2.RPO 七.总结 前言: 在确定备份策略和选择备份工具时,应从业务的RTO和RPO出发,结合存储成本综合考虑.数据库备份的重要性毋庸置疑,可以说,它是数据安全的最后一

随机推荐