mysql的备份工具通常有 mysqldump ,mysqlpump(5.7后新特性)等备份工具,这里我们可以尝试使用表空间进行传递
方式是:拷贝数据文件+拷贝表空间 对应innodb引擎就是 ibd文件和cfg文件
执行此种方式的要求
(1)需要使用独立表空间,开启innodb_file_per_table参数; (2)在做表导出时,该表只允许读不允许写; (3)导入导出的数据data page size必须一样; (4)在 MySQL 5.7.4 之前的版本是不能对分区表做分区迁移; (5)使用外键的表,需要使用 set foreign_key_check=0强制忽略外键,否则不支持表空间的导入导出,分布表不支持外键表空间的导入导出;
下面举个例子进行说明
准备两个mysql,源+目标,同时进行建表命令,一个我们称呼为源mysql,一个称呼为目标mysql
create table first(id int,name char(16));
在源mysql中插入数据
insert into first values(1,'ni'),(2,'wo'),(3,'ta');
在目标mysql上面释放表空间
alter table first discard tablespace; #相当于删除了first.ibd文件,留下了 first.frm
此时你可以对 frm 文件操作,例如:rename table,drop table ,但是不能对 ibd 文件操作,比如:dml
验证结果:
select * from first;
ERROR 1814 (HY000): Tablespace has been discarded for table 'first'