import os, time, pymysql, shutilfrom apscheduler.schedulers.blocking import BlockingScheduler # 定時任務def getDatabaseNames(): """ 鏈接數據庫 返回指定數據庫的全部的表 """ conn = pymysql.connect(host='10.100.102.224', port=3316, db='indexdb', user='root', passwd='root') cur = conn.cursor() cur.execute('show tables;') tables = cur.fetchall() cur.close() conn.close() return tablesdef db_bf(path): """ 建立存儲路徑 而且備份指定數據庫下的表 """ path = path.strip() path = path.rstrip("\\") if not os.path.exists(path): # 判斷系統是否存在該路徑 os.makedirs(path) # ,不存在則建立 tables = getDatabaseNames() for table in tables: try: tablename = table[0] # 導出db cmd = "mysqldump -h%s -u%s -p%s %s > %s/%s.sql" % ('10.100.102.224','root', 'indexdb', tablename, folder, tablename) print(cmd) os.system(cmd) except Exception as e: print(e) return True else: return Falsedef mysql_rm(path, timestr): """ 刪除備份目錄下超過必定時長的文件 """ # 列出目錄下全部的備份 f = list(os.listdir(path)) print(f) now_time = timestr[0:8] # 設置超過的時間 days = 3 for i in f: exit_time = i[0:8] update_time = int(exit_time) + days # if update_time < int(now_time) or exit_time == now_time: # 若是備份的數據超過規定的天數就刪除了 if update_time < int(now_time): shutil.rmtree(path + i) # with open(self.__filerm_log, 'a') as file_log: # file_log.write("%s刪除備份文件%s \n" % (timestr[0:8], i))# def hf_bf(path, db):# """# 把備份的數據恢復到指定的數據庫# """# f = list(os.listdir(path))## # for x in f:# cmd = "mysql-u%s -p%s %s < %s/%s" % ('root', 'root', db, path, f[0])# print(cmd)# os.system(cmd)if __name__ == '__main__': # 建立備份的存儲路徑, timestr = time.strftime("%Y%m%d%H%M%S", time.localtime(time.time())) folder = "mysql_data_bak/" + timestr db_bf(folder) # 恢復數據庫備份 # hf_bf("mysql_data_bak/20191028114943",'ceshi') scheduler = BlockingScheduler() # 函數將會在6,7,8,11,12月的第3個週五的1,2,3點運行 # scheduler.add_job(db_bf,args=[folder,], trigger='cron', month='6-8,11-12', day='3rd fri', hour='0-3') # 截止到2019-12-30 00:00:00,每週一到週五早上五點半運行 # scheduler.add_job(db_bf,args=[folder,], trigger='cron', day_of_week='mon-fri', hour=5, minute=30, end_date='2019-12-31') # 天天14.39執行任務 scheduler.add_job(db_bf, args=[folder, ], trigger='cron', hour=14, minute=39) try: scheduler.start() except (KeyboardInterrupt, SystemExit): pass