设为首页 加入收藏

TOP

基于Python和Xtrbackup的自动化备份与还原实现(六)
2019-08-13 05:35:48 】 浏览:155
Tags:基于 Python Xtrbackup 自动化 备份 还原 实现
ackup_name)))
        #print("cd {0}".format(os.path.join(dest_dir,backup_name)))
        os.system("cd {0}".format(os.path.join(dest_dir,backup_name)))
        #print('''for f in `find {0}/ -iname "*\.qp"`; do qpress -dT4 $f  $(dirname $f) && rm -f $f; done '''.format(os.path.join(dest_dir,backup_name)))
        os.system('''for f in `find {0}/ -iname "*\.qp"`; do qpress -dT4 $f  $(dirname $f) && rm -f $f; done'''.format(os.path.join(dest_dir,backup_name)))


        current_backup_begin_time = None
        current_backup_end_time = None
        #比较当前备份的结束时间和stop_at,如果当前备份开始时间小于stop_at并且结束时间大于stop_at,解压缩备份结束
        with open(os.path.join(dest_dir,backup_name,"xtrabackup_info"), 'r') as f:
            for line in f:
                if line and line.split("=")[0].strip()=="start_time":
                    current_backup_begin_time = line.split("=")[1].strip()
                if line and line.split("=")[0].strip()=="end_time":
                    current_backup_end_time = line.split("=")[1].strip()
        #按照stop_at时间点还原的最后一个数据库备份,结束从第一个完整备份开始的解压过程
        if current_backup_begin_time<=stop_at<=current_backup_end_time:
            break


    #返回最后一个备份文件,需要备份文件中的xtrabackup_info,解析出当前备份的end_time,从而确认需要哪些binlog
    return backup_name


 



#根据返回最后一个备份文件,需要备份文件中的xtrabackup_info,结合stop_at,确认需要还原的binlog文件,以及binlog的position信息
def restore_database_binlog(last_backup_file):
    print("################restore data from binlog###################")
    binlog_dir = get_config_value("log-bin")
    if not (backup_dir):
        binlog_dir = get_config_value("log_bin")
    print("cd {0}".format(os.path.dirname(binlog_dir)))


    last_backup_file =os.path.join(dest_dir,last_backup_file,"xtrabackup_info")
    #parse backuplog.log and get binlog name and position


    backup_position_binlog_file = None
    backup_position = None
    with open(last_backup_file, 'r') as f:
        lines = f.readlines()
        for line in lines:
            if "binlog_pos = filename " in line:
                backup_position_binlog_file = line.replace("binlog_pos = filename ", "").split(",")[0]
                backup_position_binlog_file = backup_position_binlog_file.replace("'", "")
                backup_position = line.replace("binlog_pos = filename ", "").split("

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

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目