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