MySQL 表空間傳輸

聊到MySQL數據遷移的話題,表空間傳輸時一個很實用的方法。

在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實例遷移一個表空間到3308實例:

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;
相關文章
相關標籤/搜索