-
vm1> scp /data/mysql/test/tts.{ibd,cfg} user@vm2:/data/mysql/test
-
user@vm2's password:
-
tts.ibd 100% 92MB 46.0MB/s 00:02
-
tts.cfg 100% 380 0.4KB/s 00:00
-
⑤ 將mysql1的test.tts表做UNLOCK操作(此時可發現cfg文件已被刪除):
-
mysql1> UNLOCK TABLES;
-
Query OK, 0 rows affected (0.00 sec)
-
-
mysql1> \! du -sh /data/mysql/test/tts*
-
12K /data/mysql/test/tts.frm
-
92M /data/mysql/test/tts.ibd
⑥ 在vm2上將傳過來的ibd和cfg文件修改權限:
-
vm2> chown mysql:mysql /data/mysql/test/tts.{ibd,cfg}
⑦ 將上述ibd文件IMPORT到tts表中:
-
mysql2> ALTER TABLE tts IMPORT TABLESPACE;
-
Query OK, 0 rows affected (0.93 sec)
-
-
mysql2> SELECT count(*) FROM tts;
-
+----------+
-
| count(*) |
-
+----------+
-
| 524288 |
-
+----------+
-
1 row in set (0.94 sec)
至此,已經將mysql1實例上的tts表中數據快速地遷移到mysql2實例上了。
〇 上述幾個步驟的解釋:
操作②中的discard tablespace會在表上加上MDL鎖,刪除change buffer所有相關的緩存項,設置表元數據信息,標志tablespace為刪除狀態,重新生成表的id,保證基于表id的操作后續均會失敗,再將idb文件干掉,在②中的兩次du可以看到.idb文件已經被刪除了。這是一個十分危險的操作,慎重;此操作也會被記錄到binlog中,若在復制結構可能會有很大的影響,切記先臨時關閉binlog。