签到成功

知道了

CNDBA社区CNDBA社区

Mysql 传输表空间--将InnoDB表分区复制到另一个实例(三)

2018-04-10 23:45 1879 0 原创 mysql
作者: leo

说明:实验环境是mysql5.7.17
这个过程演示了如何从运行的MySQL服务器实例复制InnoDB表分区到另一个正在运行的实例。在相同的实例中,使用较小的调整的相同过程可以用来执行InnoDB表分区的恢复。在下面的例子中,一个带有四个分区(p0、p1、p2、p3)的分区表在源实例上创建。两个分区(p2和p3)被复制到目标实例。http://www.cndba.cn/cndba/leo1990/article/2716http://www.cndba.cn/cndba/leo1990/article/2716

http://www.cndba.cn/cndba/leo1990/article/2716
http://www.cndba.cn/cndba/leo1990/article/2716
http://www.cndba.cn/cndba/leo1990/article/2716
http://www.cndba.cn/cndba/leo1990/article/2716
http://www.cndba.cn/cndba/leo1990/article/2716
http://www.cndba.cn/cndba/leo1990/article/2716
http://www.cndba.cn/cndba/leo1990/article/2716http://www.cndba.cn/cndba/leo1990/article/2716

在源实例上,如果不存在的话,创建一个分区表

在源实例上,如果不存在的话,创建一个分区表。在下面的例子中,创建了一个带有四个分区(p0、p1、p2、p3)的表:
Mysql> use test
Database changed
mysql>  CREATE TABLE t1 (i int) ENGINE = InnoDB PARTITION BY KEY (i) PARTITIONS 4;
Query OK, 0 rows affected (0.17 sec)
在/data/mysql/data/test名录中,每个分区都有一个单独的表空间(.ibd)文件。
mysql> /! ls /data/mysql/data/test/
db.opt    t1.frm    t1#P#p0.ibd  t1#P#p1.ibd  t1#P#p2.ibd  t1#P#p3.ibd

在目标实例上,创建相同的分区表:

mysql> USE test;
Database changed
mysql> CREATE TABLE t1 (i int) ENGINE = InnoDB PARTITION BY KEY (i) PARTITIONS 4;
Query OK, 0 rows affected (0.13 sec)
在/data/mysql/test名录中,每个三个分区都有一个单独的表空间(.ibd)文件。
mysql> /! ls /data/mysql/data/test/
db.opt    t1.frm    t1#P#p0.ibd  t1#P#p1.ibd  t1#P#p2.ibd  t1#P#p3.ibd

在目标实例上,丢弃分区表的表空间

在目的地实例上,丢弃打算从源实例导入的表空间分区。(在目的地实例上可以导入表空间分区之前,必须丢弃附着在接收表上的相应分区。)
mysql> ALTER TABLE t1 DISCARD PARTITION p2, p3 TABLESPACE;
Query OK, 0 rows affected (0.02 sec)
只剩下p0,p1 分区
mysql> /! ls /data/mysql/data/test/
db.opt    t1.frm    t1#P#p0.ibd  t1#P#p1.ibd

在源实例上运行FLUSH TABLES … FOR EXPORT 锁定表并生成.cfg元数据文件

mysql> USE test;
Database changed
mysql>  FLUSH TABLES t1 FOR EXPORT;
Query OK, 0 rows affected (0.00 sec)
mysql> /! ls /data/mysql/data/test/
db.opt    t1.frm    t1#P#p0.cfg  t1#P#p0.ibd  t1#P#p1.cfg  t1#P#p1.ibd  t1#P#p2.cfg  t1#P#p2.ibd  t1#P#p3.cfg  t1#P#p3.ibd

将.ibd文件和.cfg元数据文件从源实例复制到目标实例

将.ibd和.cfg文件从源实例数据库目录拷贝到目标实例数据库目录。在本例中,仅为分区2(p2)和分区3(p3)的.ibd和.cfg文件复制到目标实例上的数据目录。分区0(p0)和分区1(p1)保留在源实例上。
[root@www.cndba.cn test]# cd /data/mysql/data/test/
[root@www.cndba.cn test]# scp t1#P#p2.ibd  t1#P#p2.cfg t1#P#p3.ibd t1#P#p3.cfg 192.168.1.33:/data/mysql/data/test/ 
[root@www.cndba.cn test]# chown mysql.mysql t1#P#p2.ibd  t1#P#p2.cfg t1#P#p3.ibd t1#P#p3.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 t1 IMPORT PARTITION p2, p3 TABLESPACE;
Query OK, 0 rows affected (0.14 sec)
mysql> select * from t1;
Empty set (0.00 sec)

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
leo

leo

关注

坚持你的坚持

  • 202
    原创
  • 0
    翻译
  • 39
    转载
  • 16
    评论
  • 访问:765373次
  • 积分:1270
  • 等级:核心会员
  • 排名:第8名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ