Mysql 傳輸表空間--將InnoDB表複製到另一個實例(一)

說明:實驗環境是mysql5.7.17
這個過程演示瞭如何從運行的MySQL服務器實例複製一個普通的InnoDB表到另一個正在運行的實例。在相同的實例中,可以使用較小的調整來執行完整的表恢復。

在源實例上創建一個表

Mysql> use test
Database changed
Mysql> CREATE TABLE t(c1 INT) ENGINE=InnoDB;
Query OK, 0 rows affected (0.02 sec)

在目標實例創建一個相同表結構的表

Mysql> use test
Database changed
Mysql> CREATE TABLE t(c1 INT) ENGINE=InnoDB;
Query OK, 0 rows affected (0.01 sec)

在目標實例上,丟棄現有的表空間

(在可以導入表空間之前,InnoDB必須丟棄附着在接收表上的表空間。)
Mysql>  ALTER TABLE t DISCARD TABLESPACE;
Query OK, 0 rows affected (0.01 sec)
[[email protected] test]# ll
-rw-rw---- 1 mysql mysql 433 Apr  9 00:30 t.frm

在源實例上運行FLUSH TABLES … FOR EXPORT 鎖定表並生成.cfg元數據文件

Mysql> use test
Database changed
Mysql> FLUSH TABLES t FOR EXPORT;
Query OK, 0 rows affected (0.03 sec)
[[email protected] test]# ll
-rw-rw---- 1 mysql mysql   358 Apr  8 21:24 t.cfg
-rw-rw---- 1 mysql mysql   433 Apr  8 21:15 t.frm
-rw-rw---- 1 mysql mysql 98304 Apr  8 21:15 t.ibd
元數據(.cfg)是在InnoDB數據目錄中創建的。

將.ibd文件和.cfg元數據文件從源實例複製到目標實例

[[email protected] test]# scp /data/mysql/data/test/t.{ibd,cfg} 192.168.1.69:/data/mysql/test
[[email protected] test]# chown mysql.mysql t.ibd t.cfg
在釋放共享鎖之前,必須先複製.ibd文件和.cfg文件

在源實例中解鎖

使用解鎖表來釋放FLUSH TABLES ... FOR EXPORT:所獲得的鎖
Mysql> use test;
Database changed
Mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)

在目的地實例中,導入表空間

Mysql> use test
Database changed
Mysql> ALTER TABLE t IMPORT TABLESPACE;
Query OK, 0 rows affected (0.06 sec)

ALTER TABLE … IMPORT TABLESPACE特性並不強制對導入的數據施加外鍵約束。如果表之間有外鍵約束,那麼所有表都應該在相同的(邏輯的)點上導出。在這種情況下,您將停止更新表,提交所有事務,在表上獲得共享鎖,然後執行導出操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章