1118ALTER TABLE tabname DISCARD TABLESPACE快速导入数据利用表空间
-- 快速导入数据
如果你有.ibd文件的一个干净的备份,你可以按如下操作从被起源的地方恢复它到MySQL安装中:相当快速
1. 发出这个ALTER TABLE语句:
2. ALTER TABLE tbl_name DISCARD TABLESPACE;
警告:这个语句删除当前.ibd文件。
3. 把备份的.ibd文件放回到恰当的数据库目录。
4. 发出这个ALTER TABLE语句:
5. ALTER TABLE tbl_name IMPORT TABLESPACE;
MYSQL表空间迁移。
表空间迁移。
有如下原因你可能需要将INNODB表复制到不同的数据库服务器上。
不增加生产负载的情况下生成 一个报表
在一个新的服务器上建立一个和生产上数据相同的表
做一个备份在发生问题或错误操作时用于恢复
快速将数据从一个服务器迁移到另一个服务器
命令FLUSH TABLES ... FOREXPORT 使.ibd文件保持一致的状态。只有文件处于一致的状态我们才可以复制它。这个文件也会同时创建一个扩展名.cfg的二进制的文件。命令ALTER TABLE ...IMPORT TABLESPACE 会使用这个二进制文件对导入过程进行校验。
对于 MySQL 5.6.8版本, ALTER TABLE ...IMPORT TABLESPACE 命令不再一定需要一个扩展名为.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_table 一定要打开成 ON. 在共享表空间上的表不能使用这个特性。
当表处理静默状态时,只有只读语句可以使用这张表。
当导入表空间时,目的库的页尺寸要和源库的页尺寸相匹配。
DISCARD TABLESPACE 不支持分区表。如果你在分区表上使用命令 ALTER TABLE ... DISCARD TABLESPACE 你会看到如下错误: ERROR 1031 (HY000): 表引擎没有这个选项。
DISCARD TABLESPACE 命令不支持有父子关系的表。如果 FOREIGN_KEY_CHECKS 被设置成1. 在使用命令之前我们可以将这一参数设置为0. FOREIGN_KEY_CHECKS=0.
ALTER TABLE ... IMPORT TABLESPACE 命令在导入表时不会检查主外键关系。
如果是实时复制的时候, innodb_file_per_table 必需在主服务和从服务上设置为ON。