for current_backup_file in list_restore_backup:
#解压备份文件
current_backup_name = current_backup_file.split("|")[2]
current_backup_fullname = os.path.join(dest_dir, current_backup_name)
if(start_flag==1):
full_backup_path = current_backup_fullname
start_flag = 0
print("innobackupex --apply-log --redo-only {0}".format(full_backup_path))
else:
print("innobackupex --apply-log --redo-only {0} --incremental-dir={1}".format(full_backup_path,current_backup_fullname))
#apply_log for full backup at last(remove --read-only parameter)
print("innobackupex --apply-log {0}".format(full_backup_path))
def restore_backup_data():
print("####################backup current database file###########################")
datadir_path = get_config_value("datadir")
print("mv {0} {1}".format(datadir_path,datadir_path+"_"+ datetime.datetime.now().strftime('%Y%m%d%H%M%S')))
print("mkdir {0}".format(datadir_path))
print("chown -R mysql.mysql {0}".format(datadir_path))
print("################restore backup data###################")
list_restore_backup = get_restorefile_list()
full_restore_path= dest_dir + list_restore_backup[0].split("|")[-1].replace(".xbstream","")
print("innobackupex --defaults-file={0} --copy-back --rsync {1}".format(cnf_file,full_restore_path))
print("chown -R mysql.mysql {0}".format(datadir_path))
def restore_database():
#解压缩需要还原的备份文件
last_backup_file_path = uncompress_backup_file()
#对备份文件apply-log
apply_log_for_backup()
#停止mysql服务
stop_mysql_service()
#恢复备份
restore_backup_data()
#启动MySQL服务
start_mysql_service()
#从binlog中恢复数据
restore_database_binlog(last_backup_file_path)
if __name__ == '__main__':
restore_database()
最后不要忘了清理战场:
1,解压缩的备份文件还留在指定的路径中,
2,还原之前备份的data文件,以data_日期命名的文件,也没有清理
挤时间写出来的,粗略测了一下没有问题,以实现功能为主,没有进一步封装,后续会以此为基础进行优化。
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx