· 8 years ago · Mar 03, 2018, 05:14 PM
1#!/bin/bash
2
3CURDIR=$(dirname "$(readlink -f "$0")")
4BACKUP=$1
5BASE=$2
6
7typeset -A conf
8while IFS=$':= \t' read key value; do
9 [[ $key = [#!]* ]] || [[ $key = "" ]] || conf[$key]=$value
10done < $CURDIR/restore.cnf
11
12function wait(){
13 secs=$1
14 while [ $secs -gt 0 ]; do
15 echo -ne "Wait for $secs seconds...\033[0K\r"
16 sleep 1
17 : $((secs--))
18 done
19 echo -ne "Countdown complete!\033[0K\n"
20}
21
22
23if [ -d $BACKUP ]; then
24 rm -r $BACKUP
25fi
26
27mkdir $BACKUP && cd $BACKUP
28
29xbstream -x < $BACKUP.xbstream
30
31xtrabackup --decrypt=AES256 --encrypt-key-file=${conf[encryption_key]} --target-dir=$BACKUP
32
33for i in $(find -name "*.xbcrypt"); do rm -f $i; done
34
35for i in $(find -name "*.qp"); do qpress -vd $i $(dirname ${i}) && rm -f $i; done
36
37xtrabackup --prepare --export --target-dir=$BACKUP
38
39typeset -A props
40while IFS=$':= \t' read key value; do
41 [[ $key = [#!]* ]] || [[ $key = "" ]] || props[$key]=$value
42done < $BACKUP/$BASE/db.opt
43
44echo "CREATE DATABASE IF NOT EXISTS $BASE CHARACTER SET ${props[default-character-set]} COLLATE ${props[default-collation]}"
45echo "CREATE DATABASE IF NOT EXISTS $BASE CHARACTER SET ${props[default-character-set]} COLLATE ${props[default-collation]}" | mysql -h${conf[host]} -P${conf[port]} -u${conf[user]} -p${conf[password]}
46
47cd $BACKUP/$BASE
48
49echo "Importing InnoDB tables structure"
50for i in $(find -name "*.exp"); do ${conf[dbsake_path]} frmdump $(echo $i|head -c -5).frm | mysql -h${conf[host]} -P${conf[port]} -u${conf[user]} -p${conf[password]} $BASE && sleep 1; done
51
52
53for i in $(find -name "*.exp"); do echo "ALTER TABLE $(echo $i|tail -c +3|head -c -5) DISCARD TABLESPACE" && echo "ALTER TABLE $(echo $i|tail -c +3|head -c -5) DISCARD TABLESPACE" | mysql -h${conf[host]} -P${conf[port]} -u${conf[user]} -p${conf[password]} $BASE && sleep 1; done
54
55if [ -d ${conf[database_dir]}/$BASE ]; then
56 rm -r ${conf[database_dir]}/$BASE
57fi
58
59cp -vr $BACKUP/$BASE ${conf[database_dir]}/
60
61echo ${conf[restart_mysql]}
62eval ${conf[restart_mysql]}
63wait 120
64
65for i in $(find -name "*.exp"); do echo "ALTER TABLE $(echo $i|tail -c +3|head -c -5) IMPORT TABLESPACE" && echo "ALTER TABLE $(echo $i|tail -c +3|head -c -5) IMPORT TABLESPACE" | mysql -h${conf[host]} -P${conf[port]} -u${conf[user]} -p${conf[password]} $BASE && sleep 1; done
66
67rm -r $BACKUP