基于Python和Xtrbackup的自动化备份与还原实现(2)

#完整备份
def full_backup(backup_file_name):
    os.system("[ ! -d {0}/{1} ] && mkdir -p {0}/{1}".format(backup_dir,backup_file_name))
    logfile = os.path.join(backup_dir, "{0}/{1}/backuplog.log".format(backup_dir,backup_file_name))
    backup_commond = ''' innobackupex --defaults-file={0} --no-lock {1}/{6}  --user={2} --password={3} --host="{4}" --port={5} --tmpdir={1}/{6} --stream=xbstream --compress  --compress-threads=8 --parallel=4  --extra-lsndir={1}/{6}  > {1}/{6}/{6}.xbstream 2>{7} '''.\
                    format(cnf_file,backup_dir,user,password,host,port,backup_file_name,logfile)
    execute_result = os.system(backup_commond)
    return execute_result

#增量备份
def incr_backup(backup_file_name):
    os.system("[ ! -d {0}/{1} ] && mkdir -p {0}/{1}".format(backup_dir, backup_file_name))
    current_backup_dir = "{0}/{1}".format(backup_dir, backup_file_name)
    logfile = os.path.join(backup_dir, "{0}/{1}/backuplog.log".format(backup_dir, backup_file_name))
    #增量备份基于上一个增量/完整备份
    incremental_basedir = get_last_backup()
    backup_commond = '''innobackupex --defaults-file={0} --no-lock  {6}  --user={2} --password={3} --host={4} --port={5} --stream=xbstream --tmpdir={6} --compress --compress-threads=8 --parallel=4  --extra-lsndir={6} --incremental --incremental-basedir={7} 2> {8} > {6}/{9}.xbstream '''\
                    .format(cnf_file,backup_dir,user,password,host,port,current_backup_dir,incremental_basedir,logfile,backup_file_name)
    # print(backup_commond)
    execute_result = os.system(backup_commond)
    return execute_result

#刷新binlog,意义不大,原本计划在完整备份之后执行一个binlog的切换,暂时弃用
def flush_log():
    flush_log_commond = ''' mysql -h${0} -u${1} - p${2} -P${1}  mysql - e"flush logs" '''.format(user,password,host,port)
    os.system(flush_log_commond)


if __name__ == '__main__':
    mysql_stat = get_mysqlservice_status()
    backup_type = get_backup_type()
    if mysql_stat <= 0 :
        logging.info("mysql instance is inactive,backup exit")
        sys.exit(1)
    try:
        start_time = datetime.datetime.now().strftime('%Y%m%d%_H%M%S')
        logging.info(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')+"--------start backup")
        #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)

还原

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/8e81d74611b96e8bac99544080a10328.html