linux 使用python3 定时备份mysql数据库脚本 修改配置直接可用。亲测!

# Time : 2018/12/24 
# Author : [email protected]
#依赖包 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<current_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)

猜你喜欢

转载自www.cnblogs.com/zhujincheng/p/10186478.html
今日推荐