说明:实验环境是mysql5.7.17
这个过程演示了如何从运行的MySQL服务器实例复制一个普通的InnoDB表到另一个正在运行的实例。在相同的实例中,可以使用较小的调整来执行完整的表恢复。
在源实例上创建一个表
Mysql> use test
Database changed
Mysql> CREATE TABLE t(c1 INT) ENGINE=InnoDB;
Query OK, 0 rows affected (0.02 sec)
在目标实例创建一个相同表结构的表
Mysql> use test
Database changed
Mysql> CREATE TABLE t(c1 INT) ENGINE=InnoDB;
Query OK, 0 rows affected (0.01 sec)
在目标实例上,丢弃现有的表空间
(在可以导入表空间之前,InnoDB必须丢弃附着在接收表上的表空间。)
Mysql> ALTER TABLE t DISCARD TABLESPACE;
Query OK, 0 rows affected (0.01 sec)
[root@www.cndba.cn test]# ll
-rw-rw---- 1 mysql mysql 433 Apr 9 00:30 t.frm
在源实例上运行FLUSH TABLES … FOR EXPORT 锁定表并生成.cfg元数据文件
Mysql> use test
Database changed
Mysql> FLUSH TABLES t FOR EXPORT;
Query OK, 0 rows affected (0.03 sec)
[root@www.cndba.cn test]# ll
-rw-rw---- 1 mysql mysql 358 Apr 8 21:24 t.cfg
-rw-rw---- 1 mysql mysql 433 Apr 8 21:15 t.frm
-rw-rw---- 1 mysql mysql 98304 Apr 8 21:15 t.ibd
元数据(.cfg)是在InnoDB数据目录中创建的。
将.ibd文件和.cfg元数据文件从源实例复制到目标实例
[root@www.cndba.cn test]# scp /data/mysql/data/test/t.{ibd,cfg} 192.168.1.69:/data/mysql/test
[root@www.cndba.cn test]# chown mysql.mysql t.ibd t.cfg
在释放共享锁之前,必须先复制.ibd文件和.cfg文件
在源实例中解锁
使用解锁表来释放FLUSH TABLES ... FOR EXPORT:所获得的锁
Mysql> use test;
Database changed
Mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)
在目的地实例中,导入表空间
Mysql> use test
Database changed
Mysql> ALTER TABLE t IMPORT TABLESPACE;
Query OK, 0 rows affected (0.06 sec)
ALTER TABLE … IMPORT TABLESPACE特性并不强制对导入的数据施加外键约束。如果表之间有外键约束,那么所有表都应该在相同的(逻辑的)点上导出。在这种情况下,您将停止更新表,提交所有事务,在表上获得共享锁,然后执行导出操作。
版权声明:本文为博主原创文章,未经博主允许不得转载。