实验环境

此次实验的环境如下

  • 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时候会有如下提示

1.png

这是由于为备份这些表,需要从数据字典中删除

2.png

这说明已经建立了用于import的文件了

结束后会出现如下提示

150806 01:01:57 InnoDB: Shutdown completed; log sequence number 1609228 150806 01:01:57 innobackupex: completed OK!

这时备份的文件会变成如下形式

3.png

每张表新加了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;
4.png

3. 参考资料

本专题所有内容翻译子Percona XtraBackup的官方文档

可通过如下链接下载

http://www.zhaibibei.cn/mysql/xtrabackup/tutorial1

上一章

下一章