表空间迁移。
有如下原因你可能需要将InnoDB表复制到不同的数据库服务器上。
- 不增加生产负载的情况下生成 一个报表
- 在一个新的服务器上建立一个和生产上数据相同的表
- 做一个备份在发生问题或错误操作时用于恢复
- 快速将数据从一个服务器迁移到另一个服务器
命令ʹ.ibd文件保持一致的状态。只有文件处于一致的状态我们才可以复制它。这个命令也会同时创建一个扩展名.cfg的二进制的文件。命令会使用这个二进制文件对导入过程进行校验。
对于版本命令不再一定需要一个扩展名为.cfg二进制文件了。但如果真的没有这个文件我们会收到下面这样一个警告。
Message:InnoDB: IO Read error: (2, No such file or directory) Error opening '.\
test\t.cfg',will attempt to import without schema verification
1row in set (0.00 sec)
这个特性有时候还是很有用的。比如,在模式不匹配的导入过程中,或者在一些需要恢复的情景下,元数据又不能从.ibd文件获得,则这个命令不需要一个扩展名为.cfg的二进制文件就可以导入的特性就很有用。
- innodb_file_per_tableON. 在共享表空间上的表不能使用这个特性。
- 当表处理静默状态时,只有只读语句可以使用这张表。
- 当导入表空间时,目的库的页尺寸要和源库的页尺寸相匹配。
- DISCARD TABLESPACE表引擎没有这个选项。
- DISCARD TABLESPACEforeign_key_checks1foreign_key_checks=0.
- innodb_file_per_tableON。
下面是一个实例的操作过程:
运行下面命令,生成一个cnf 文件
flush table t1 for export;
[root@centos test]# cp t1* bak/
对表解锁:
mysql> unlock tables;
删除 t1 表相关文件,frm 文件不会删掉
mysql> alter table t1 discard tablespace; Query OK, 0 rows affected (0.01 sec)
将刚才备份的文件进行还原:
[root@centos test]# cp ./bak/* ./ cp: overwrite `./t1.frm'? yes
执行import 操作:
mysql> alter table t1 import tablespace; Query OK, 0 rows affected (0.01 sec)
文章来源: MYSQL 表空间迁移