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

說明:實驗環境是mysql5.7.17
這個過程演示瞭如何從運行的MySQL服務器實例複製InnoDB表分區到另一個正在運行的實例。在相同的實例中,使用較小的調整的相同過程可以用來執行InnoDB表分區的恢復。在下面的例子中,一個帶有四個分區(p0、p1、p2、p3)的分區表在源實例上創建。兩個分區(p2和p3)被複制到目標實例。

在源實例上,如果不存在的話,創建一個分區表

在源實例上,如果不存在的話,創建一個分區表。在下面的例子中,創建了一個帶有四個分區(p0、p1、p2、p3)的表:
Mysql> use test
Database changed
mysql>  CREATE TABLE t1 (i int) ENGINE = InnoDB PARTITION BY KEY (i) PARTITIONS 4;
Query OK, 0 rows affected (0.17 sec)
在/data/mysql/data/test名錄中,每個分區都有一個單獨的表空間(.ibd)文件。
mysql> /! ls /data/mysql/data/test/
db.opt    t1.frm    t1#P#p0.ibd  t1#P#p1.ibd  t1#P#p2.ibd  t1#P#p3.ibd

在目標實例上,創建相同的分區表:

mysql> USE test;
Database changed
mysql> CREATE TABLE t1 (i int) ENGINE = InnoDB PARTITION BY KEY (i) PARTITIONS 4;
Query OK, 0 rows affected (0.13 sec)
在/data/mysql/test名錄中,每個三個分區都有一個單獨的表空間(.ibd)文件。
mysql> /! ls /data/mysql/data/test/
db.opt    t1.frm    t1#P#p0.ibd  t1#P#p1.ibd  t1#P#p2.ibd  t1#P#p3.ibd

在目標實例上,丟棄分區表的表空間

在目的地實例上,丟棄打算從源實例導入的表空間分區。(在目的地實例上可以導入表空間分區之前,必須丟棄附着在接收表上的相應分區。)
mysql> ALTER TABLE t1 DISCARD PARTITION p2, p3 TABLESPACE;
Query OK, 0 rows affected (0.02 sec)
只剩下p0,p1 分區
mysql> /! ls /data/mysql/data/test/
db.opt    t1.frm    t1#P#p0.ibd  t1#P#p1.ibd

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

mysql> USE test;
Database changed
mysql>  FLUSH TABLES t1 FOR EXPORT;
Query OK, 0 rows affected (0.00 sec)
mysql> /! ls /data/mysql/data/test/
db.opt    t1.frm    t1#P#p0.cfg  t1#P#p0.ibd  t1#P#p1.cfg  t1#P#p1.ibd  t1#P#p2.cfg  t1#P#p2.ibd  t1#P#p3.cfg  t1#P#p3.ibd

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

將.ibd和.cfg文件從源實例數據庫目錄拷貝到目標實例數據庫目錄。在本例中,僅爲分區2(p2)和分區3(p3)的.ibd和.cfg文件複製到目標實例上的數據目錄。分區0(p0)和分區1(p1)保留在源實例上。
[[email protected] test]# cd /data/mysql/data/test/
[[email protected] test]# scp t1#P#p2.ibd  t1#P#p2.cfg t1#P#p3.ibd t1#P#p3.cfg 192.168.1.33:/data/mysql/data/test/ 
[[email protected] test]# chown mysql.mysql t1#P#p2.ibd  t1#P#p2.cfg t1#P#p3.ibd t1#P#p3.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 t1 IMPORT PARTITION p2, p3 TABLESPACE;
Query OK, 0 rows affected (0.14 sec)
mysql> select * from t1;
Empty set (0.00 sec)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章