设为首页 加入收藏

TOP

基于Python和Xtrbackup的自动化备份与还原实现(三)
2019-08-13 05:35:48 】 浏览:151
Tags:基于 Python Xtrbackup 自动化 备份 还原 实现
ackup")
        #flush_log()
        backup_file_name = start_time
        execute_result = None
        if(backup_type == "full"):
            backup_file_name = backup_file_name+"_full"
            logging.info("execute full backup......")
            execute_result = full_backup(backup_file_name)
            if (execute_result == 0):
                logging.info(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + "--------begin cleanup history backup")
                logging.info("execute cleanup backup history......")
                clean_expired_file()
                logging.info(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + "--------finsh cleanup history backup")
        else:
            backup_file_name = backup_file_name + "_incr"
            logging.info("execute incr backup......")
            execute_result = incr_backup(backup_file_name)
        if(execute_result==0):
            finish_time = datetime.datetime.now().strftime('%Y%m%d%_H%M%S')
            backup_info = start_time+"|"+finish_time+"|"+start_time+ "_" + backup_type
            with open(backupfilelist, 'a+') as f:
                f.write(backup_info + '\n')
            logging.info(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')+"--------finish backup")
        else:
            logging.info(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + "--------xtrabackup failed.please check log")
    except:
        raise
        sys.exit(1)


说直白一点,以这里的基于时间点或者是position的还原,就是一个不断找文件的过程,
1,首先任何还原,都需要一个创建于还原点前的完整备份。
2,基于上述完整备份,利用还原的时间点与xtrbackup的备份日志去做对比来获取所需的增量备份(0个或者1个或者多个)。
3,基于上面两步找到的(完整+增量)备份,利用最后一个备份的position,用于第一个binlog还原时指定start-position,
   同时利用binlog的最后修改时间与还原的时间点对比,决定使用那些binlog,同时最后一个binlog要指定stop-datime= 还原的时间点


 


1,如何还原时间点的最新的一个完整备份
备份的时候维护一个备份信息,如下,这里是backfilelist.log,包括备份开始时间,结束时间,备份类型,备份路径等。
可以根据备份开始时间,找到第一个早于还原时间点的完整备份  


2,如果找到恢复所需要的差异备份
同1,从完整备份开始,依次向后找各个增量备份,直到最后一个早于还原时间点的差异备份,可能有一个或者多个


3,如何找到差异备份之后,需要哪些binlog
基于binlog文件自身的最后修改时间属性信息,从2中找到的最后一个差异备份的时间,开始向后依次找binlog,可能有一个或者多个 


 


如下是一个基于时间点来还原数据库的demo,没写入两条数据,执行一次备份(上述备份会自动区分完整备份或者差异备份)
三次备份之后,继续写两条数据,flush logs,然后继续分两次分别写两条数据,目的是将数据分散到不同的binlog中,最后删除全部数据
然后基于删除数据之前的时间点来自动生成还原数据库的shell,执行shell即可达到还原数据库的目的。



如下执行基于时间点的rextrabackup.py文件之后,时间点为"2019-08-01 18:50:59",也就是发生删除操作的前一个时间点,来生成的还原信息。
其实只需要重定向到一个shell文件中,执行shell文件即可自动化还原,或者直接在python脚本中执行这些命令,即可自动化完成还原操作。

首页 上一页 1 2 3 4 5 6 7 下一页 尾页 3/9/9
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇数据库包括哪些技术? 下一篇Redis分布式锁实现理解

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目