Python編寫備份程式指令碼

2021-10-25 02:28:45 字數 2176 閱讀 8324

編寫backup.py指令碼,實現以下目標:

1、需要支援完全和增量備份

2、周一執行完全備份

3、其他時間執行增量備份

4、備份檔案需要打包為tar檔案並使用gzip格式壓縮

import os

import tarfile

import hashlib

import pickle

from time import strftime

def check_md5(fname):

m = hashlib.md5()

with open(fname, 『rb』) as fobj:

while 1:

data = fobj.read(4096)

if not data:

break

m.update(data)

return m.hexdigest()

def full_backup(src, dst, md5file):

「完全備份」

# 拼接出備份檔案名

fname = 『%s_full_%s.tar.gz』 % (os.path.basename(src), strftime(』%y%m%d』))

fname = os.path.join(dst, fname)

# 打tar包

tar = tarfile.open(fname, 'w:gz')

tar.add(src)

tar.close()

# 計算每個檔案的md5值

md5dict = {}

for path, folders, files in os.walk(src):

for file in files:

key = os.path.join(path, file)

md5dict[key] = check_md5(key)

# 儲存md5字典到檔案

with open(md5file, 'wb') as fobj:

pickle.dump(md5dict, fobj)

def incr_backup(src, dst, md5file):

「增量備份」

# 拼接出備份檔案名

fname = 『%s_incr_%s.tar.gz』 % (os.path.basename(src), strftime(』%y%m%d』))

fname = os.path.join(dst, fname)

# 計算每個檔案的md5值

md5dict = {}

for path, folders, files in os.walk(src):

for file in files:

key = os.path.join(path, file)

md5dict[key] = check_md5(key)

# 取出前一天的md5值

with open(md5file, 'rb') as fobj:

old_md5 = pickle.load(fobj)

# 找出新增檔案和改動的檔案,備份

tar = tarfile.open(fname, 'w:gz')

for key in md5dict:

# if key not in old_md5 or md5dict[key] != old_md5[key]:

if old_md5.get(key) != md5dict[key]:

tar.add(key)

tar.close()

# 更新md5檔案

with open(md5file, 'wb') as fobj:

pickle.dump(md5dict, fobj)

ifname== 『main』:

src = 『/tmp/demo/security』

dst = 『/tmp/demo/backup』

md5file = 『/tmp/demo/backup/md5.data』

if strftime(』%a』) == 『mon』:

full_backup(src, dst, md5file)

else:

incr_backup(src, dst, md5file)

編寫mysql備份指令碼 mysql 備份指令碼的編寫

最近在為做一些邊邊角角的工作,現在有乙個需求要每天把mysql的資料庫dump出來到備份機器上面去.看似簡單的任務也潛在了很多的需求,整理如下 自動執行 crontab 指令碼的環境變數設定 由於通過crontab 啟動執行的指令碼環境變數沒有設定,需要在指令碼中設定環境變數 使用何種方式備份資料庫...

編寫自動備份bat指令碼

對於windows系統,我們可以使用bat指令碼來代替手工拷貝檔案備份.主要使用的語句有 1.xcopy 拷貝 2.md 建立 我的原始需求 按當前系統日期建立資料夾,並把指定要備份的目錄拷貝到該資料夾下.指令碼 echo off for f tokens 2 delims a in wmic os...

PYTHON備份指令碼

usr local python251 bin python import sysimport osimport time 如果沒有輸入引數,則會提示並且中斷。iflen sys ar 1 0 print please input source file or directory.sys exit ...