xtrabackup2.4_MySQL5.7备份与恢复

xtrabackup的主要优点:
1,物理备份,备份速度快
2,热备份、无需停机
3,恢复速度快
4.自动会对备份文件进行验证
1.  xtrabackup 工具的安装
#1.1  安装依赖包
#No package perl-Digest-MD5 available. yum install -y rsync perl l perl-Digest-MD5 perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL
 
#rpm -ich libev-4.15-1.el6.rf.x86_64.rpm 可以不安装
#error: Failed dependencies:libev.so.4()(64bit) is needed,添加 --nodeps
rpm -ivh percona-xtrabackup-24-2.4.21-1.el6.x86_64.rpm --force --nodeps
-------------------------------------
#常见报错
(1) libev.so.4()(64bit) is needed by percona-xtrabackup-24-2.4.4-1..el6.x86_64
解决办法:
rpm -ivh ftp://rpmfind.net/linux/dag/redhat/el6/en/x86_64/dag/RPMS/libev-4.15-1.el6.rf.x86_64.rpm
(2)libnuma.so.1()(64bit) is needed by percona-xtrabackup-24-2.4.4-1.el6.x86_64
解决办法:
rpm -ivh http://mirror.centos.org/centos/6/os/x86_64/Packages/numactl-2.0.9-2.el6.x86_64.rpm
 
#参考Centos7.4下MySql5.7安装Percona XtraBackup备份
1、安装Percona XtraBackup
--安装yum 源
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
--安装XtraBackup 2.4版本的
yum install -y percona-xtrabackup-24.x86_64
 
#1.2下载及安装说明
#当前测试使用的数据库为MySQL5.7  因此下载2.4版本
#另外,2.4.10及以后版本中,对libgcrypt进行了区分,因此也需要查询自己服务器的libgcrypt版本,然后选择对应的安装包
[root@testdb ~]# yum list installed|grep libgcrypt libgcrypt.x86_64 1.5.3-14.el7 @anaconda
 
#去percona官网下载对应版本的安装包 https://www.percona.com/downloads  , 需要根据数据库的版本选择对应的xtrabackup的安装包,选择Percona XtraBackup.
--实际找到的包
wget https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.21/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.21-1.el7.x86_64.rpm
/* 二进制包 怎么找到 */
wget https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.18/binary/tarball/percona-xtrabackup-2.4.18-Linux-x86_64.libgcrypt153.tar.gz
/* rpm包 怎么找到*/
wget https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.18/binary/redhat/7/x86_64/Percona-XtraBackup-2.4.18-r29b4ca5-el7-x86_64-bundle.tar
二进制包解压后即可使用,rpm包下载解压后 rpm  -ivh 安装即可。操作均很简单,此处略过
xtrabackup通常使用 innobackupex命令, 可以使用 innobackupex  --help 命令查看参数及说明。
其中常用参数及说明如下:
--defaults-file 待备份mysql实例的配置文件 --user=USER 备份用户,默认为当前系统用户,建议使用备份专用账号 --password=PASSWD 备份用户密码 --port=PORT 数据库端口,默认3306 --host=HOST 需备份数据库的IP --apply-log 前滚、回滚日志,恢复前用 --database 指定需要备份的数据库,多个数据库之间以空格分开 --copy-back 将备份数据复制到目标路径 --incremental 增量备份,后面接的参数值为指定的增量备份的路径 --incremental-basedir=DIRECTORY 增量备份时使用指向上一次的增量备份所在的目录 --incremental-dir=DIRECTORY 增量备份还原的时候用来合并增量备份到全量,用来指定全备路径 --redo-only 对增量备份进行合并 --rsync 加快本地文件传输,适用于non-InnoDB数据库引擎。不与--stream共用 --no-timestamp 生成的备份文件不以时间戳为目录
 
1.3 创建备份账号
#备份的账号建议单独创建,并授予相关权限*********************
CREATE USER 'backup'@'localhost' IDENTIFIED BY 'Backup@123.com'; GRANT SUPER,RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'backup'@'localhost'; FLUSH PRIVILEGES;
#参考
grant reload,lock tables,replication client,create tablespace,process,super on *.* to backupuser@'localhost' identified by 'backup@che123';
 
2.  全量备份
2.1   本地全量备份,不压缩
#创建备份结果的目录 mkdir -p /app
rm -rf /app/*
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --port=3306 --user=backup --password='Backup@123.com' --no-timestamp /app/all_backup
 
#切换重新生成binlog日志
mysql -uroot -pmysql
show databases;
flush logs;
create database test1 character set utf8;
use `test1`;
create table test1.t1(id int,name varchar(200));
insert into test1.t1 select 1,'n1';
select * from test1.t1;
#备份binlog
exit
mkdir -p /app/binlogbackup
cp /var/lib/mysql/mysqlmaster-bin.* /app/binlogbackup/
 
#从行事件中重构伪sql语句,-vv显示字段的元数据注释信息,-v不显示注释信息
mysqlbinlog mysqlmaster-bin.000034 -vv
 
# 注: 如果没有添加阻塞DDL操作的参数,备份过程中如有DDL操作,备份将终止。因此建议日常备份放在从库中进行。
 
--------------------------------------------------
#通过binlog恢复到某一个时间点
#回放日志
ps -ef | grep mysql
kill -9
#备份后的文件不能直接用作恢复,还需要先使用apply-log 做前滚和回滚
cd /var/lib/mysql
#目录需要为空,rm -rf `ls | grep -v mysqlmaster-bin`
rm -rf /var/lib/mysql/*
#备份目录里的是backup-my.cnf
/usr/bin/innobackupex --defaults-file=/app/all_backup/my.cnf --apply-log /app/all_backup > /opt/apply-log.log
#注: 回放日志的时候 defaults-file 选择备份目录里的即可
#然后拷贝至新实例中
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --copy-back /app/all_backup
#修改目标实例相关目录的权限
chown -R mysql:mysql /var/lib/mysql
#启动新实例即可
mysqld_safe --defaults-file=/etc/my.cnf > /dev/null 2>&1 &
ps -ef | grep mysql
 
[root@mysql-92 all_backup]# cat xtrabackup_info
uuid = 5e8214cb-3680-11eb-b736-000c29f5293e
name =
tool_name = innobackupex
tool_command = --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --port=3306 --user=backup --password=... --no-timestamp /app/all_backup
tool_version = 2.4.21
ibbackup_version = 2.4.21
server_version = 5.7.18-log
start_time = 2020-12-04 14:30:49
end_time = 2020-12-04 14:30:53
lock_time = 3
binlog_pos = filename 'mysqlmaster-bin.000035', position '154'
innodb_from_lsn = 0
innodb_to_lsn = 2785103
partial = N
incremental = N
format = file
compact = N
compressed = N
encrypted = N
 
[root@mysql-92 all_backup]# cat xtrabackup_binlog_info
mysqlmaster-bin.000035 154
 
#--base64-output=decode-rows表示不显示binglog部分
#若备份完成后进行了flush logs,则--start-position=154可能需要指定为下一个日志
time mysqlbinlog --no-defaults --start-position=154 -vv mysqlmaster-bin.000033 | mysql -uroot -pmysql
#指定结束时间点
time mysqlbinlog --no-defaults --stop-datetime='2020-12-05 02:39:59' -vv mysqlmaster-bin.000034 | mysql -uroot -pmysql
------------------------------------------------------------
 2.2  本地tar方式压缩备份 /usr/bin/innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --port=3306 --user=backup --password='Backup@123.com' --stream=tar /tmp |gzip >/app/all_backup.tar.gz
 
备份后的结果是一个压缩文件,经过对比,压缩后数据约为非压缩情况下的20%,压缩比还是比较高的。
不过,压缩备份的方式速度相对较慢,且消耗CPU,该影响因素需要大家考虑到,视情况选择是否压缩。
注意: 如果有单表过大 而/tmp路径空间不足的情况备份过程中可能会报错,因此可以指定其他空间较大的目录
 2.3  本地xbstream方式压缩备份
gzip的压缩方式备份可能会有bug(案例可以自行寻找),出现如下错误:
xtrabackup: error: The transaction log file is corrupted. xtrabackup: error: The log was not applied to the intended LSN!
#因此可以采用xbstream方式进行备份,备份命令如下:
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --port=3306 --user=backup --password='Backup@123.com' /app/backup --tmpdir=/app/backup --stream=xbstream|gzip - > /app/all_backup.xbstream.gz
 
2.4  远程备份到其他机器
远程备份与本地备份的相比 需要额外的配置远程主机的免密登录权限
/* 在备份所在用户的主机下配置连接目标主机的免密 */
#如果存在keygen,可跳过 ssh-keygen ssh-copy-id -i user@'target_ip'
#远程机器创建目录
mkdir -p /app/backup/
#之后就可以将类似于本地备份的模式 将备份结果发送到远程机器
#如果存在大表或超大事务运行时不建议使用/tmp目录
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --port=3306 --user=backup --password='Backup@123.com' --stream=tar /tmp --no-timestamp | ssh root@'192.168.92.18' "cat - > /app/backup/remote_backup.tar"
 
---------------------------------------------------------------------
--备份文件中删除已表空间加密的表t1,tab_type或删除加密表所在的库,仍然无法恢复
#查看所有加密表(表空间):t1,tab_type
select engine,TABLE_SCHEMA, TABLE_NAME, CREATE_OPTIONS from information_schema.tables where create_options like '%ENCRYPTION%="Y"%';
cd /home/backup
cp -R 2020-05-29_12-37-02 2020-05-29_12-37-02-bak
cd /home/backup/2020-05-29_12-37-02
rm -rf test
--cd /home/backup/2020-05-29_12-37-02/test
--rm -rf t1.frm t1.ibd tab_type.frm tab_type.ibd
systemctl stop mysqld
--先应用日志
innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log /home/backup/2020-05-29_12-37-02/
--再拷贝数据
innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /home/backup/2020-05-29_12-37-02/
---------------------------------------------------------------------
 
3.  增量备份
mysql -uroot -pmysql
use test;
create table test.t1(id int,name varchar(200));
insert into test.t1 select 1,'n1';
 
3.1  第一次增量备份
#可以先根据2.1的本地全备的基础上进行增量备份,首次增量备份脚本:
#此时,备份的结果放在/app/backup目录下,由于没指定no-timestamp参数,备份的结果存在在以三期时间命名的目录下:
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --port=3306 --user=backup --password='Backup@123.com' --incremental /app/backup/ --incremental-basedir=/app/all_backup
 
  注: 增量备份仅能应用于InnoDB或XtraDB表等事务表,对于MyISAM表而言,执行增量备份时依旧进行全量备份
 3.2  第二次增量备份
#第二次增量备份是在第一次增量备份的基础上进行,因此incremental-basedir参数内容指定为上一次增量备份的目录即可
#完成后生成一个新的目录
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --port=3306 --user=backup --password='Backup@123.com' --incremental /app/backup/ --incremental-basedir=/app/backup/2020-11-25_08-38-21
 
 3.3  第三次增量备份
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --port=3306 --user=backup --password='Backup@123.com' --incremental /app/backup/ --incremental-basedir=/app/backup/2020-11-25_08-41-19
 
#inc_backup.sh方式调用
sh inc_backup.sh 2020-11-25_09-47-12
#输出最后一个日期的文件夹
echo `ls -lr /app/backup |grep -v "total" |awk '{print $9}' |awk 'NR==1{print}'`
echo `ls -lr /app/backup |grep -v "total" |awk '{print $9}' |awk 'NR==1'`
vi inc_backup.sh
 
v_incremental_basedir=`ls -lr /app/backup |grep -v "total" |awk '{print $9}' |awk 'NR==1{print}'`
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --port=3306 --user=backup --password='Backup@123.com' --incremental /app/backup/ --incremental-basedir=/app/backup/$v_incremental_basedir
 
--------------
#参数方式调用
sh test.sh `ls -lr /app/backup |grep -v "total" |awk '{print $9}' |awk 'NR==1{print}'`
#test.sh如下
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --socket=/var/lib/mysql/mysql.sock --port=3306 --user=backup --password='Backup@123.com' --incremental /app/backup/ --incremental-basedir=/app/backup/$1
 
4.  恢复
4.1  基于全量备份的恢复
4.1.1 回放日志
ps -ef | grep mysql
kill -9
#备份后的文件不能直接用作恢复,还需要先使用apply-log 做前滚和回滚
cd /var/lib/mysql
#目录需要为空,rm -rf `ls | grep -v mysqlmaster-bin`
rm -rf /var/lib/mysql/*
#备份目录里的是backup-my.cnf
/usr/bin/innobackupex --defaults-file=/app/all_backup/my.cnf --apply-log /app/all_backup > /opt/apply-log.log
#注: 回放日志的时候 defaults-file 选择备份目录里的即可
4.2.2  恢复至目标实例
#本次恢复至一个新实例中(如果恢复至现有的实例需要先关闭目标实例,删除数据目录及相关日志存储的目录。不建议直接恢复至现有实例 ,除非实际需要)
#创建新实例的相关目录 #mkdir -p /app/data/mysql3307/{data,logs,tmp,etc} #生产配置文件 ,本次直接拷贝其他实例的配置文件 修改对应端口等 #cp /app/data/mysql3306/etc/my.cnf /app/data/mysql3307/etc/ #sed -i "s#3306#3307#g" my.cnf #创建错误日志 #touch /app/data/mysql3307/logs/mysqld.log
 
#然后拷贝至新实例中
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --copy-back /app/all_backup
#修改目标实例相关目录的权限
chown -R mysql:mysql /var/lib/mysql
#启动新实例即可
mysqld_safe --defaults-file=/etc/my.cnf > /dev/null 2>&1 &
ps -ef | grep mysql
#/usr/local/mysql5.7/bin/mysqld_safe --defaults-file=/app/data/mysql3307/etc/my.cnf &
 
-----------------------------
#启动mysql报错
[ERROR] InnoDB: Unable to open undo tablespace './/undo001'.
解决:
vi /etc/my.cnf
innodb_undo_tablespaces=3
 
#然后重新应用日志和拷贝备份数据
/usr/bin/innobackupex --defaults-file=/app/all_backup/my.cnf --apply-log /app/all_backup > /opt/apply-log.log
#先应用日志,不支持恢复加密表空间的库************************************************
#error:InnoDB: Encryption information in datafile: ./test/t1.ibd can't be decrypted, please check if a keyring plugin is loaded and initialized successfully.
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --copy-back /app/all_backup
chown -R mysql:mysql /var/lib/mysql
mysql -uroot -pmysql
show databases;
use test;
show tables;
 
4.2  基于增量备份的恢复
ps -ef | grep mysql
kill -9
rm -rf /var/lib/mysql/*
如果是基于第一次增量备份的恢复,操作如下
/* 使用合并增量备份的方式进行回放日志,先进行全量备份的合并 */ /usr/bin/innobackupex --apply-log --redo-only /app/all_backup /* 再合并第一次增量备份 */ /usr/bin/innobackupex --apply-log --redo-only /app/all_backup --incremental-dir=/app/backup/2020-11-25_08-38-21
如果基于多次增量备份的恢复,则在全量备份及第一次增量备份的基础上继续合并后续的备份即可
/* 基于第二次增量备份的合并 */ /usr/bin/innobackupex --apply-log --redo-only /app/all_backup --incremental-dir=/app/backup/2020-11-25_08-41-19
/* 基于第三次增量备份的合并 */ /usr/bin/innobackupex --apply-log --redo-only /app/all_backup --incremental-dir=/app/backup/2020-11-25_09-47-12
 
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --copy-back /app/all_backup
chown -R mysql:mysql /var/lib/mysql
mysqld_safe --defaults-file=/etc/my.cnf > /dev/null 2>&1 &
ps -ef | grep mysql
mysql -uroot -pmysql
show databases;
use test;
show tables;
------------------------------------------------------------------------------------
#全量备份mysql shell脚本1
mkdir -p /opt/script
sh /opt/script/fullbak.sh
vi /opt/script/fullbak.sh
 
#!/bin/bash
# mysql full back
#date 2020.11.25
#author:zh
 
time=`date +%F`
logfile="/data/bakup/mysql_full_bak_time.log"
fullbakup_logfile="/data/bakup/fullbakup_logfile.log"
mysql_bakdir="/data/bakup"
user=backup
password='Backup@123.com'
 
[ ! -d $mysql_bakdir ] && mkdir -p $mysql_bakdir
[ ! -e $logfile ] && touch $logfile
[ ! -e $fullbakup_logfile ] && touch $fullbakup_logfile
 
innobackupex --defaults-file=/etc/my.cnf --user=$user --password=$password --compress ${mysql_bakdir} 2>&1 >> $fullbakup_logfile
ret=$?
finishtime=`date +%Y%m%d_%H%M%S`
[ $ret -eq 0 ] && echo "Mysql fullbakup finished, time: $finishtime" >> $logfile || echo "Mysql fullbakup failed,please check time:$finishtime" >> $logfile
 
------------------------------------------------------------------------------------
#全量备份mysql shell脚本2
vi backup_auto.sh
 
#!/bin/bash
#function:xtrabackup database
#version:1.0
#author:zh
 
v_mysql_user="root"
v_mysql_password="mysql"
v_mysql_host="localhost"
v_mysql_port="3306"
v_mysql_charset="utf8"
#v_mysql_socket=/data/my13306
v_backup_location=/data/xtrabackup
v_expire_backup_delete="ON" #是否开启过期备份删除 ON为开启 OFF为关闭
v_expire_days=3 #过期时间天数 默认为三天,此项只有在 v_expire_backup_delete 开启时有效
 
v_backup_time=`date +%Y%m%d%H%M` #定义备份详细时间
v_backup_Ymd=`date +%Y-%m-%d` #定义备份目录中的年月日时间
v_backup_3ago=`date -d '3 days ago' +%Y-%m-%d` #3天之前的日期
v_backup_dir=$v_backup_location/$v_backup_Ymd
v_backup_log=$v_backup_location/$v_backup_Ymd/backup.log
v_welcome_msg="Welcome to use MySQL backup tools!"
 
#判断MYSQL是否启动,mysql没有启动则备份退出
v_mysql_ps=`ps -ef |grep mysql |wc -l`
v_mysql_listen=`netstat -an |grep LISTEN |grep $v_mysql_port|wc -l`
if [ $v_mysql_ps == "0" -o $v_mysql_listen == "0" ]; then
echo "ERROR:MySQL is not running! backup stop!"
exit
else
echo $v_welcome_msg
 
#连接到mysql数据库,无法连接则备份退出
mysql -h$v_mysql_host -P$v_mysql_port -u$v_mysql_user -p$v_mysql_password <<end
use mysql;
select host,user from user where user='root' and host='localhost';
exit
end
 
flag=$?
if [ $flag != "0" ]; then
echo "ERROR:Can’t connect mysql server! xtrabackup stop!"
exit
else
echo "MySQL connect ok! Please wait…"
 
#判断有没有定义备份的数据库,如果定义则开始备份,否则退出备份
v_dbname=""
echo "database $v_dbname backup start…"
mkdir -p $v_backup_dir
innobackupex --host=$v_mysql_host --user=$v_mysql_user --port=$v_mysql_port --password=$v_mysql_password $v_backup_dir --parallel=2 --no-timestamp >>$v_backup_log 2>&1
flag=$?
if [ $flag == "0" ];then
echo "database $v_dbname success backup to $v_backup_dir"
else
echo "database $v_dbname backup fail!"
fi
fi
 
#如果开启了删除过期备份,则进行删除操作
if [ $v_expire_backup_delete == "ON" -a $v_backup_location != "" ];then
#find $v_backup_location/ -type d -o -type f -ctime +$v_expire_days -exec rm -rf {} ;
find $v_backup_location/ -type d -mtime +$v_expire_days | xargs rm -rf
echo "Expired backup data delete complete!"
fi
echo "All database backup success!"
exit
fi
 
------------------------------------------------------------------------------------
#全量增量自动备份mysql shell脚本3
#创建备份用户
mysql -uroot -pmysql
grant reload,lock tables,replication client,create tablespace,process,super on *.* to backupuser@'localhost' identified by 'backup@che123';
 
#加入自动执行任务计划
crontab -e
12 3 * * * sh /opt/script/xtrabackup.sh
 
#创建冗余目录和创建备份用户:
mkdir -p /database/detect/backup/
ll /database/detect/backup/
ll /database/detect/redundency/
 
#配置备份脚本
vi /opt/script/xtrabackup.sh
 
#!/bin/bash
BEGINTIME=`date +"%Y-%m-%d %H:%M:%S"`
format_time=`date +"%Y-%m-%d_%H:%M:%S"`
week=`date +%Y-%m-%d`
backupbin=/usr/bin
backdir=/database/detect/backup/
redun=/database/detect/redundency/
file_cnf=/etc/my.cnf
user_name=backupuser
password="backup@che123"
socket="/var/lib/mysql/mysql.sock"
out_log=$backdir/xtrabackup_log_$format_time
time_cost=$backdir/xtrabackup_time.txt
 
[ ! -d $redun ] && mkdir -p $redun
 
if [ -d "$backdir/incr5" ];then
tar -czvf ${redun}/redundency_${week}.tar.gz $backdir >/dev/null 2>&1
 
rm -rf $backdir/*
mkdir -p $backdir
chown -R mysql.mysql $backdir
# del backup
DEL_UNTIL_DATE=`date --date='7 day ago' +%Y-%m-%d`
 
sleep 30
/bin/rm -f /${redun}/*${DEL_UNTIL_DATE}.tar.gz >/dev/null 2>&1
 
fi
 
#full
if [ ! -d "$backdir/full" ];then
echo "#####start full backup at $BEGINTIME to directory full" >>$time_cost
$backupbin/innobackupex --defaults-file=$file_cnf --no-timestamp --user=$user_name --password=$password --socket=$socket $backdir/full 1> $out_log 2>&1
break;
elif [ ! -d "$backdir/incr0" ];then
echo "#####start 0 incremental backup at $BEGINTIME to directory incr0" >>$time_cost
$backupbin/innobackupex --defaults-file=$file_cnf --no-timestamp --user=$user_name --password=$password --socket=$socket --incremental --incremental-basedir=$backdir/full $backdir/incr0 1> $out_log 2>&1
break;
elif [ ! -d "$backdir/incr1" ];then
echo "#####start 1 incremental backup at $BEGINTIME to directory incr1" >>$time_cost
$backupbin/innobackupex --defaults-file=$file_cnf --no-timestamp --user=$user_name --password=$password --socket=$socket --incremental --incremental-basedir=$backdir/incr0 $backdir/incr1 1> $out_log 2>&1
break;
elif [ ! -d "$backdir/incr2" ];then
echo "#####start 2 incremental backup at $BEGINTIME to directory incr2" >>$time_cost
$backupbin/innobackupex --defaults-file=$file_cnf --no-timestamp --user=$user_name --password=$password --socket=$socket --incremental --incremental-basedir=$backdir/incr1 $backdir/incr2 1> $out_log 2>&1
break;
elif [ ! -d "$backdir/incr3" ];then
echo "#####start 3 incremental backup at $BEGINTIME to directory incr3" >>$time_cost
$backupbin/innobackupex --defaults-file=$file_cnf --no-timestamp --user=$user_name --password=$password --socket=$socket --incremental --incremental-basedir=$backdir/incr2 $backdir/incr3 1> $out_log 2>&1
break;
elif [ ! -d "$backdir/incr4" ];then
echo "#####start 4 incremental backup at $BEGINTIME to directory incr4" >>$time_cost
$backupbin/innobackupex --defaults-file=$file_cnf --no-timestamp --user=$user_name --password=$password --socket=$socket --incremental --incremental-basedir=$backdir/incr3 $backdir/incr4 1> $out_log 2>&1
break;
elif [ ! -d "$backdir/incr5" ];then
echo "#####start 5 incremental backup at $BEGINTIME to directory incr5" >>$time_cost
$backupbin/innobackupex --defaults-file=$file_cnf --no-timestamp --user=$user_name --password=$password --socket=$socket --incremental --incremental-basedir=$backdir/incr4 $backdir/incr5 1> $out_log 2>&1
break;
fi
ENDTIME=`date +"%Y-%m-%d %H:%M:%S"`
begin_data=`date -d "$BEGINTIME" +%s`
end_data=`date -d "$ENDTIME" +%s`
spendtime=`expr $end_data - $begin_data`
echo "it takes $spendtime sec for packing the data directory" >>$time_cost
 
原文地址:https://www.cnblogs.com/buffercache/p/14037517.html