-
XI. XtraBackup工具详解 Part 11 使用innobackupex对部分备份进行恢复
tutorial11
-
-
Attachments
-
Changes
-
View Source
-
View
## 实验环境
此次实验的环境如下
- MySQL 5.7.26
- Redhat 6.10
- 操作系统账号:mysql
- 数据库备份账号:backup
上节我们说了如何进行部分备份,这部分我们说如何对其进行还原
关于还原部分备份,只有一个注意点,即不能使用传统的prepare和copy back命令,需要使用export和import的形式
## 1. prepare阶段
上节我们介绍了如何使用innobackupex对数据库进行部分备份
结束后我们得到了一个非一致性的备份文件,即需要对未提交的事务进行回滚对提交的事务进行前滚
这个过程在xtrabackup中叫做准备阶段(prepare stage)
对部分备份的数据文件需要加上--export选项
### 1.1 prepare 备份
使用--apply-log --export 进行恢复动作,相当于Oracle的recover动作
后面接部分备份的目录
如果内存有空闲,可使用--use-memory加快速度
```
innobackupex --apply-log --export --use-memory=1G /oradata/data/mysql/xtra/2019-11-06_10-39-58
```
在apply-log时候会有如下提示
[image:827 size:orig]
这是由于为备份这些表,需要从数据字典中删除
[image:828 size:orig]
这说明已经建立了用于import的文件了
结束后会出现如下提示
```
150806 01:01:57 InnoDB: Shutdown completed; log sequence number 1609228 150806 01:01:57 innobackupex: completed OK!
```
这时备份的文件会变成如下形式
[image:829 size:orig]
每张表新加了cfg和exp文件,这些是我们需要的
## 2. 导入表
### 2.1 创建相同结构的表
首先我们需要在新的服务器上建立与需要导入的表相同结构的表
**新服务器**
```
use test
CREATE TABLE `innodb_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`age` tinyint(3) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=innodb DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
```
### 2.2 破坏表空间
```
OTHERSERVER|mysql> ALTER TABLE test.innodb_table DISCARD TABLESPACE;
```
该命令会删除innodb_table的idb文件,frm文件还在
### 2.3 导入表
首先拷贝innodb_table的cfg,exp,ibd文件拷贝至数据库目录,即test目录下
```
OTHERSERVER|mysql> ALTER TABLE test.innodb_table IMPORT TABLESPACE;
```
[image:830 size:orig]
## 3. 参考资料
本专题所有内容翻译子Percona XtraBackup的官方文档
可通过如下链接下载
[http://www.zhaibibei.cn/mysql/xtrabackup/tutorial1](http://www.zhaibibei.cn/mysql/xtrabackup/tutorial1/)
[上一章](http://www.zhaibibei.cn/mysql/xtrabackup/tutorial10)
[下一章](http://www.zhaibibei.cn/mysql/xtrabackup/tutorial12)