#!/bin/bash
BACKUP_FILE_DIR=/backup
BACKUP_PIECES_BASE_DIR=$BACKUP_FILE_DIR/mysql_backup_2020-02-27_20-51-23-725425867
RECOVERY_PREPARE_TMP_DIR=$BACKUP_FILE_DIR/xtrabackup_recovery
BACKUP_PIECES_NAMES=`cat $BACKUP_PIECES_BASE_DIR/index |awk -F ':' '{print $1}'`
BACKUP_PIECES_COUNT=`cat $BACKUP_PIECES_BASE_DIR/index |wc -l`
INCREMENT_BASE_DIR=`cat $BACKUP_PIECES_BASE_DIR/index |head -n1|awk -F ':' '{print $1}'`
BACKUP_PIECES_ORDER=1
DO_BACKUP_UNPACK()
{
if [ ! -d "$RECOVERY_PREPARE_TMP_DIR" ];then
mkdir -p $RECOVERY_PREPARE_TMP_DIR
else
rm -rf $RECOVERY_PREPARE_TMP_DIR
mkdir -p $RECOVERY_PREPARE_TMP_DIR
fi
for i in $BACKUP_PIECES_NAMES
do
cd $BACKUP_PIECES_BASE_DIR
mkdir -p $RECOVERY_PREPARE_TMP_DIR/$i
xbstream --parallel=4 --extract <$i -C $RECOVERY_PREPARE_TMP_DIR/$i
if [ `echo $?` -ne 0 ]; then
echo -e "\033[31m ------------->>>>>>>> Failed Unpack Xbstream File [$i],Please Check Backup Is Valid \033[0m"
exit 1
else
echo -e "\033[32m ------------->>>>>>>> Unpack Xbstream File [$i] Successfully !!! \033[0m"
fi
innobackupex --parallel=4 --decompress --remove-original $RECOVERY_PREPARE_TMP_DIR/$i > $RECOVERY_PREPARE_TMP_DIR/$i'.decomcompress.log' 2>&1
if [ `echo $?` -ne 0 ]; then
echo -e "\033[31m ------------->>>>>>>> Failed Decompress Backup File [$i],Please Check Backup Is Valid \033[0m"
exit 1
else
echo -e "\033[32m ------------->>>>>>>> Decompress Backup File [$i] Successfully !!! \033[0m"
echo ''
fi
done
}
DO_RECOVERY_PREPARE()
{
for i in $BACKUP_PIECES_NAMES
do
## Recovery Prepare First Full Backup
if [ $BACKUP_PIECES_ORDER -eq 1 ];then
innobackupex --use-memory=320MB --apply-log --redo-only $RECOVERY_PREPARE_TMP_DIR/$i > $RECOVERY_PREPARE_TMP_DIR/$i'.merge_redo_log.log' 2>&1
if [ `echo $?` -ne 0 ]; then
echo -e "\033[31m ------------->>>>>>>> Failed apply-log For First Full Backup [$i],Please Check Backup Is Valid \033[0m"
exit 1
else
echo -e "\033[32m ------------->>>>>>>> Prepare First Full Backup [$i] Successfully !!! \033[0m"
fi
## Recovery Prepare Incremental Backup Except For The Last One
elif [ $BACKUP_PIECES_ORDER -lt $BACKUP_PIECES_COUNT ];then
innobackupex --use-memory=320MB --apply-log --redo-only $RECOVERY_PREPARE_TMP_DIR/$INCREMENT_BASE_DIR --incremental-dir=$RECOVERY_PREPARE_TMP_DIR/$i > $RECOVERY_PREPARE_TMP_DIR/$i'.merge_redo_log.log' 2>&1
mv $RECOVERY_PREPARE_TMP_DIR/$i $RECOVERY_PREPARE_TMP_DIR/'increment_'$BACKUP_PIECES_ORDER
if [ `echo $?` -ne 0 ]; then
echo -e "\033[31m ------------->>>>>>>> Failed apply-log For Incremental Backup [$i],Please Check Backup Is Valid \033[0m"
exit 1
else
echo -e "\033[32m ------------->>>>>>>> Prepare Incremental Backup [$i] Successfully !!! \033[0m"
fi
## Recovery Prepare The Last One Incremental without [--redo-only] Paramenter
elif [ $BACKUP_PIECES_ORDER -eq $BACKUP_PIECES_COUNT ];then
innobackupex --use-memory=320MB --apply-log $RECOVERY_PREPARE_TMP_DIR/$INCREMENT_BASE_DIR --incremental-dir=$RECOVERY_PREPARE_TMP_DIR/$i > $RECOVERY_PREPARE_TMP_DIR/$i'.merge_redo_log.log' 2>&1
mv $RECOVERY_PREPARE_TMP_DIR/$i $RECOVERY_PREPARE_TMP_DIR/'increment_'$BACKUP_PIECES_ORDER
if [ `echo $?` -ne 0 ]; then
echo -e "\033[31m ------------->>>>>>>> Failed apply-log For Incremental Backup [$i],Please Check Backup Is Valid \033[0m"
exit 1
else
echo -e "\033[32m ------------->>>>>>>> Prepare Incremental Backup [$i] Successfully !!! \033[0m"
fi
else
echo 'This Part Will Not Be Executed'
fi
let "BACKUP_PIECES_ORDER=$BACKUP_PIECES_ORDER+1"
done
}
DO_SOME_CLEAN()
{
cp $BACKUP_PIECES_BASE_DIR/my.cnf $RECOVERY_PREPARE_TMP_DIR
mv $RECOVERY_PREPARE_TMP_DIR/$INCREMENT_BASE_DIR $RECOVERY_PREPARE_TMP_DIR/full_amount_backup
mkdir -p $RECOVERY_PREPARE_TMP_DIR/log
mv $RECOVERY_PREPARE_TMP_DIR/*.log $RECOVERY_PREPARE_TMP_DIR/log
echo ''
echo -e "\033[32m ------------->>>>>>>> Now You Can Manually Copy Back The Data Using Commands Like The Following\033[0m"
echo ' 'innobackupex --defaults-file=$RECOVERY_PREPARE_TMP_DIR/my.cnf --copy-back $RECOVERY_PREPARE_TMP_DIR/full_amount_backup
echo ' 'innobackupex --defaults-file=$RECOVERY_PREPARE_TMP_DIR/my.cnf --move-back $RECOVERY_PREPARE_TMP_DIR/full_amount_backup
}
MAIN()
{
DO_BACKUP_UNPACK
DO_RECOVERY_PREPARE
# DO_SOME_CLEAN
}
MAIN
MySQL恢复脚本
猜你喜欢
转载自blog.csdn.net/qq_42979842/article/details/108966685
今日推荐
周排行