## 实验环境


此次实验的环境如下

- 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)