-
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。