过程中,innobackupex会调用xtrabackup命令从数据字典中移除缺失的表,因此,会显示出许多关于“表不存在”类的警告信息。同时,也会显示出为备份文件中存在的表创建.exp文件的相关信息。
?
(3)还原部分备份
?
还原部分备份的过程跟导入表的过程相同。当然,也可以通过直接复制prepared状态的备份直接至数据目录中实现还原,不要此时要求数据目录处于一致状态。
?
案列演示:
?
?
?
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| jiaowu |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)
mysql> select * from jiaowu.tutor;
+------+---------------+--------+------+
| TID | Tname | Gender | Age |
+------+---------------+--------+------+
| 1 | ZhengYansheng | M | 25 |
| 2 | LiJian | M | 26 |
| 3 | OuYangyu | M | 27 |
| 4 | LuoChenghui | M | 25 |
| 5 | LiuYunbo | M | 25 |
| 6 | FuJian | M | 24 |
| 7 | LiMenglu | F | 23 |
| 8 | BaoYintu | M | 28 |
| 9 | WangYana | F | 25 |
| 11 | NULL | NULL | NULL |
| 12 | NULL | NULL | NULL |
| 13 | NULL | NULL | NULL |
| 21 | NULL | NULL | NULL |
| 22 | NULL | NULL | NULL |
| 23 | NULL | NULL | NULL |
+------+---------------+--------+------+
?
2、innobackupex进行备份
# innobackupex --user=root --password=123456 --databases='jiaowu' /opt/
?
3、准备并导入jiaowu表
# innobackupex --user=root --password=123456 --apply-log --export /opt/2015-03-18_22-46-47/
?
4、删除jiaowu数据库
# rm -rf /mydata/data/jiaowu
?
5、登陆数据库查看是否还存在jiaowu数据库
[root@localhost ~]# mysql -e 'show databases;'
+--------------------+
| Database ? ? ? ? ? |
+--------------------+
| information_schema |
| mysql ? ? ? ? ? ? ?|
| performance_schema |
| test |
+--------------------+
#jiaowu数据库不存在了
?
6、还原jiaowu数据库
# cp -a /opt/2015-03-18_22-46-47/jiaowu/ /mydata/data/
?
7、修改jiaowu权限
# chown -R mysql.mysql /mydata/data/jiaowu
?
8、再次查看jiaowu数据库是否存在
[root@localhost ~]# mysql -e 'use jiaowu;show tables;'
+------------------+
| Tables_in_jiaowu |
+------------------+
| tutor ? ? ? ? ? ?|
+------------------+
#jiaowu数据库已经被还原并且表tutor还在。成功!!!
?
八、导入或导出单张表
?
默认情况下,InnoDB表不能通过直接复制表文件的方式在mysql服务器之间进行移植,即便使用了innodb_file_per_table选项。而使用Xtrabackup工具可以实现此种功能,不过,此时需要“导出”表的mysql服务器启用了innodb_file_per_table选项(严格来说,是要“导出”的表在其创建之前,mysql服务器就启用了innodb_file_per_table选项),
并且“导入”表的服务器同时启用了innodb_file_per_table和innodb_expand_import选项。
?
(1)“导出”表
?
导出表是在备份的prepare阶段进行的,因此,一旦完全备份完成,就可以在prepare过程中通过--export选项将某表导出了:
# innobackupex --apply-log --export /path/to/backup
?
此命令会为每个innodb表的表空间创建一个以.exp结尾的文件,这些以.exp结尾的文件则可以用于导入至其它服务器。
?
(2)“导入”表
?
要在mysql服务器上导入来自于其它服务器的某innodb表,需要先在当前服务器上创建一个跟原表表结构一致的表,而后才能实现将表导入:
mysql> CREATE TABLE mytable (...) ?ENGINE=InnoDB;
?
然后将此表的表空间删除:
mysql> ALTER TABLE mydatabase.mytable ?DISCARD TABLESPACE;
?
接下来,将来自于“导出”表的服务器的mytable表的mytable.ibd和mytable.exp文件复制到当前服务器的数据目录,然后使用如下命令将其“导入”:
mysql> ALTER TABLE mydatabase.mytable ?IMPORT TABLESPACE;
?
案列演示:
?
1、查看表
mysql> use jiaowu;
Database changed
mysql> show tables;
+------------------+
| Tables_in_jiaowu |
+------------------+
| tutor ? ? ? ? ? ?|
+------------------+
1 row in set (0.00 sec)
?
2、修改表的存储引擎为InnoDB
mysql> alter table tutor engine=innodb;
Query OK, 15 rows affected (0.05 sec)
Records: 15 ?Duplicates: 0 ?Warnings: 0
?
3、innobacku