在MySQL 5.6 Oracle引入了一个可移动表空间的特征(复制的表空间到另外一个服务器)和Percona Server采用部分备份,这意味着你如今能够备份单个数据库或表;因为Percona Server 5.6的出现,innodb_import_table_from_xtrabackup是过期的Percona Server实现Oracle MySQL的可移动表空间的功能,就是在服务器之间复制的表空间的能力(table.ibd)。让我展现经过一个例子,我将采起选择性表部分备份而不是一个完整的MySQL服务器而且在线恢复它,而不须要关闭MySQL服务器mysql
3307 实例的表结构sql
root@localhost:mysql3307.sock [sbtest]>show create table sbtest1; +---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | Table | Create Table | +---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | sbtest1 | CREATE TABLE `sbtest1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `k` int(11) NOT NULL DEFAULT '0', `c` char(120) NOT NULL DEFAULT '', `pad` char(60) NOT NULL DEFAULT '', PRIMARY KEY (`id`), KEY `k_1` (`k`) ) ENGINE=InnoDB AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8 | +---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 row in set (0.00 sec)
把以上表结构在3308 实例建立 ,这里忽略数据库
在3308实例上discard 表空间bash
root@localhost:mysql3308.sock [sbtest]>alter table sbtest1 discard tablespace; Query OK, 0 rows affected (0.16 sec)
在3307实例上导出表空间服务器
root@localhost:mysql3307.sock [sbtest]>flush table sbtest1 for export;
能够看到,执行命令以后,innodb_buffer_pool中的脏页刷新到了磁盘。并产生了一个 cfg文件.
在命令执行以后,该表只能只读访问.
开启另一个终端,将该表的ibd文件,cfg文件,TRG文件(记录触发器信息)拷贝到目标实例的数据库中
而后源实例执行 unlock tables; spa
最后在目标端importblog
root@localhost:mysql3308.sock [sbtest]>alter table sbtest1 import tablespace;