import os
import time
import shutil
import schedule
import datetime
DB_HOST = '127.0.0.1'
DB_USER = 'wyd'
DB_USER_PASSWD = 'wyd'
DB_NAME = r'/mysql/mysqlAll.txt'
BACKUP_PATH = '/mysql/'
class Run_backups:
def __init__(self):
self.DATETIME = time.strftime('%Y%m%d-%H%M%S')
self.TODAYBACKUPPATH = BACKUP_PATH + self.DATETIME
print("create backup!")
if not os.path.exists(self.TODAYBACKUPPATH):
os.makedirs(self.TODAYBACKUPPATH)
print("check databases file")
self.run()
def run_backup(self):
sql_file = open(DB_NAME,"r")
for dbname in sql_file.readlines():
dbname = dbname.strip()
print("backup databases %s" %dbname)
dumpcmd = "mysqldump -u" + DB_USER + " -p" + DB_USER_PASSWD + " " + dbname + " > " + self.TODAYBACKUPPATH + "/" + dbname + ".sql"
print(dumpcmd)
os.system(dumpcmd)
sql_file.close()
def run_tar(self):
compress_file = self.TODAYBACKUPPATH + ".zip"
compress_cmd = "zip -r " + 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("start backup of all db listed in file "+DB_NAME)
self.run_backup()
self.run_tar()
print("backup success!")
else:
print("database file fail")
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 == '.zip':
os.remove(path+dir)
print('delete compressfile success path==%s'%path+dir)
def job(path, day, message='stu'):
print("I'm working on:", message)
Run_backups()
rmAssignDir(path, day)
def runSchedule(job, path, day, message):
schedule.every().day.at("23:50").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)