Xtrabackup单库(全增)备份及恢复

xtrabackup 介绍:

xtrabackup有两个主要的工具:innobackupex和xtrabackup,xtrabackup只能备份InnoDB和XtraDB数据表,innobackupex封装了xtrabackup,可以备份MyISAM数据表。

第一步安装:以centos7为例

安装perl环境

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL libev

安装xtrabackup

wget http://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.12/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm
http://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm
yum -y install percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm

参数选项解释

Innobackupex 参数解释:

–defaults-file=[MY.CNF]该选项传递给xtrabackup子进程,从指定文件读取缺省选项

–apply-log 从备份恢复。

–redo-only 该选项强制跳过rollback阶段,只进行redo。这是有必要使用的,如果备份后,要使用增量改变的。

–copy-back 从备份目录拷贝数据和索引文件到datadir目录

–remote-host=HOSTNAME备份到远程主机上,使用ssh

–stream=[tarcpio(notimplemented)] 指定备份标准输出格式

–tmpdir=DIRECTORY默认与tmpdir相同。使用―remote-host或―stream参数后,传输日志文件将存放在临时目录下

–use-memory=MB选项传递给xtrabackup子进程。恢复使用内存大小

–parallel=NUMBER-OF-THREADS选项传递给xtrabackup子进程,指定数据传输线程总数。默认为1

–throttle=IOS选项传递给xtrabackup子进程,限制IO线程数量

–sleep=MS 选项传递给xtrabackup子进程。每拷贝1MB数据暂停多少MS时间

–compress[=LEVEL]选项传递给xtrabackup子进程。压缩级别在0-9.1快速压缩,9最佳压缩,0不压缩。默认为1.

–include=REGEXP选项传递给xtrabackup子进程。使用正则进行匹配

–databases=LIST指定备份数据库

–tables-file=FILE

–uncompress选项传递给xtrabackup子进程。对压缩过的InnoDB数据文件不进行压缩

–export 仅使用于prepare选项。选项传递给xtrabackup子进程。

–user=NAME

–password=WORD

–host=HOST

–port=PORT

–slave-info 备份复制从服务端,主从信息记录在ibbackup_slave_info文件中

–socket=SOCKET

–no-timestamp不在备份根目录下创建以当前时间戳为名称的新的备份目录

–ibbackup=IBBACKUP-BINARYibbackup二进制路径

–no-lock 禁止表级锁。全部是InnoDB引擎表和不关系二进制日志位置下使用

–scpopt=SCP-OPTIONS指定scp参数

使用xtrbackup

1.创建一个测试库和测试表

mysql> create database blog default character set utf8;
 Query OK, 1 row affected (0.01 sec)

mysql> use blog;
 Database changed

mysql> create table user(name varchar(11),age int);
 Query OK, 0 rows affected (0.10 sec)

mysql> insert into user values('zhangsan',18);
 Query OK, 1 row affected (0.01 sec)

mysql> insert into user values('lisi',20);
 Query OK, 1 row affected (0.00 sec)

mysql> select * from user;
 +----------+------+
  name  age 
 +----------+------+
  zhangsan  18 
  lisi  20 
 +----------+------+
 2 rows in set (0.00 sec)

2.全备份

–user 指定备份用户

–password 指定备份密码

–host  指定主机

–defaults-file 指定配置文件

–include 指定需要备份的数据库,多个用’’隔开,比如’mysqlblog’

/data0/xtrbackup/ 全备份路径

/data0/inxtrbackup/ 增量备份路径

执行备份命令,只备份blog库

innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --host=127.0.0.1 --include='blog'    /data0/xtrbackup/

3.全备份恢复

准备工作先删除那个库 或者删除库中的表

mysql> drop database blog;

停止mysql

/etc/init.d/mysqld stop

执行恢复

innobackupex --defaults-file=/etc/my.cnf --user=root --host=127.0.0.1 --password=123456 --apply-log --export /data0/xtrbackup/2018-07-20_09-53-42/

拷贝所有文件到你的mysql data目录

\cp -rf 2018-07-20_09-53-42/* /data0/mysql/

赋予权限:

chown -R mysql:mysql /data0/mysql

启动mysql

/etc/init.d/mysqld start

这时发现你的数据已经恢复回来了

3.增量备份

1.我们在user表中在加入一些数据

mysql> insert into user values('wangwu',23);
 Query OK, 1 row affected (0.00 sec)

mysql> insert into user values('zhaoliu',24);
 Query OK, 1 row affected (0.00 sec)

2.先做一次增量备份

innobackupex --defaults-file=/etc/my.cnf --user=root --host=127.0.0.1 --password=123456 --include='blog' --incremental-basedir=/data0/xtrbackup/2018-07-20_09-53-42/ --incremental /data0/inxtrbackup/

3.在插入一些数据,做二次增量备份

mysql> insert into user values('jack',10);
 Query OK, 1 row affected (0.00 sec)

mysql> insert into user values('lucy',11);
 Query OK, 1 row affected (0.00 sec)

mysql> select * from user;  
+----------+------+  
name age  
+----------+------+  
zhangsan 18  
lisi 20  
wangwu 23  
zhaoliu 24  
jack 10  
lucy 11  
+----------+------+  
6 rows in set (0.00 sec)

4.做二次增量备份,注意这里路径要指定的时第一次增量的路径

innobackupex --defaults-file=/etc/my.cnf --user=root --host=127.0.0.1 --password=123456 --include='blog' --incremental-basedir=/data0/inxtrbackup/2018-07-20_10-10-35/ --incremental /data0/inxtrbackup/

5.测试恢复,我们还是采取删库的形式

drop database blog;

停止mysql

prepare 操作:

全备份prepare:

innobackupex --defaults-file=/etc/my.cnf --user=root --host=127.0.0.1 --password=123456 --apply-log --redo-only --export /data0/xtrbackup/2018-07-20_11-04-46/

第一次,

innobackupex --defaults-file=/etc/my.cnf --user=root --host=127.0.0.1 --password=123456 --apply-log --redo-only --export /data0/xtrbackup/2018-07-20_11-04-46/ --incremental-dir=/data0/inxtrbackup/2018-07-20_11-06-22/

第二次

innobackupex --defaults-file=/etc/my.cnf --user=root --host=127.0.0.1 --password=123456 --apply-log --redo-only --export /data0/xtrbackup/2018-07-20_11-04-46/ --incremental-dir=/data0/inxtrbackup/2018-07-20_11-07-24/

恢复数据,先拷贝最后一次增量备份的内容,然后拷贝全备份的文件内容

\cp -rf /data0/inxtrbackup/2018-07-20_11-07-24/\* /data0/mysql/
 \cp -rf /data0/xtrbackup/2018-07-20_11-04-46/\* /data0/mysql/

授权

chown -R mysql.mysql /data0/mysql

启动mysql

/etc/init.d/mysqld start

Xtrabackup单库(全增)备份及恢复
http://www.jcwit.com/article/190/
作者
Carlos
发布于
2018年7月20日
许可协议