xtrabackup压缩备份多线程备份(lz4,pigz)全详解

常用备份:
目前较新的:percona-xtrabackup-2.4.11-1.el6.x86_64.rpm

配置percona的yum源。
yum install epel-release
yum install libev qpress
yum install perl-DBD-MySQL
yum install percona-xtrabackup-2.4.11-1.el6.x86_64.rpm

innobackupex备份需要的权限:
操作系统层:
    需要有对data目录有读,写及可执行权限。
数据库层:
    RELOAD 和 LOCK TABLES:为了在开始拷贝文件前,执行FLUSH TABLES WITH
    READ LOCK操作。
    REPLICATION CLIENT:为了获得binlog日志位置。
    CREATE TABLESPACE:为了导入表,用户表级别的恢复。
    SUPER:为了在复制环境下能够start/stop slave复制线程。

create user 'xtrbak'@'localhost' identified by '[{ehE!)w:0xpL8';
grant select,reload,lock tables,process,replication slave,replication client on *.* to 'xtrbak'@'localhost';
flush privileges;


一旦使用xtrabackup进行备份,也就意味着数据量较大了,如果很小,备份时间很短,直接使用mysqldump或者mydumper。
因此,xtrabackup备份较大数据量,无论是本地还是异地,都压缩,较小空间。默认使用自带的压缩方式。

================================全备以及恢复(默认压缩compress)==============================

将实例A进行全备(使用默认压缩qpress):
innobackupex \
      --defaults-file=/usr/local/mysql_3307/my.cnf \
      --host=localhost \
      --user=xtrbak \
      --password=aq0VR251xj \
      --parallel=4 \
      --no-timestamp \
      --compress \
      --compress-threads=8 \
      --tmpdir=/tmp \
      --socket=/usr/local/mysql_3307/mysql.sock  \
      /data/backup/3307/full/

全备份恢复:

前提:已经创建了一个实例B,用于恢复刚刚A实例的备份。

(1).解压qpress文件

cd /data/backup/3307/full/2016-04-13_14-20-27
for bf in `find . -iname "*/.qp"`; do qpress -d $bf $(dirname $bf) && rm $bf; done

如果是版本大于2.1.4,可以使用以下方式:
innobackupex --decompress /data/backup/3307/full/2016-04-13_14-20-27

(2).应用日志,将已经提交的刷新到数据文件中:
innobackupex \
      --defaults-file=/usr/local/mysql_3307/my.cnf 
      --apply-log /data/backup/3307/full/2016-04-13_14-20-27

(3).关闭需要恢复的实例  /etc/init.d/mysql_3306 stop
(4).删除或者迁移实例B的数据目录文件 rm -rf /usr/local/mysql_3307/data/*  或者 mv /usr/local/mysql_3307/data/* /opt/tmp/

(5).将一致性的数据文件,cp回实例B的数据目录中(一定要指定my.cnf,因为实例A和B的数据路径不一定一样.它会根据my.cnf中的位置cp回去):
innobackupex \
      --defaults-file=/usr/local/mysql_3307/my.cnf 
      --copy-back /data/backup/3307/full/2016-04-13_14-20-27

xtrabackup --prepare --target-dir=/data/backup/3307/full/2016-04-13_14-20-27
数据文件在准备好之前并不一致,因为它们在程序运行时被复制在不同的时间,并且在发生这些情况时可能会被更改。 如果您尝试使用这些数据文件启动InnoDB,它将检测到损坏并自动崩溃,以防止在损坏的数据上运行。 xtrabackup --prepare步骤使得文件在一段时间内完美地保持一致,所以您可以在其上运行InnoDB。

(6).给数据目录权限设置。ls /usr/local/mysql_3307/data 是否已经有数据文件,并权限设置:
chown -R mysql:mysql /usr/local/mysql_3307/data

(7).启动实例B:  /etc/init.d/mysql_3306 start

(8).如果想做一个slave.
查看/data/backup/3307/full/2016-04-13_14-20-27目录下xtrabackup_binlog_info文件,记录了备份时的binlog或是gtid信息。
  bin.000005    16933082

(9).配置同步
CHANGE MASTER TO MASTER_HOST='192.168.1.101',MASTER_USER='repl', MASTER_PASSWORD='mysql',MASTER_LOG_FILE='bin.000005',MASTER_LOG_POS=16933082;
start slave;
show slave status\G

====================================增量备份以及恢复=======================================

(1).将实例A进行全备:
innobackupex \
      --defaults-file=/db/mysql_3306/my.cnf \
      --host=localhost \
      --user=root \
      --password='mysql' \
      --parallel=4 \
      --no-timestamp \
      --socket=/db/mysql_3306/mysql.sock  \
      /data/backup/3307/full/

  (中间间隔一些操作....)

(2).对实例A增量备份
innobackupex \
         --defaults-file=/usr/local/mysql/3307/my.cnf 
         --user=innobk 
         --password=aq0VR251xj  
         --socket=/usr/local/mysql/3307/mysql.sock 
         --incremental 
         --incremental-basedir=/data/backup/3307/full/2016-05-23_17-37-10 \
         /data/backup/3307/incr/


增量备份-恢复

前提:已经创建了一个实例B,用于恢复刚刚A实例的备份。

(1).应用日志,将已经提交的刷新到数据文件中:
innobackupex \
        --apply-log --redo-only /data/backup/3307/full/2016-05-23_17-37-10/

--redo-only 指的是把备份时commit的,但还在事务日志中的应用到时数据,但是还没提交的不撤消,因为这个事务可能在增量备份中提交
假如的撤消了增量备份中就提交不了,因为事务已经不完整。

(2).将增量备份全并到完整备份中去
innobackupex \
      --apply-log --redo-only /data/backup/3307/full/2016-05-23_17-37-10 \
      --incremental-dir=/data/backup/3307/incr/2016-05-23_17-39-12/

/data/backup/3307/full/2016-05-23_17-37-10这个是完整备份的目录。
--incremental-dir 后跟的是增量备份的目录

这个会使增量备份中的的数据合并到完整备份中,如果还有增量备份,继续(4)步骤合并.按照备份顺序依次合并。
如下,只能在合并了/2016-05-23_17-39-12/这个增量备份之后,才能再合并/2016-05-23_19-06-05/这第二次增量。

示例:
innobackupex \
      --apply-log --redo-only /data/backup/3307/full/2016-05-23_17-37-10 \
      --incremental-dir=/data/backup/3307/incr/2016-05-23_19-06-05/

(3).关闭需要恢复的实例  /etc/init.d/mysql_3306 stop
(4).删除或者迁移实例B的数据目录文件 rm -rf /usr/local/mysql_3307/data/*  或者 mv /usr/local/mysql_3307/data/* /opt/tmp/

(5).一致性恢复(指定的是(4)步骤合并的全备目录)。
innobackupex \
       --defaults-file=/usr/local/mysql/3307/my.cnf \
       --copy-back /data/backup/3307/full/2016-05-23_17-37-10/

(6).给数据目录权限设置。ls /usr/local/mysql_3307/data 是否已经有数据文件,并权限设置:
chown -R mysql:mysql /usr/local/mysql_3307/data

(7).启动实例B:  /etc/init.d/mysql_3306 start

OK,结束。


============流备份(tar,xbstream)以及压缩(qpress,gzip,pigz,lz4)===============

# innobackupex --stream=xbstream /tmp >/backup/bak.xbstream                       ###非压缩方式
# innobackupex --stream=xbstream --compress /tmp >/backup/bak_compress.xbstream   ###压缩方式

total 43M
-r

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值