其他分享
首页 > 其他分享> > InnoDB可传输表空间(transportable tablespace)

InnoDB可传输表空间(transportable tablespace)

作者:互联网

生产环境中,经常会遇到需要迁移表的情况,正常情况下都会使用mysqldump工具。但是mysqldump属于逻辑导入,需要通过SQL对数据进行导入,然后还要进行索引重建,当表的数据量非常大的时候,mysqldump的效率会非常低,耗时会很长。

此场景可以利用lnnodb的可传输表空间的特性,直接通过操作系统的复制命令拷贝表空间文件,可以快速迁移数据,提升效率。

前提条件

可传输表空间并不是总是可用,如果要利用这一特性,必须要满足以下条件:

迁移步骤

表空间导入是利用操作系统层面复制的原理,因此在目标实例不会自动创建表,所以我们要现在目标实例创建好表,然后丢弃原始表空间。再导入源实例的表空间,由此达到数据迁移的目的。

现在需要将表transportable_tbs,从数据库src_db迁移至数据库dest_db:

1. 首先在dest_db创建表,表的定义可以通过在src_db执行show create table获取

use dest_db;
CREATE TABLE `transportable_tbs` (
  `id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

2. dest_db,将刚创建好的表空间丢弃,注意discard tablespace不支持分区表,因此无法导入分区表。

use dest_db;
alter table transportable_tbs discard tablespace;

3. src_db,在源实例执行flush tables ... for export准备导出表空间,此操作会锁住表(共享锁)。

use src_db;
flush tables transportable_tbs for export;

执行完成后在表空间所在文件夹下会多出,一个cfg后缀的文件(表的元数据),将.ibd(数据文件)和.cfg(元数据文件)文件拷贝到目标实例表空间的文件夹下

 4. src_db, 拷贝完成后,源表因flush tables ... for export获得的锁就可以释放了,同时此命令也会删除刚才产生的.cfg文件。

use src_db;
unlock tables;

 5.dest_db,执行alter table ... import tablespace将刚才拷贝的表空间文件导入,并随便执行一个查询验证数据已经导入。

alter table transportable_tbs import tablespace;
select * from transportable_tbs;

以上即是表空间导入方式迁移表的步骤,flush tables生成的.cfg文件的作用的校验元数据,导入时没有这个文件也可以成功,只是会有一个警告(无验证导入):

Warning 1810 Error opening './dest_db/transportable_tbs.cfg', will attempt to import without schema verification

 

标签:dest,tbs,db,导入,tablespace,空间,InnoDB,transportable
来源: https://blog.csdn.net/frostlulu/article/details/122574152