innobackupex备份恢复详解及详细增量备份及恢复脚本

innobackupex安装完成后可以直接使用,默认的安装路径为/usr/bin/innobackupex.
以下所有操作在root用户下进行
为方便理解脚本,先介绍一下全备份和增量备份语句.
全备份:

innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 $BACK_DIR 

增量备份:

innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --incremental $BACK_DIR --incremental-basedir=$FULLBACKUP 

解释一下:增量备份的基础是全量备份,第二次增量备份以第一次增量备份为基础,这一点可以查看生成的备份文件加下的xtrabackup_checkpoints文件做验证.
全量备份xtrabackup_checkpoints文件内容:

backup_type = full-backuped
from_lsn = 0
to_lsn = 3847017
last_lsn = 3847026
compact = 0
recover_binlog_info = 0

第一次增量备份xtrabackup_checkpoints文件内容:

backup_type = incremental
from_lsn = 3847017
to_lsn = 3847017
last_lsn = 3847026
compact = 0
recover_binlog_info = 0

第二次增量备份xtrabackup_checkpoints文件内容:

backup_type = incremental
from_lsn = 3847017
to_lsn = 3848936
last_lsn = 3848945
compact = 0
recover_binlog_info = 0

其中三个文件backup_type,from_lsn,to_lsn这三个参数的区别及含义显而易见,不做解释了.很多仁兄的博客里对这个都有介绍.
上备份脚本:

#!/bin/bash
LANG=C
GTIME=`date +%Y-%m-%d`
DIR_TIME=innoback-`date +%Y-%m-%d`
BACK_DIR=/home/zxy/data/$DIR_TIME
INNOBACK="/usr/bin/innobackupex"
if [ ! -d $BACK_DIR ]
then
        mkdir -p $BACK_DIR
        cd $BACK_DIR
        $INNOBACK --defaults-file=/etc/mysql/my.cnf --user=root --password=123 $BACK_DIR 
elif [ -d $BACK_DIR ]
then
        cd $BACK_DIR
        FULLBACKUP=`ls -1 | grep  $GTIME | sort -k 1r | awk 'NR==1{print $1}'`
        if [ -d ${FULLBACKUP:-nodir} ]
        then
                $INNOBACK --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --incremental $BACK_DIR --incremental-basedir=$FULLBACKUP 
        else
                $INNOBACK --defaults-file=/etc/mysql/my.cnf --user=root --password=123 $BACK_DIR &> /dev/null
        fi
fi

其中:ls -1 | grep $GTIME | sort -k 1r | awk 'NR==1{print $1} 做一下解释.
ls -1 : 官方给出的注解为 list one file per line.
sort -k 1r : sort 为shell的排序函数,-k 1r : 设置排序方式,1标识第一个区块,默认为升序 r为降序.如果不加后面”-k 1r”参数,该脚本就是差量备份脚本.
awk ‘NR==1{print $1} NR==1 定位在file的第一行.
print $1 显示第一列内容


innobackupex备份恢复详解及详细增量备份及恢复脚本_第1张图片
增量备份:备份自上一次备份以来(增量或完全)以来变化的数据; 特点: 节约空间、还原麻烦 .
差异备份:备份自上一次完全备份以来变化的数据 特点: 浪费空间、还原比增量备份简单.

当然,有脚本的话,备份的还原都不麻烦,所以为了节约空间,还是选择增量备份吧.


备份还原

先上脚本:

#!/bin/bash
LANG=C

INNOBACK="/usr/bin/innobackupex"

echo 'please input date   format: 2017-10-10'
read TIME

BACK_DIR=/home/zxy/data/innoback-$TIME

echo $BACK_DIR

if [[ ! -d $BACK_DIR ]]; then
    echo 'warning-----The format must be correct and make sure that the corresponding folder for that date exists'
    exit
fi

cd $BACK_DIR

FULLBACKUP=`ls -1 | grep  $TIME | sort | awk 'NR==1{print $1}'`
echo $FULLBACKUP

files=`ls -1 | grep $TIME | sort`

for var in $files
do
    if [[ $FULLBACKUP == $var ]]; then
        echo "quanbeifen"
        echo $BACK_DIR/$var
        $INNOBACK --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --apply-log  --redo-only $BACK_DIR/$FULLBACKUP
    else
        echo "zeengliang--"$var 
        echo $BACK_DIR/$var
        $INNOBACK --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --apply-log  --redo-only $BACK_DIR/$FULLBACKUP --incremental-dir=$BACK_DIR/$var
    fi
done

#Data rollback 
service mysql stop
echo "=========================================service mysql stop================================="

mv /var/lib/mysql /var/lib/mysql_bak
mkdir -p /var/lib/mysql

$INNOBACK --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --apply-log $BACK_DIR/$FULLBACKUP

$INNOBACK --defaults-file=/etc/mysql/my.cnf --user=root --password=123 --copy-back $BACK_DIR/$FULLBACKUP

chown -R mysql.mysql /var/lib/mysql

service mysql start

echo "========================================service mysql start==================================="
echo "rollback end success"

增量备份的还原,是先将增量备份文件整合到全量备份文件中.再对全量备份文件进行还原操作.

具体参数含义,本着互利共赢的原则,我参考了以下两篇博客:
http://blog.csdn.net/rudygao/article/details/50435041
http://blog.51yip.com/mysql/1650.html
这些内容,前人已经写了,我就不再费劲了.

至于备份的脚本如何作为定时任务执行,简单写一下吧:
创建work.cron 文件,内容为:

* */1 * * * /home/zxy/data/innobackex.sh

那五个”* “的含义 :分 时 日 月 周.
执行命令:

crontab work.cron

即可每小时进行一次增量备份.
该脚本每天第一次备份为全量备份,之后为增量备份.


增量备份及还原脚本到此结束,如有异议,请评论商讨.

你可能感兴趣的:(mysql)