从mysql5.6版本开始,引入了表空间传输的功能。可以把一张表从一个数据库移动到另一个数据库中或者另一台机器上。使用该功能必须满足如下条件:
- Mysql版本必须是5.6及以上
- 使用独立表空间方式,现在版本默认开启innodb_file_per_table
- 源库和目标库的page size必须一致
- 当表做导出操作时,该表只能进行只读操作
案例:把测试数据库test库下的表test移动到mysql数据库下面。
首先需要在mysql库下面创建表test,表结构和test库下面的表test一致。
可以在数据目录下面的mysql库目录下看到有test.ibd文件生成。如下图所示:
接下来需要卸载mysql库test表的表空间
mysql> alter table test discard tablespace;
结果就会发现刚才在mysql库目录下的test.ibd文件没有了。
接着需要在test库下执行表空间导出的操作
mysql>flush table test for export;
导出完成后,会发先test库目录下多了一个test.cfg文件,
将目录下的test.cfg文件和test.ibd文件复制到mysql库目录下面。并且修改mysql权限。
cp test.{cfg,ibd} /var/lib/mysql/mysql/
cd /var/lib/mysql/
chown mysql:mysql -R mysql/
因为目前是只读状态,需要解锁:
mysql> unlock tables;
最后在mysql库下面执行表空间导入操作:
mysql> alter table test import tablespace;
最后发现,mysql库下面的test表里面已经存在数据了。