设为首页 加入收藏

TOP

基于Python和Xtrbackup的自动化备份与还原实现(二)
2019-08-13 05:35:48 】 浏览:159
Tags:基于 Python Xtrbackup 自动化 备份 还原 实现
d_file():
    for backup_name in os.listdir(backup_dir):
        if os.path.isdir(backup_name):
            bak_datetime = datetime.datetime.strptime(backup_name.replace("_full","").replace("_incr",""), '%Y%m%d%H%M%S')
            if(bak_datetime<datetime.datetime.now() - datetime.timedelta(days=backup_keep_days)):
                shutil.rmtree(os.path.join(backup_dir, backup_name))


#完整备份
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 b

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

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目