python自动备份数据库_linux 使用python3 定时备份mysql数据库脚本 修改配置直接可用....

这是一个Python脚本,用于实现定期备份MySQL数据库并压缩,同时清理过期的备份文件。它读取包含数据库名的文本文件,使用`mysqldump`进行备份,并通过`tar`进行压缩。脚本还包含了删除指定天数前的备份文件的函数,以保持存储空间的整洁。通过`schedule`库实现定时任务,确保备份的及时性和自动化。
摘要由CSDN通过智能技术生成

# Time : 2018/12/24

# Author : 452335710@qq.com

#依赖包 pip install schedule

#注意事项

#1. linux中 使用os.system()包裹的命令有特殊字符如)(请使用转义\)\(或'(' ')'

#2. 输入的数据库密码 -p+密码 无空格

import os

import time

import shutil

import schedule

import datetime

# 定义服务器,用户名、密码、数据库名称(多个库分行放置)和备份的路径

DB_HOST = 'localhost'

DB_USER = 'dbuser'#root

DB_USER_PASSWD = 'dbpwd'#123456

#备份的数据库的名字 把数据库名字放在dbname.txt文本中,每个数据库占一行不加双引号

DB_NAME = r'D:\webtest\untitled1\dbname.txt'

BACKUP_PATH = 'D:/import备份/test/'

class Run_backups:

def __init__(self):

self.DATETIME = time.strftime('%Y%m%d-%H%M%S')

self.TODAYBACKUPPATH = BACKUP_PATH + self.DATETIME

print("createing backup folder!")

#创建备份文件夹

if not os.path.exists(self.TODAYBACKUPPATH):

os.makedirs(self.TODAYBACKUPPATH)

print("checking for databases names file")

self.run()

#定义执行备份脚本,读取文件中的数据库名称,注意按行读写,不校验是否存在该库

def run_backup(self):

in_file = open(DB_NAME,"r")

for dbname in in_file.readlines():

dbname = dbname.strip()

print("now starting backup database %s" %dbname)

dumpcmd = "mysqldump -u" +DB_USER + " -p"+DB_USER_PASSWD+" " +dbname+" > "+self.TODAYBACKUPPATH +"/"+dbname+".sql"

print(dumpcmd)

os.system(dumpcmd)

in_file.close()

#执行压缩的函数

def run_tar(self):

compress_file = self.TODAYBACKUPPATH + ".tar.gz"

compress_cmd = "tar -czvf " +compress_file+" "+self.DATETIME

os.chdir(BACKUP_PATH)

os.system("pwd")

os.system(compress_cmd)

print("compress complete!")

#删除备份文件夹

remove_cmd = "rm -rf "+self.TODAYBACKUPPATH

os.system(remove_cmd)

#备份数据库文件存在就执行备份和压缩,否则退出

def run(self):

if os.path.exists(DB_NAME):

print("starting backup of all db listed in file "+DB_NAME)

self.run_backup()

self.run_tar()

print("backup success!")

else:

print("database file not found..")

def rmAssignDir(path,day=3):

dirs = os.listdir(path)

current_date=datetime.datetime.utcnow()+datetime.timedelta(hours=8)

for dir in dirs:

print (dir)

_date=dir.split('-')[0]

_date=datetime.datetime.strptime(_date,"%Y%m%d")+datetime.timedelta(days=day)

if _date

filename,filetype=os.path.splitext(dir)

if not filetype:

shutil.rmtree(path+dir)

print('delete file success path==%s' % path + dir)

if filetype=='.zp':

os.remove(path+dir)

print('delete compressfile success path==%s'%path+dir)

def job(path,day,message='stuff'):

print("I'm working on:", message)

Run_backups()

rmAssignDir(path,day)

#定时任务

def runSchedule(job,path,day,message):

#schedule.every(1).minutes.do(job,path,day,message)

schedule.every(5).seconds.do(job,path,day,message)

#schedule.every(1).to(7).days.do(job,path,day,message)

#schedule.every().hour.do(job,path,day,message)

#schedule.every(1).to(5).seconds.do(job,path,day,message)

#schedule.every().day.at("16:27").do(job,path,day,message)

if __name__ == '__main__':

#备份数据库路径

#删除所有小于该天数的数据备份

day=3

#打印信息

message='执行定时任务'

runSchedule(job,BACKUP_PATH,day,message)

while True:

schedule.run_pending()

time.sleep(1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值