MySQL恢复脚本

    科技2025-12-27  11

    #!/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
    Processed: 0.019, SQL: 9