zoukankan      html  css  js  c++  java
  • 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
     
  • 相关阅读:
    Linux C++ 处理 Kill 信号、Ctrl+C信号,便于安全退出
    静态链接libcurl的步骤
    编译器如何C++的函数重载
    单链表逆序 也叫反转
    VC 创建拨号连接A
    强大的vim配置,让编程更随意
    已知二叉树后序遍历序列是DBCEFGHA,中序遍历序列EDCBAHFG,它的前序遍历的序列是?麻烦再画下这二叉树.
    怎样使用IPV6编程
    全面详细介绍libcurl的使用
    ZeroMQ全面介绍
  • 原文地址:https://www.cnblogs.com/buffercache/p/14037517.html
Copyright © 2011-2022 走看看