MySQL可傳輸表空間:將一個表從一個實例拷貝到另外一個實例

MySQL版本:5.7.23mysql

 

1.在源實例上,建立一個表(若是不存在):sql

mysql> USE abce;
mysql> CREATE TABLE t(c1 INT) ENGINE=InnoDB;
mysql> insert into t values(1);

 

2.在目標實例上,若是不存在表,請建立一個表:shell

mysql> USE abce;
mysql> CREATE TABLE t(c1 INT) ENGINE=InnoDB;

 

 

3.在目標實例上,discard現有表空間:數據庫

mysql> ALTER TABLE t DISCARD TABLESPACE;

執行這一步操做後,目標實例上會將t表的ibd文件刪除,只留下t.frm文件server

 

4.在源實例上,運行FLUSH TABLES ... FOR EXPORT以使錶停頓並建立.cfg元數據文件:blog

mysql> USE abce;
mysql> FLUSH TABLES t FOR EXPORT;

FLUSH TABLES ... FOR EXPORT語句可確保對錶的更改已刷新到磁盤,以便在實例運行時能夠進行二進制表拷貝。當運行FLUSH TABLES ... FOR EXPORT時,InnoDB在與表相同的數據庫目錄中生成一個.cfg文件。.cfg文件包含導入表空間文件時用於schema驗證的元數據。io

 

5.將.ibd文件和.cfg元數據文件從源實例複製到目標實例。 例如:class

shell> scp /path/to/datadir/abce/t.{ibd,cfg} destination-server:/path/to/datadir/abce

必須先拷貝.ibd文件和.cfg文件,而後釋放共享鎖,以下一步所述。select


6.在源實例上,使用UNLOCK TABLES釋放由FLUSH TABLES ... FOR EXPORT獲取的鎖:二進制

mysql> USE abce;
mysql> UNLOCK TABLES;

  

7.在目標實例上,導入表空間:

mysql> USE abce;
mysql> ALTER TABLE t IMPORT TABLESPACE;

  

8.目標驗證一下:

root@localhost:abce 03:45:49>select * from t;
+------+
| c1   |
+------+
|    1 |
+------+
1 row in set (0.01 sec)
相關文章
相關標籤/搜索