1. 程式人生 > 其它 >【PgSQL備份】pg_dump備份pg資料庫的python指令碼

【PgSQL備份】pg_dump備份pg資料庫的python指令碼

pg_dump邏輯備份

對指定資料庫進行備份,並對7天前的備份進行清理,將過程資訊列印日誌

 1 #!/usr/bin/env python
 2 # -*- coding: utf8 -*-
 3 import sys,os,time
 4 from datetime import datetime,timedelta,date
 5 import shutil
 6 
 7 db_user = 'backup'
 8 db_pwd = 'xxxxxx'
 9 db_port = '5431'
10 db_name = 'pgdb'
11 
12 backup_path = '/data/db_dump/
' 13 cmd_path = '/usr/local/pgsql/bin/' 14 log_path = backup_path + 'log' 15 16 # 建立日誌函式 17 def writeLogs(filename,contents): 18 f = file(filename,'aw') 19 f.write(contents) 20 f.close() 21 22 today = backup_path + time.strftime('%Y-%m-%d') 23 fname = today + os.sep + time.strftime('%Y-%m-%d') + '
_' + db_name + '.backup' 24 25 # 建立備份目錄 26 if not os.path.exists(today): 27 Msg = '-'*30 + time.strftime('%Y-%m-%d,%H:%M:%S') + '-'*30 + '\n' 28 if(os.mkdir(today)) == None: 29 Msg += '** 成功建立備份目錄: ' + today + '\n\n' 30 writeLogs(log_path,Msg) 31 else: 32 Msg += '!! 建立備份目錄:
' + today + '失敗,請檢查目錄是否可寫!\n\n' 33 writeLogs(log_path,Msg) 34 sys.exit() 35 36 # 備份pgdb資料庫 37 cmd_dump = "%spg_dump -h localhost -p %s -U %s -F c -b -v -f %s %s" % \ 38 (cmd_path,db_port,db_user,fname,db_name) 39 # 執行備份命令 40 if os.system(cmd_dump) == 0: 41 writeLogs(log_path,'資料備份為: ' + fname + '\n') 42 else: 43 writeLogs(log_path,'資料備份失敗!\n') 44 ##清理歷史備份 45 def is_valid_date(str): 46 '''判斷是否是一個有效的日期字串''' 47 try: 48 time.strptime(str, "%Y-%m-%d") 49 return True 50 except: 51 return False 52 try: 53 define_date = (date.today() + timedelta(days=-7)).strftime("%Y-%m-%d") 54 print("!!!" + define_date + "之前的備份將進行清理!!!") 55 for f in os.listdir(backup_path): 56 if is_valid_date(f): 57 if f < define_date: 58 rm_f = backup_path + f 59 print(rm_f) 60 writeLogs(log_path, '刪除過期的日期目錄: ' + rm_f + '\n') 61 shutil.rmtree(rm_f) 62 except OSError as err: 63 print(err)