Practice: INNOBACKUPEXformysql5.6 automatic restoration script #! /Bin/sh
#
# Usage:
#./Restore. sh/full path of your backup file
# Ocpyang@126.com
INNOBACKUPEX = innobackupex
INNOBACKUPEX_PATH =/usr/bin/$ INNOBACKUPEX
TMP_LOG = "/var/log/restore. $. log"
MY_CNF =/usr/local/mysql/my. cnf
BACKUP_DIR =/backup # Your backup home directory
FULLBACKUP_DIR = $ BACKUP_DIR/full # full database backup directory
INCRBACKUP_DIR = $ BACKUP_DIR/incre# directory of incremental backup
MEMORY = 4096 M # MEMORY limit used for restoration
######################################## #####################################
# Display error
######################################## #####################################
Error ()
{
Echo "$1" 1> & 2
Exit 1
}
######################################## #####################################
# Check innobackupex error output
######################################## #####################################
Check_innobackupex_fail ()
{
If [-z "'tail-2 $ TMP_LOG | grep' completed OK! '"']; Then
Echo "$ INNOBACKUPEX command execution failed:"; echo
Echo "---------- $ Error output of INNOBACKUPEX ----------"
Cat $ TMP_LOG
# Keep a detailed backup log
Logfiledate = restore. 'date when policyymm1_d1_hsf-m'.txt
Cat $ TMP_LOG>/backup/$ logfiledate
Rm-f $ TMP_LOG
Exit 1
Fi
}
# Option detection
If [! -X $ INNOBACKUPEX_PATH]; then
Error "$ INNOBACKUPEX_PATH does not exist in the specified path. check whether the link is installed or correct ."
Fi
If [! -D $ BACKUP_DIR]; then
Error "the backup directory $ BACKUP_DIR does not exist ."
Fi
If [$ #! = 1]; then
Error "usage: $0 indicates the absolute path of the restored Directory"
Fi
If [! -D $1]; then
Error "restored to: $1 does not exist ."
Fi
# Some info output
Echo "----------------------------"
Echo
Echo "$0: MySQL restore script"
START_RESTORE_TIME = 'date + % f'' % t'' % W'
Echo "database restoration started at: $ START_RESTORE_TIME"
Echo
PARENT_DIR = 'dirname $1'
If [$ PARENT_DIR = $ FULLBACKUP_DIR]; then
FULLBACKUP = $1
Echo "restore 'basename $ FULLBACKUP "'
Echo
Else
If ['dirname $ PARENT_DIR '= $ INCRBACKUP_DIR]; then
INCR = 'basename $1'
FULL = 'basename $ PARENT_DIR'
FULLBACKUP = $ FULLBACKUP_DIR/$ FULL
If [! -D $ FULLBACKUP]; then
Error "full backup: $ FULLBACKUP does not exist ."
Fi
Echo "restore $ FULL to incremental $ INCR"
Echo
Echo "Prepare complete backup set ..........."
Echo "*****************************"
$ INNOBACKUPEX_PATH -- defaults-file = $ MY_CNF -- apply-log -- redo-only -- use-memory = $ MEMORY $ FULLBACKUP> $ TMP_LOG 2> & 1
Check_innobackupex_fail
# Prepare incremental backup set
For I in 'find $ PARENT_DIR-mindepth 1-maxdepth 1-type d-printf "% P/n" | sort-N'; do
Echo "Prepare incremental backup set $ I ........"
Echo "*****************************"
$ INNOBACKUPEX_PATH -- defaults-file = $ MY_CNF -- apply-log -- redo-only -- use-memory = $ MEMORY $ FULLBACKUP -- incremental-dir = $ PARENT_DIR/$ I> $ TMP_LOG 2> & amp; 1
Check_innobackupex_fail
If [$ INCR = $ I]; then
Break
Fi
Done
Else
Error "unknown backup type"
Fi
Fi
Echo "prepare full backup set, roll back those uncommitted transactions ..........."
$ INNOBACKUPEX_PATH -- defaults-file = $ MY_CNF -- apply-log -- use-memory = $ MEMORY $ FULLBACKUP> $ TMP_LOG 2> & 1
Check_innobackupex_fail
Echo "*****************************"
Echo "1. Restoring the database... please wait"
Echo "*****************************"
$ INNOBACKUPEX_PATH -- defaults-file = $ MY_CNF -- copy-back $ FULLBACKUP> $ TMP_LOG 2> & 1
Check_innobackupex_fail
Rm-f $ TMP_LOG
Echo "2. congratulations, restored successfully !. "
Echo "*****************************"
# Modify directory permissions
Echo "modify mysql directory permissions ."
Mysqlcnf = "/usr/local/mysql/my. cnf"
Mysqldatadir = 'grep-I "^ basedir =" $ mysqlcnf'
'Echo 'chown-R mysql: mysql' $ {mysqldatadir: 8 }'
Echo "3. permission modification successful! "
Echo "*****************************"
# Automatically start mysql
Echo-n "Enter OK to start mysql [1]:"
Read var
Echo "You entered $ var"
Errorlog = 'grep-I "^ log-error" $ MY_CNF'
If [$ var = 1]; then
Echo "mysql is starting ............"
'/Usr/local/mysql/bin/mysqld_safe>/dev/null &'
Sleep 10
PortNum = 'netstat-lnt | grep 3306 | wc-L'
If [$ PortNum = 1];
Then
Echo "4. mysql started successfully"
Echo "*****************************"
Else
Echo "4. mysql startup failed. check the error log $ errorlog"
Echo "************************************** ***"
Fi
Exit 0
Else
Echo "incorrect input! "
Fi
END_RESTORE_TIME = 'date + % f'' % t'' % W'
Echo "database restoration completed at: $ END_RESTORE_TIME"
Exit 0