python 处理数据库bak_Python脚本 数据库备份后压缩至zip文件 并删除n天前的备份...

下面是刚学python的时候写的小脚本,建议参考另一篇文章中的shell脚本:如何创建一个MySQL备份及自动清理计划

本脚本会执行下面任务

自动创建当日备份文件

日志记录

压缩备份文件

删除n天前的备份文件。

使用前需要先修改配置信息,本脚本为CentOS创建,若使用到windows上需要先看看是否有不兼容的地方。

有问题可以留言。

本脚本不是很成熟,研究一下即可,不建议在生产环境使用。

#!/usr/bin/python

#coding:utf8

#自动创建当日备份文件、日志记录、压缩备份文件、删除n天前的备份文件

import datetime,os,zipfile

#--配置信息--#

user='root' #mysql用户,需要确定此用户有操作所有需要备份数据库的权限

passwd='000000' #mysql密码

dblist=['bbs','cacti','test'] #mysql数据库列表(需要备份几个就填写几个)

bakdir='/backup/sql/' #数据库备份目录

logfile='/backup/sql/sqlbak.log' #备份日志文件

delbak='1' #是否删除备份文件(1=删除,0=不删除)

delday=20 #删除n天前的文件,数字(int)

#-----------#

'''变量说明

now_date 当前日期,格式(0000-00-00)

del_date 要删除的日期(0000-00-00)

file_zip 压缩sql文件后的名称

cmd_sql 根据条件生成的备份语句

dbs 需要备份的数据库数量

m 循环的次数

logtext 日志内容

'''

if os.path.exists(bakdir)==False:

os.makedirs(bakdir)

os.chdir(bakdir)

now_date=str(datetime.datetime.now().date())

del_date=str(datetime.datetime.now().date()-datetime.timedelta(days=delday))

file_zip=now_date+'.zip'

dbs=len(dblist)

m=0

while m != dbs:

file_sql=dblist[m]+now_date+'.sql'

cmd_sql='mysqldump -u '+user+' --password='+passwd+' '+dblist[m]+' > '+bakdir+file_sql

os.popen(cmd_sql)

m=m+1

m=0

f=zipfile.ZipFile(file_zip,'w',zipfile.ZIP_DEFLATED)

while m != dbs:

f.write(dblist[m]+now_date+'.sql')

os.remove(dblist[m]+now_date+'.sql')

m=m+1

m=0

f.close

if delbak=='1':

if os.path.exists(del_date+'.zip')==True:

os.remove(del_date+'.zip')

if os.path.exists(file_zip)==False:

logtext=os.linesep+str(datetime.datetime.now())+':'+os.linesep+'脚本运行已完成,未发现备份后的文件,请检查配置。'+os.linesep

else:

logtext=os.linesep+str(datetime.datetime.now())+':'+os.linesep+'脚本运行已完成,备份后的文件信息为:'+os.linesep+str(os.stat(file_zip))+os.linesep

if os.path.exists(logfile)==True:

f=open(logfile,'a')

f.write(os.linesep+logtext)

f.close

else:

f=open(logfile,'w')

f.write(logtext)

f.close

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以提供一个python脚本,它可以帮助你进行增量备份,只保存一个月的文件:import os import datetime import shutil# 设置备份源路径 src_dir = 'C:/your_source_dir/'# 设置备份目标路径 dest_dir = 'C:/your_destination_dir/'# 设置保存时间为1个月 now = datetime.datetime.now() one_month_ago = now - datetime.timedelta(weeks=4)# 遍历备份源路径 for file in os.listdir(src_dir): # 获取每个文件的修改时间 file_modified_time = datetime.datetime.fromtimestamp(os.stat(src_dir + file).st_mtime) # 如果文件修改时间大于1个月前,则进行备份 if file_modified_time > one_month_ago: shutil.copy(src_dir + file, dest_dir) ### 回答2: 数据库备份是非常重要的,保证数据的完整性和安全性。以下是一个使用Python编写的数据库增量备份脚本,以每月为单位保留备份文件。 ```python import os import shutil import datetime # 设置备份目录和数据库名 backup_dir = "/path/to/backup/" database_name = "your_database.db" # 获取当前日期 current_date = datetime.datetime.now() # 创建备份文件名 backup_file_name = f"{database_name}_{current_date.strftime('%Y%m%d')}.db" # 获取一个月前的日期 one_month_ago = current_date - datetime.timedelta(days=30) # 遍历备份目录,删除一个月之前的备份 for file_name in os.listdir(backup_dir): file_path = os.path.join(backup_dir, file_name) # 判断文件是否为备份文件 if file_name.startswith(database_name) and file_name.endswith(".db"): # 获取备份文件的日期 file_date = datetime.datetime.strptime(file_name.split("_")[1].split(".")[0], "%Y%m%d") # 判断备份文件日期是否早于一个月前 if file_date < one_month_ago: # 删除过期的备份文件 os.remove(file_path) # 执行数据库备份 shutil.copy(database_name, os.path.join(backup_dir, backup_file_name)) ``` 该脚本首先设置备份目录和数据库名称,然后获取当前日期,并创建备份文件名。接下来,计算一个月前的日期,遍历备份目录下的文件,找到之前的备份文件删除。 最后,使用`shutil.copy()`函数执行数据库备份,将数据库文件复制到备份目录下,并使用备份文件名进行命名。 你可以将`/path/to/backup/`替换为实际的备份目录路径,将`your_database.db`替换为实际的数据库文件名。 这样,每次运行该脚本时,都会将最新的数据库备份备份目录,并在备份目录中保留一个月的备份文件。 ### 回答3: 下面是一个可以实现数据库增量备份Python脚本示例: ```python import os import shutil import datetime # 数据库备份目录 backup_dir = "/path/to/backup" # 数据库文件目录 db_dir = "/path/to/db" # 备份的月份数 months_to_keep = 1 # 获取当前日期 current_date = datetime.datetime.now().strftime("%Y-%m-%d") # 获取备份目录的日期列表 backup_dates = sorted([d for d in os.listdir(backup_dir) if os.path.isdir(os.path.join(backup_dir, d))]) # 删除超过指定月份数的备份 if len(backup_dates) >= months_to_keep: for i in range(len(backup_dates) - months_to_keep + 1): shutil.rmtree(os.path.join(backup_dir, backup_dates[i])) # 创建当天的备份目录 current_backup_dir = os.path.join(backup_dir, current_date) os.makedirs(current_backup_dir) # 备份数据库文件 for file_name in os.listdir(db_dir): file_path = os.path.join(db_dir, file_name) shutil.copy(file_path, current_backup_dir) ``` 上述脚本通过指定的备份目录和数据库文件目录进行增量备份,并将备份文件按日期保存在备份目录中。通过比较备份目录中的备份日期数量和设置的月份数来确定是否需要删除旧的备份。如果备份目录中的日期数量超过了设定的月份数,则按日期排序删除最早的备份目录。之后,脚本创建当天的备份目录,并将数据库文件复制到该目录中,即完成了增量备份。 请注意,上述示例是基于操作系统文件复制和删除来实现的,对于不同的数据库类型,可能需要采用不同的备份和恢复机制。此外,该脚本只是示例,可能需要根据实际需求进行适当的修改和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值