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