快速將InnoDB表複製到另一個實例

此過程演示如何將常規InnoDB表從正在運行的MySQL服務器實例複製 到另一個正在運行的實例。可以使用具有微小調整的相同過程在同一實例上執行完整表還原。

在源實例上,創建一個表(如果不存在):

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

在目標實例上,創建一個表(如果不存在):

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

在目標實例上,放棄現有表空間。(在導入表空間之前, InnoDB必須丟棄附加到接收表的表空間。)

mysql> ALTER TABLE t DISCARD TABLESPACE;

在源實例上,運行 FLUSH TABLES ... FOR EXPORT以停頓表並創建.cfg元數據文件:

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

metadata(.cfg)在InnoDB數據目錄中創建 。
注意
該 FLUSH TABLES ... FOR EXPORT語句確保已將對指定表的更改刷新到磁盤,以便在實例運行時可以創建二進制表副本。當 FLUSH TABLES ... FOR EXPORT運行時, InnoDB產生了 .cfg在同一個數據庫的目錄表文件。該.cfg文件包含導入表空間文件時用於模式驗證的元數據。

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

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

注意
的.ibd文件和 .cfg文件必須釋放共享鎖之前如在下一步中所述被複制。

在源實例上,用於 UNLOCK TABLES釋放通過FLUSH TABLES ... FOR EXPORT以下方式獲取的鎖 :

mysql> USE test;
mysql> UNLOCK TABLES;

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

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

注意
該ALTER TABLE ... IMPORT TABLESPACE功能不會對導入的數據強制執行外鍵約束。如果表之間存在外鍵約束,則應在相同(邏輯)時間點導出所有表。在這種情況下,您將停止更新表,提交所有事務,獲取表上的共享鎖,然後執行導出操作。

注意:命令 ALTER TABLE t DISCARD TABLESPACE 會刪除數據文件,誤操作將嚴重的後果

參考文檔:可傳輸表空間示例

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