【PgSQL備份】pg_dump備份pg資料庫的python指令碼
阿新 • • 發佈:2022-04-03
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)