好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

实战:INNOBACKUPEXformysql5.6自动还原脚本 - mysql数据

#!/bin/sh # # 使用方法: # ./restore.sh /你备份文件的全路径 #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 # 你的备份主目录 FULLBACKUP_DIR=$BACKUP_DIR/full # 全库备份的目录 INCRBACKUP_DIR=$BACKUP_DIR/incre # 增量备份的目录 MEMORY=4096M # 还原的时候使用的内存限制数

#############################################################################

#显示错误

#############################################################################

error() { echo "$1" 1>&2 exit 1 }

#############################################################################

# 检查innobackupex错误输出

#############################################################################

check_innobackupex_fail() { if [ -z "`tail -2 $TMP_LOG | grep 'completed OK!'`" ] ; then echo "$INNOBACKUPEX命令执行失败失败:"; echo echo "---------- $INNOBACKUPEX的错误输出 ----------" cat $TMP_LOG #保留一份备份的详细日志 logfiledate=restore.`date +%Y%m%d%H%M`.txt cat $TMP_LOG>/backup/$logfiledate rm -f $TMP_LOG exit 1 fi }

# 选项检测 if [ ! -x $INNOBACKUPEX_PATH ]; then error "$INNOBACKUPEX_PATH在指定路径不存在,请确认是否安装或核实链接是否正确." fi

if [ ! -d $BACKUP_DIR ]; then error "备份目录$BACKUP_DIR不存在." fi

if [ $# != 1 ] ; then error "使用方法: $0 使用还原目录的绝对路径" fi

if [ ! -d $1 ]; then error "还原到:$1不存在." fi

# Some info output echo "----------------------------" echo echo "$0: MySQL还原脚本" START_RESTORE_TIME=`date +%F' '%T' '%w` echo " 数据库 还原开始于: $START_RESTORE_TIME" echo

PARENT_DIR=`dirname $1` if [ $PARENT_DIR = $FULLBACKUP_DIR ]; then FULLBACKUP=$1 echo "还原`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 "全备:$FULLBACKUP不存在." fi

echo "还原$FULL到增量$INCR" echo

echo "Prepare完整备份集..........." echo "*****************************" $INNOBACKUPEX_PATH --defaults-file=$MY_CNF --apply-log --redo-only --use-memory=$MEMORY $FULLBACKUP > $TMP_LOG 2>&1 check_innobackupex_fail

# Prepare增量备份集 for i in `find $PARENT_DIR -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -n`; do

echo "Prepare增量备份集$i........" echo "*****************************" $INNOBACKUPEX_PATH --defaults-file=$MY_CNF --apply-log --redo-only --use-memory=$MEMORY $FULLBACKUP --incremental-dir=$PARENT_DIR/$i > $TMP_LOG 2>&1 check_innobackupex_fail

if [ $INCR = $i ]; then break fi done else error "未知的备份类型" fi fi

echo "prepare全备集,回滚那些未提交的事务..........." $INNOBACKUPEX_PATH --defaults-file=$MY_CNF --apply-log --use-memory=$MEMORY $FULLBACKUP > $TMP_LOG 2>&1 check_innobackupex_fail echo "*****************************" echo "1.数据库还原中 ...请稍等" echo "*****************************"

$INNOBACKUPEX_PATH --defaults-file=$MY_CNF --copy-back $FULLBACKUP > $TMP_LOG 2>&1 check_innobackupex_fail

rm -f $TMP_LOG echo "2.恭喜,还原成功!." echo "*****************************"

#修改目录权限 echo "修改 mysql 目录的权限." mysqlcnf="/usr/local/mysql/my.cnf" mysqldatadir=`grep -i "^basedir=" $mysqlcnf` `echo 'chown -R mysql:mysql' ${mysqldatadir:8}` echo "3.权限修改成功!" echo "*****************************"

#自动启动mysql echo -n "请输入确认启动mysql[1]:" read var echo "你输入的是$var" errorlog=`grep -i "^log-error" $MY_CNF` if [ $var = 1 ] ; then echo "mysql启动中............" `/usr/local/mysql/bin/mysqld_safe > /dev/null & ` sleep 10 PortNum=`netstat -lnt|grep 3306|wc -l` if [ $PortNum = 1 ]; then echo "4.mysql启动成功" echo "*****************************" else echo "4.mysql启动失败,请检查错误日志$errorlog" echo "*****************************************" fi exit 0 else echo "输入不正确!" fi

END_RESTORE_TIME=`date +%F' '%T' '%w` echo "数据库还原完成于: $END_RESTORE_TIME" exit 0

查看更多关于实战:INNOBACKUPEXformysql5.6自动还原脚本 - mysql数据的详细内容...

  阅读:43次