文章目录
- XBK在innodb表备份恢复的流程
- innobackex使用
- 在配置文件中添加新配置:
- 全备:
- 恢复:
- 增量备份和恢复
- 此时先做个全备:
- 接下来模拟第一天数据变化:
- 进行第一天的增量备份:两个参数,指定增量备份文件路径名字,和以哪个备份为基础进行增量备份
- 接下来模拟第二天数据变化:
- 进行第二天增量备份:此次的增量备份,就要依赖inc1进行增量
- 进行模拟第三天数据:但此次不进行增量备份
- 目前,我们有一个全备,两个增量备份,和二进制日志,恢复前请 一定要注意!!!
- 先csr第一个全备
- 合并与整理inc1
- 合并与整理inc2,因为inc2是最后一个增量,所以不用加--redo-only
- 进行全备最终整理
- 到此备份文件已整理好,接下来截取日志文件
- 至此!所有数据恢复成功,谢谢
xtrabackup是Percona公司CTO Vadim参与开发的一款基于InnoDB的在线热备工具,具有开源,免费,支持在线热备,备份恢复速度快,占用磁盘空间小等特点,并且支持不同情况下的多种备份形式
。xtrabackup的官方下载地址为http://www.percona.com/software/percona-xtrabackup。
它的备份方式是物理备份
非innodb表:是直接锁表,在cp数据,属于温备
innodb表:不锁表,拷贝数据页,最终以数据文件的方式保存下来,并且最大的优势是在备份时,把备份时产生的redo和undo一并备走,属于热备方式
xtrabackup包含两个主要的工具,即xtrabackup和innobackupex,二者区别如下:
(1)xtrabackup只能备份innodb和xtradb两种引擎的表,而不能备份myisam引擎的表;
(2)innobackupex是一个封装了xtrabackup的Perl脚本,支持同时备份innodb和myisam,但在对myisam备份时需要加一个全局的读锁。还有就是myisam不支持增量备份。
XBK在innodb表备份恢复的流程
1.XBK备份执行的瞬间,立即触发ckpt,已提交的数据脏页,从内存刷写到磁盘,并记录此时的LSN号
2.备份时,拷贝磁盘数据页,并把备份过程中产生的redo和undo一并考走,也就是checkpoint,LSN之后的日志
3.在恢复之前,模拟innodb自动恢复过程,将redo与undo进行应用
4.恢复过程是cp,备份到元数据目录下
2.备份时,拷贝磁盘数据页,并把备份过程中产生的redo和undo一并考走,也就是checkpoint,LSN之后的日志
3.在恢复之前,模拟innodb自动恢复过程,将redo与undo进行应用
4.恢复过程是cp,备份到元数据目录下
我这里是下载的percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm,上传到虚拟机中,然后yum install percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm 自动解决依赖,就可以使用了
innobackex使用
在配置文件中添加新配置:
[client]
socket=/tmp/mysql.sock
全备:
默认是以日期命名备份文件
[root@db01 ~]# innobackupex --user=root --password=123 /test
[root@db01 ~]# ll /test/
drwxr-x--- 2 root root 6 May 29 20:31 2019-05-29_20-31-45
自定义备份文件的名字
[root@db01 ~]#innobackupex --user=root --password=123 --no-timestamp /test/full
[root@db01 ~]# ll /test
[root@db01 ~]#drwxr-x--- 5 root root 193 Jun 5 20:10 full
恢复:
恢复之前先csr,进行redo或者undo:
[root@db01 ~]# innobackupex --apply-log /test/full
然后进行恢复:
注意,被恢复的datadir必须是空的:
[root@db01 ~]# ll /data/mysql
total 0
然后进行恢复:
[root@db01 ~]# innobackupex --copy-back /test/full
190605 20:50:17 completed OK!
[root@db01 ~]# mkdir /data/mysql/data2 -p
[root@db01 ~]# cp -a /test/full/* /data/mysql/data2
检查datadir是否有文件:
[root@db01 ~]# ll /data/mysql/mysql2
total 122920
-rw-r----- 1 root root 335 Jun 5 20:50 ib_buffer_pool
-rw-r----- 1 root root 12582912 Jun 5 20:50 ibdata1
-rw-r----- 1 root root 50331648 Jun 5 20:50 ib_logfile0
-rw-r----- 1 root root 50331648 Jun 5 20:50 ib_logfile1
-rw-r----- 1 root root 12582912 Jun 5 20:50 ibtmp1
drwxr-x--- 2 root root 4096 Jun 5 20:50 mysql
drwxr-x--- 2 root root 8192 Jun 5 20:50 performance_schema
drwxr-x--- 2 root root 8192 Jun 5 20:50 sys
-rw-r----- 1 root root 436 Jun 5 20:50 xtrabackup_info
-rw-r----- 1 root root 1 Jun 5 20:50 xtrabackup_master_key_id
因为恢复的时候是以root用户,所以要授权一下
[root@db01 ~]# chown -R mysql.mysql /data/*
[root@db01 ~]# ll /data/mysql/data2
total 122920
-rw-r----- 1 mysql mysql 335 Jun 5 20:50 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 Jun 5 20:50 ibdata1
-rw-r----- 1 mysql mysql 50331648 Jun 5 20:50 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Jun 5 20:50 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 Jun 5 20:50 ibtmp1
drwxr-x--- 2 mysql mysql 4096 Jun 5 20:50 mysql
drwxr-x--- 2 mysql mysql 8192 Jun 5 20:50 performance_schema
drwxr-x--- 2 mysql mysql 8192 Jun 5 20:50 sys
-rw-r----- 1 mysql mysql 436 Jun 5 20:50 xtrabackup_info
-rw-r----- 1 mysql mysql 1 Jun 5 20:50 xtrabackup_master_key_id
修改配置文件,启动,直接恢复数据
[root@db01 ~]#vim /etc/my.cnf
datadir=/data/mysql/data2
[root@db01 ~]# systemctl start mysqld.service
增量备份和恢复
先看看此时数据库有什么数据:
3306 [test1]>show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test1 |
+--------------------+
5 rows in set (0.00 sec)
3306 [test1]>select * from t1;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)
此时先做个全备:
[root@db01 ~]# innobackupex --user=root --password=123 --no-timestamp /test/full
[root@db01 ~]# ll /test
drwxr-x--- 6 root root 206 Jun 5 21:04 full
接下来模拟第一天数据变化:
3306 [test1]>create table t2 (id int);
Query OK, 0 rows affected (0.01 sec)
3306 [test1]>insert into t2 values(1),(2),(3);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings:
03306 [test1]>show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| t1 |
| t2 |
+-----------------+
2 rows in set (0.00 sec)
进行第一天的增量备份:两个参数,指定增量备份文件路径名字,和以哪个备份为基础进行增量备份
[root@db01 ~]# innobackupex --user=root --password=123 --no-timestamp --incremental /test/inc1 --incremental-basedir=/test/full
增量备份完,此时目录中应该有两个备份文件
[root@db01 ~]# ll /test
drwxr-x--- 6 root root 206 Jun 5 21:04 full
drwxr-x--- 6 root root 232 Jun 5 21:12 inc1
接下来模拟第二天数据变化:
3306 [test1]>create table t3 (id int);
Query OK, 0 rows affected (0.01 sec)
3306 [test1]>insert into t3 values(1),(2),(3);
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
3306 [test1]>show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| t1 |
| t2 |
| t3 |
+-----------------+
3 rows in set (0.00 sec)
进行第二天增量备份:此次的增量备份,就要依赖inc1进行增量
[root@db01 ~]# innobackupex --user=root --password=123 --no-timestamp --incremental /test/inc2 --incremental-basedir=/test/inc1
[root@db01 ~]# ll /test
total 0
drwxr-x--- 6 root root 206 Jun 5 21:04 full
drwxr-x--- 6 root root 232 Jun 5 21:12 inc1
drwxr-x--- 6 root root 232 Jun 5 21:27 inc2
进行模拟第三天数据:但此次不进行增量备份
3306 [test1]>create table t4 (id int);
Query OK, 0 rows affected (0.02 sec)
3306 [test1]>insert into t4 values(1),(2),(3);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 03306 [test1]>show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| t1 |
| t2 |
| t3 |
| t4 |
+-----------------+
4 rows in set (0.00 sec)
目前,我们有一个全备,两个增量备份,和二进制日志,恢复前请 一定要注意!!!
[client] socket=/tmp/mysql.sock
全备:
默认是以日期命名备份文件
[root@db01 ~]# innobackupex --user=root --password=123 /test
[root@db01 ~]# ll /test/
drwxr-x--- 2 root root 6 May 29 20:31 2019-05-29_20-31-45
自定义备份文件的名字
[root@db01 ~]#innobackupex --user=root --password=123 --no-timestamp /test/full
[root@db01 ~]# ll /test
[root@db01 ~]#drwxr-x--- 5 root root 193 Jun 5 20:10 full
恢复:
恢复之前先csr,进行redo或者undo:
[root@db01 ~]# innobackupex --apply-log /test/full
然后进行恢复:
注意,被恢复的datadir必须是空的:
[root@db01 ~]# ll /data/mysql
total 0
然后进行恢复:
[root@db01 ~]# innobackupex --copy-back /test/full
190605 20:50:17 completed OK!
[root@db01 ~]# mkdir /data/mysql/data2 -p
[root@db01 ~]# cp -a /test/full/* /data/mysql/data2
检查datadir是否有文件:
[root@db01 ~]# ll /data/mysql/mysql2
total 122920
-rw-r----- 1 root root 335 Jun 5 20:50 ib_buffer_pool
-rw-r----- 1 root root 12582912 Jun 5 20:50 ibdata1
-rw-r----- 1 root root 50331648 Jun 5 20:50 ib_logfile0
-rw-r----- 1 root root 50331648 Jun 5 20:50 ib_logfile1
-rw-r----- 1 root root 12582912 Jun 5 20:50 ibtmp1
drwxr-x--- 2 root root 4096 Jun 5 20:50 mysql
drwxr-x--- 2 root root 8192 Jun 5 20:50 performance_schema
drwxr-x--- 2 root root 8192 Jun 5 20:50 sys
-rw-r----- 1 root root 436 Jun 5 20:50 xtrabackup_info
-rw-r----- 1 root root 1 Jun 5 20:50 xtrabackup_master_key_id
因为恢复的时候是以root用户,所以要授权一下
[root@db01 ~]# chown -R mysql.mysql /data/*
[root@db01 ~]# ll /data/mysql/data2
total 122920
-rw-r----- 1 mysql mysql 335 Jun 5 20:50 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 Jun 5 20:50 ibdata1
-rw-r----- 1 mysql mysql 50331648 Jun 5 20:50 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Jun 5 20:50 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 Jun 5 20:50 ibtmp1
drwxr-x--- 2 mysql mysql 4096 Jun 5 20:50 mysql
drwxr-x--- 2 mysql mysql 8192 Jun 5 20:50 performance_schema
drwxr-x--- 2 mysql mysql 8192 Jun 5 20:50 sys
-rw-r----- 1 mysql mysql 436 Jun 5 20:50 xtrabackup_info
-rw-r----- 1 mysql mysql 1 Jun 5 20:50 xtrabackup_master_key_id
修改配置文件,启动,直接恢复数据
[root@db01 ~]#vim /etc/my.cnf
datadir=/data/mysql/data2
[root@db01 ~]# systemctl start mysqld.service
增量备份和恢复
先看看此时数据库有什么数据:
3306 [test1]>show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test1 |
+--------------------+
5 rows in set (0.00 sec)
3306 [test1]>select * from t1;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)
此时先做个全备:
[root@db01 ~]# innobackupex --user=root --password=123 --no-timestamp /test/full
[root@db01 ~]# ll /test
drwxr-x--- 6 root root 206 Jun 5 21:04 full
接下来模拟第一天数据变化:
3306 [test1]>create table t2 (id int);
Query OK, 0 rows affected (0.01 sec)
3306 [test1]>insert into t2 values(1),(2),(3);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings:
03306 [test1]>show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| t1 |
| t2 |
+-----------------+
2 rows in set (0.00 sec)
进行第一天的增量备份:两个参数,指定增量备份文件路径名字,和以哪个备份为基础进行增量备份
[root@db01 ~]# innobackupex --user=root --password=123 --no-timestamp --incremental /test/inc1 --incremental-basedir=/test/full
增量备份完,此时目录中应该有两个备份文件
[root@db01 ~]# ll /test
drwxr-x--- 6 root root 206 Jun 5 21:04 full
drwxr-x--- 6 root root 232 Jun 5 21:12 inc1
接下来模拟第二天数据变化:
3306 [test1]>create table t3 (id int);
Query OK, 0 rows affected (0.01 sec)
3306 [test1]>insert into t3 values(1),(2),(3);
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
3306 [test1]>show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| t1 |
| t2 |
| t3 |
+-----------------+
3 rows in set (0.00 sec)
进行第二天增量备份:此次的增量备份,就要依赖inc1进行增量
[root@db01 ~]# innobackupex --user=root --password=123 --no-timestamp --incremental /test/inc2 --incremental-basedir=/test/inc1
[root@db01 ~]# ll /test
total 0
drwxr-x--- 6 root root 206 Jun 5 21:04 full
drwxr-x--- 6 root root 232 Jun 5 21:12 inc1
drwxr-x--- 6 root root 232 Jun 5 21:27 inc2
进行模拟第三天数据:但此次不进行增量备份
3306 [test1]>create table t4 (id int);
Query OK, 0 rows affected (0.02 sec)
3306 [test1]>insert into t4 values(1),(2),(3);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 03306 [test1]>show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| t1 |
| t2 |
| t3 |
| t4 |
+-----------------+
4 rows in set (0.00 sec)
目前,我们有一个全备,两个增量备份,和二进制日志,恢复前请 一定要注意!!!
恢复之前先csr,进行redo或者undo: [root@db01 ~]# innobackupex --apply-log /test/full 然后进行恢复: 注意,被恢复的datadir必须是空的: [root@db01 ~]# ll /data/mysql total 0 然后进行恢复: [root@db01 ~]# innobackupex --copy-back /test/full 190605 20:50:17 completed OK! [root@db01 ~]# mkdir /data/mysql/data2 -p [root@db01 ~]# cp -a /test/full/* /data/mysql/data2 检查datadir是否有文件: [root@db01 ~]# ll /data/mysql/mysql2 total 122920 -rw-r----- 1 root root 335 Jun 5 20:50 ib_buffer_pool -rw-r----- 1 root root 12582912 Jun 5 20:50 ibdata1 -rw-r----- 1 root root 50331648 Jun 5 20:50 ib_logfile0 -rw-r----- 1 root root 50331648 Jun 5 20:50 ib_logfile1 -rw-r----- 1 root root 12582912 Jun 5 20:50 ibtmp1 drwxr-x--- 2 root root 4096 Jun 5 20:50 mysql drwxr-x--- 2 root root 8192 Jun 5 20:50 performance_schema drwxr-x--- 2 root root 8192 Jun 5 20:50 sys -rw-r----- 1 root root 436 Jun 5 20:50 xtrabackup_info -rw-r----- 1 root root 1 Jun 5 20:50 xtrabackup_master_key_id
因为恢复的时候是以root用户,所以要授权一下 [root@db01 ~]# chown -R mysql.mysql /data/* [root@db01 ~]# ll /data/mysql/data2 total 122920 -rw-r----- 1 mysql mysql 335 Jun 5 20:50 ib_buffer_pool -rw-r----- 1 mysql mysql 12582912 Jun 5 20:50 ibdata1 -rw-r----- 1 mysql mysql 50331648 Jun 5 20:50 ib_logfile0 -rw-r----- 1 mysql mysql 50331648 Jun 5 20:50 ib_logfile1 -rw-r----- 1 mysql mysql 12582912 Jun 5 20:50 ibtmp1 drwxr-x--- 2 mysql mysql 4096 Jun 5 20:50 mysql drwxr-x--- 2 mysql mysql 8192 Jun 5 20:50 performance_schema drwxr-x--- 2 mysql mysql 8192 Jun 5 20:50 sys -rw-r----- 1 mysql mysql 436 Jun 5 20:50 xtrabackup_info -rw-r----- 1 mysql mysql 1 Jun 5 20:50 xtrabackup_master_key_id
修改配置文件,启动,直接恢复数据 [root@db01 ~]#vim /etc/my.cnf
datadir=/data/mysql/data2
[root@db01 ~]# systemctl start mysqld.service
增量备份和恢复
先看看此时数据库有什么数据: 3306 [test1]>show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | test1 | +--------------------+ 5 rows in set (0.00 sec) 3306 [test1]>select * from t1; +------+ | id | +------+ | 1 | | 2 | | 3 | +------+ 3 rows in set (0.00 sec)
此时先做个全备:
[root@db01 ~]# innobackupex --user=root --password=123 --no-timestamp /test/full
[root@db01 ~]# ll /test
drwxr-x--- 6 root root 206 Jun 5 21:04 full
接下来模拟第一天数据变化:
3306 [test1]>create table t2 (id int);
Query OK, 0 rows affected (0.01 sec)
3306 [test1]>insert into t2 values(1),(2),(3);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings:
03306 [test1]>show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| t1 |
| t2 |
+-----------------+
2 rows in set (0.00 sec)
进行第一天的增量备份:两个参数,指定增量备份文件路径名字,和以哪个备份为基础进行增量备份
[root@db01 ~]# innobackupex --user=root --password=123 --no-timestamp --incremental /test/inc1 --incremental-basedir=/test/full
增量备份完,此时目录中应该有两个备份文件
[root@db01 ~]# ll /test
drwxr-x--- 6 root root 206 Jun 5 21:04 full
drwxr-x--- 6 root root 232 Jun 5 21:12 inc1
接下来模拟第二天数据变化:
3306 [test1]>create table t3 (id int);
Query OK, 0 rows affected (0.01 sec)
3306 [test1]>insert into t3 values(1),(2),(3);
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
3306 [test1]>show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| t1 |
| t2 |
| t3 |
+-----------------+
3 rows in set (0.00 sec)
进行第二天增量备份:此次的增量备份,就要依赖inc1进行增量
[root@db01 ~]# innobackupex --user=root --password=123 --no-timestamp --incremental /test/inc2 --incremental-basedir=/test/inc1
[root@db01 ~]# ll /test
total 0
drwxr-x--- 6 root root 206 Jun 5 21:04 full
drwxr-x--- 6 root root 232 Jun 5 21:12 inc1
drwxr-x--- 6 root root 232 Jun 5 21:27 inc2
进行模拟第三天数据:但此次不进行增量备份
3306 [test1]>create table t4 (id int);
Query OK, 0 rows affected (0.02 sec)
3306 [test1]>insert into t4 values(1),(2),(3);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 03306 [test1]>show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| t1 |
| t2 |
| t3 |
| t4 |
+-----------------+
4 rows in set (0.00 sec)
目前,我们有一个全备,两个增量备份,和二进制日志,恢复前请 一定要注意!!!
3306 [test1]>create table t2 (id int); Query OK, 0 rows affected (0.01 sec) 3306 [test1]>insert into t2 values(1),(2),(3); Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 03306 [test1]>show tables; +-----------------+ | Tables_in_test1 | +-----------------+ | t1 | | t2 | +-----------------+ 2 rows in set (0.00 sec)
进行第一天的增量备份:两个参数,指定增量备份文件路径名字,和以哪个备份为基础进行增量备份
[root@db01 ~]# innobackupex --user=root --password=123 --no-timestamp --incremental /test/inc1 --incremental-basedir=/test/full
增量备份完,此时目录中应该有两个备份文件
[root@db01 ~]# ll /test
drwxr-x--- 6 root root 206 Jun 5 21:04 full
drwxr-x--- 6 root root 232 Jun 5 21:12 inc1
接下来模拟第二天数据变化:
3306 [test1]>create table t3 (id int);
Query OK, 0 rows affected (0.01 sec)
3306 [test1]>insert into t3 values(1),(2),(3);
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
3306 [test1]>show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| t1 |
| t2 |
| t3 |
+-----------------+
3 rows in set (0.00 sec)
进行第二天增量备份:此次的增量备份,就要依赖inc1进行增量
[root@db01 ~]# innobackupex --user=root --password=123 --no-timestamp --incremental /test/inc2 --incremental-basedir=/test/inc1
[root@db01 ~]# ll /test
total 0
drwxr-x--- 6 root root 206 Jun 5 21:04 full
drwxr-x--- 6 root root 232 Jun 5 21:12 inc1
drwxr-x--- 6 root root 232 Jun 5 21:27 inc2
进行模拟第三天数据:但此次不进行增量备份
3306 [test1]>create table t4 (id int);
Query OK, 0 rows affected (0.02 sec)
3306 [test1]>insert into t4 values(1),(2),(3);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 03306 [test1]>show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| t1 |
| t2 |
| t3 |
| t4 |
+-----------------+
4 rows in set (0.00 sec)
目前,我们有一个全备,两个增量备份,和二进制日志,恢复前请 一定要注意!!!
3306 [test1]>create table t3 (id int); Query OK, 0 rows affected (0.01 sec) 3306 [test1]>insert into t3 values(1),(2),(3); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0 3306 [test1]>show tables; +-----------------+ | Tables_in_test1 | +-----------------+ | t1 | | t2 | | t3 | +-----------------+ 3 rows in set (0.00 sec)
进行第二天增量备份:此次的增量备份,就要依赖inc1进行增量
[root@db01 ~]# innobackupex --user=root --password=123 --no-timestamp --incremental /test/inc2 --incremental-basedir=/test/inc1
[root@db01 ~]# ll /test
total 0
drwxr-x--- 6 root root 206 Jun 5 21:04 full
drwxr-x--- 6 root root 232 Jun 5 21:12 inc1
drwxr-x--- 6 root root 232 Jun 5 21:27 inc2
进行模拟第三天数据:但此次不进行增量备份
3306 [test1]>create table t4 (id int);
Query OK, 0 rows affected (0.02 sec)
3306 [test1]>insert into t4 values(1),(2),(3);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 03306 [test1]>show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| t1 |
| t2 |
| t3 |
| t4 |
+-----------------+
4 rows in set (0.00 sec)
目前,我们有一个全备,两个增量备份,和二进制日志,恢复前请 一定要注意!!!
1.增量不能单独备份
2.增量必须按照顺序合并到全备中
3.所有备份必须进行apply-log
4.除了最后一个增量备份文件,其他的必须进行redo,一定不能undo,
下面我们开始实际操作一下
先csr第一个全备
[root@db01 ~]# innobackupex --apply-log --redo-only /test/full
合并与整理inc1
[root@db01 ~]# innobackupex --apply-log --redo-only --incremental-dir=/test/inc1 /test/full
合并与整理inc2,因为inc2是最后一个增量,所以不用加--redo-only
[root@db01 ~]# innobackupex --apply-log --incremental-dir=/test/inc2 /test/full
进行全备最终整理
[root@db01 ~]# innobackupex --apply-log /test/full
到此备份文件已整理好,接下来截取日志文件
判断日志起点
[root@db01 test]# cat inc2/xtrabackup_binlog_info
mysql-bin.000001 1619 8d397b30-8791-11e9-acbd-000c2902fc28:1-7
因为是包含1-7,所以起点是8
判断终点
3306 [(none)]> show binlog events in 'mysql-bin.000001';
mysql-bin.000001 | 2049 | Gtid | 6 | 2114 | SET @@SESSION.GTID_NEXT= '8d397b30-8791-11e9-acbd-000c2902fc28:10'
终点是10
截取:
[root@db01 test]# mysqlbinlog --skip-gtids --include-gtids='8d397b30-8791-11e9-acbd-000c2902fc28:8-10' /data/binlog/mysql-bin.000001 >/test/bin.sql
[root@db01 test]# ll
total 8
-rw-r--r-- 1 root root 2500 Jun 5 22:23 bin.sql
drwxr-x--- 6 root root 4096 Jun 5 22:17 full
drwxr-x--- 6 root root 262 Jun 5 22:14 inc1
drwxr-x--- 6 root root 262 Jun 5 22:15 inc2
最终将全备full下面的文件cp到新环境的datadir下
[root@db01 test]# cp -a /test/full/* /data/3307/data/
启动数据库
chown -R mysql.mysql /data
systemctl start mysqld3307.service
进入数据库恢复日志数据
source /test/bin.sql
至此!所有数据恢复成功,谢谢
[root@db01 ~]# innobackupex --apply-log --redo-only --incremental-dir=/test/inc1 /test/full
合并与整理inc2,因为inc2是最后一个增量,所以不用加--redo-only
[root@db01 ~]# innobackupex --apply-log --incremental-dir=/test/inc2 /test/full
进行全备最终整理
[root@db01 ~]# innobackupex --apply-log /test/full
到此备份文件已整理好,接下来截取日志文件
判断日志起点
[root@db01 test]# cat inc2/xtrabackup_binlog_info
mysql-bin.000001 1619 8d397b30-8791-11e9-acbd-000c2902fc28:1-7
因为是包含1-7,所以起点是8
判断终点
3306 [(none)]> show binlog events in 'mysql-bin.000001';
mysql-bin.000001 | 2049 | Gtid | 6 | 2114 | SET @@SESSION.GTID_NEXT= '8d397b30-8791-11e9-acbd-000c2902fc28:10'
终点是10
截取:
[root@db01 test]# mysqlbinlog --skip-gtids --include-gtids='8d397b30-8791-11e9-acbd-000c2902fc28:8-10' /data/binlog/mysql-bin.000001 >/test/bin.sql
[root@db01 test]# ll
total 8
-rw-r--r-- 1 root root 2500 Jun 5 22:23 bin.sql
drwxr-x--- 6 root root 4096 Jun 5 22:17 full
drwxr-x--- 6 root root 262 Jun 5 22:14 inc1
drwxr-x--- 6 root root 262 Jun 5 22:15 inc2
最终将全备full下面的文件cp到新环境的datadir下
[root@db01 test]# cp -a /test/full/* /data/3307/data/
启动数据库
chown -R mysql.mysql /data
systemctl start mysqld3307.service
进入数据库恢复日志数据
source /test/bin.sql
至此!所有数据恢复成功,谢谢
判断日志起点 [root@db01 test]# cat inc2/xtrabackup_binlog_info mysql-bin.000001 1619 8d397b30-8791-11e9-acbd-000c2902fc28:1-7 因为是包含1-7,所以起点是8
判断终点 3306 [(none)]> show binlog events in 'mysql-bin.000001'; mysql-bin.000001 | 2049 | Gtid | 6 | 2114 | SET @@SESSION.GTID_NEXT= '8d397b30-8791-11e9-acbd-000c2902fc28:10' 终点是10
截取: [root@db01 test]# mysqlbinlog --skip-gtids --include-gtids='8d397b30-8791-11e9-acbd-000c2902fc28:8-10' /data/binlog/mysql-bin.000001 >/test/bin.sql [root@db01 test]# ll total 8 -rw-r--r-- 1 root root 2500 Jun 5 22:23 bin.sql drwxr-x--- 6 root root 4096 Jun 5 22:17 full drwxr-x--- 6 root root 262 Jun 5 22:14 inc1 drwxr-x--- 6 root root 262 Jun 5 22:15 inc2
最终将全备full下面的文件cp到新环境的datadir下 [root@db01 test]# cp -a /test/full/* /data/3307/data/ 启动数据库 chown -R mysql.mysql /data systemctl start mysqld3307.service 进入数据库恢复日志数据 source /test/bin.sql
至此!所有数据恢复成功,谢谢