在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;