MySQL innobackupex 全备+增量备份+还原+增量还原

1、全备

[root@test3 ~]# innobackupex --user=root --password=123456 --no-timestamp /data/backup/full_backup

[root@test3 backup]# ls #全部备份的文件
full_backup

2、对数据做一些修改

mysql> use sbtest;    #创建了一张表,然后插入了两条记录
Database changed
mysql> create table tb3(a varchar(5), sysTime datetime);
Query OK, 0 rows affected (0.02 sec)

mysql> insert into tb3 select "aa", now();
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into tb3 select "bb", now();
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select * from tb3;
+------+---------------------+
| a    | sysTime             |
+------+---------------------+
| aa   | 2018-11-29 09:14:00 |
| bb   | 2018-11-29 09:14:11 |
+------+---------------------+
2 rows in set (0.00 sec)

3、开始增量备份

[root@test3 backup]# innobackupex --user=root --password=123456 --no-timestamp --incremental /data/backup/incre1 --incremental-basedir=/data/backup/full_backup

--no-timestamp:选项来阻止命令自动创建一个以时间命名的目录,我们可以自定义备份集的名字
--incremental /data/backup/incre1 :参数说明这次备份时一个增量备份,后面的路径指定增量备份的目录
--incremental-basedir=/data/backup/full_backup :增量备份时基于全备的,这个参数就是说明本次的增量备份时基于那次的全备,指向全备的目录文件

    查看增量备份的文件记录:

[root@test3 incre1]# cat xtrabackup_checkpoints
backup_type = incremental                 #备份类型
from_lsn = 13741583205                    #需要说明增量备份只能INNODB,xtrack存储引擎,备份是基于lsn的改变的! 
to_lsn = 13741590096
last_lsn = 13741590105
compact = 0
recover_binlog_info = 0

备份完成之后,我们需要恢复操作,准备数据,也就是redo已经提交的事务,回滚未提交的事务。增量备份也是这样,但是操作有些不同。

4、恢复

[root@test3 ~]# innobackupex  --apply-log --redo-only --use-memory=1G /data/backup/full_backup

--use-memory=1G #表示使用的内存大小
--redo-only:这个选项在prepare base full backup,往其中merge增量备份(但不包括最后一个)时候使用
第二步:把增量备份在全备上面回放,也就是把增量备份附加到全备上。 
[root@test3 ~]# innobackupex --apply-log --redo-only /data/backup/full_backup --incremental-dir=/data/backup/incre1

整个恢复操作分为两步:

1:准备全部备份,保证文件的一致性。
2:把所有的增量备份附加到全备备份上。如果有多个增量备份,则每一个增量备份文件都要执行附加操作。但是要注意顺序,可以查看增量备份的xtrabackup_checkpoints文件
   根据lsn来确定文件的顺序
[root@test3 ~]# service mysqld  stop

[root@test3 ~]# rm -fr /data/mysql/*

[root@test3 ~]# innobackupex --copy-back /data/backup/full_backup

[root@test3 ~]# chown -R mysql:mysql /data/mysql/

#启动数据库,若是之前插入的两条数据存在,则说明增量备份恢复成功!
[root@test3 ~]# service mysqld start
Starting MySQL... SUCCESS! 
[root@test3 ~]# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.22-log MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use sbtest;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from tb3;       #增量备份插入的数据存在
+------+---------------------+
| a    | sysTime             |
+------+---------------------+
| aa   | 2018-11-29 09:14:00 |
| bb   | 2018-11-29 09:14:11 |
+------+---------------------+
2 rows in set (0.00 sec)

特别提示:
若有多个增量备份,则每一个增量备份都要重放到全备的文件中,一定要注意重放增量备份时候的顺序,可以在xtrabackup_checkpoints文件中根据lsn的大小来判断文件的顺序。

5、流压缩

[root@test2 backup]# innobackupex --user=root --password="7abec53701c3eefb" --no-timestamp --socket=/var/lib/mysql/mysql.sock --stream=tar /tmp |gzip -> testdb.tar.gz

--stram=tar  : 指定标准输出格式,一种是tar,另一种是xbstream;xbstream是xtraceback提供的,解压的时候需要专用命令处理,考虑通用性,选择用tar!

/tmp         : 流格式标准输出,临时存放于/tmp目录下面

| gzip ->    : 通过管道把流格式输出传给gzip进行压缩

转:https://www.cnblogs.com/wxzhe/p/10033983.html

上一篇:linux:mysql数据库备份


下一篇:Linux 架构篇 知识心得03 rsync备份