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)