編寫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 ...