ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

【Python维护数据库】备份PgSQL实例下指定的数据库

2022-04-06 18:01:12  阅读:186  来源: 互联网

标签:-% log Python 数据库 db PgSQL path backup 备份


Postgresql:12.3

Python:2.7.5

利用py脚本备份PgSQL数据库

$ cat db_backup.py 
#!/usr/bin/env python
# -*- coding: utf8 -*-
"""pg_dump备份PgSQL实例下指定数据库zedb"""
import sys,os,time
from datetime import datetime,timedelta,date
import shutil
db_user = 'backup'
#db_pwd = 'xxx'
db_port = '5432'
db_name = 'zedb'
backup_path = '/pgshare/db_dump/'
cmd_path = '/usr/local/pgsql/bin/'
log_path = backup_path + 'log'

# 创建日志函数
def writeLogs(filename,contents):
  f = file(filename,'aw')
  f.write(contents)
  f.close()

today = backup_path + time.strftime('%Y-%m-%d')
fname = today + os.sep + time.strftime('%Y-%m-%d') + '_' + db_name + '.backup'

# 创建备份目录
if not os.path.exists(today):
   Msg = '-'*30 + time.strftime('%Y-%m-%d,%H:%M:%S') + '-'*30 + '\n'
   if(os.mkdir(today)) == None:
       Msg += '** 成功创建备份目录: ' + today + '\n\n'
       writeLogs(log_path,Msg)
   else:
       Msg += '!! 创建备份目录: ' + today + '失败,请检查目录是否可写!\n\n'
       writeLogs(log_path,Msg)
       sys.exit()

# 备份数据库
cmd_dump = "%spg_dump -h localhost  -p %s -U %s -F c -b -v -f %s %s" % \
               (cmd_path,db_port,db_user,fname,db_name)
# 执行备份命令
if os.system(cmd_dump) == 0:
   writeLogs(log_path,'数据备份为: ' + fname + '\n')
else:
   writeLogs(log_path,'数据备份失败!\n')
##清理历史备份
def is_valid_date(str):
    '''判断是否是一个有效的日期字符串'''
    try:
        time.strptime(str, "%Y-%m-%d")
        return True
    except:
        return False
try:
    define_date = (date.today() + timedelta(days=-7)).strftime("%Y-%m-%d")
    print("!!!" + define_date + "之前的备份将进行清理!!!")
    for f in os.listdir(backup_path):
        if is_valid_date(f):
            if f < define_date:
                rm_f = backup_path + f
                print(rm_f)
                writeLogs(log_path, '删除过期的日期目录: ' + rm_f + '\n')
                shutil.rmtree(rm_f)
except OSError as err:
    print(err)

 

标签:-%,log,Python,数据库,db,PgSQL,path,backup,备份
来源: https://www.cnblogs.com/helon/p/16107729.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有