默认情况下,innodb 不能通过直接复制表文件的方式在mysql服务器之间进行数据移植。即便你启用了innodb_per_table(每个表一个文件的选项),而使用xtrabackup 工具可以实现此种功能。前提是,你的数据库服务器启用了innodb_per_table 这个功能,就是说,在你创建表之前已经启用了这个选项,还有一个选项是innodb_expand_import
也需要启用这个选项
导出单张表:
导出单张表是在备份的基础上实现导出的,而不是直接导出。
是依赖于完全备份的,因此只能先做一次完全备份,才能导出单张表
导出单张表:
innobackupex --apply-log -export /path/to/save
这个命令会为每一个innodb表的表空间创建一个以 .exp结尾的文件。
这些 .exp 的文件可以用于导入其他数据库
导入表:
要在mysql服务器上导入来自于其他服务器的某个innodb表,需要先在当前服务器上创建一个与原来表结构相同的表确保创建的表存储引擎也是innodb,并且数据库也需要启用innodb_per_table和innodb_expand_import,才能实现导入
创建完一个新表之后,将表空间删除,再导入
删除表空间
alter table db_name.tb_name discard tablespace;
然后将刚才备份出来的以 .exp和.ibd结尾的文件,放到目标数据库的目录下面,并且命名和你刚才新建的表同样的名字,后缀仍然以 .exp 结束
导入:
alter table db_name.tb_name(就是你命名的.exp文件) import talbespace;