1.大致流程

将a实例的表的数据迁移到b实例上.

1.在目标实例b上创建一个相同的表

2.在目标库b上执行ALTER TABLE t DISCARD TABLESPACE;

3.在源库a上执行FLUSH TABLES t FOR EXPORT;生成.cfg文件

4.将.ibd文件和.cfg文件拷贝到目标实例b

5.在源库a执行unlock tables;

6.在目标库b执行ALTER TABLE t IMPORT TABLESPACE;

2.详细步骤

 
     1.在b实例上,创建a实例相同database和与表结构.(假设目标表是yy.y)
 b实例上: create database
yy;

在a实例上: show create table y;将建表语句复制到b实例use yy后并执行.  相应表文件是y.frm和y.ibd.

a实例上:

mysql> create database yy;
mysql> use yy;
mysql> create table y (name varchar(10),age int);
mysql> insert into y values ('yy.y',25);
mysql> insert into y values ('yy.y',26);
mysql> insert into y values ('yy.y',27);
 
b实例上:
mysql> create database yy;
mysql> use yy;
mysql> create table y (name varchar(10),age int);

 
  2.在b实例上: ALTER  TABLE
 y  DISCARD
TABLESPACE;

discard的意思就是从数据库detached,会删除ibd文件,保留frm文件。也就意味着,你可以对frm文件操作,比如:rename table,drop
table ,但是不能对ibd文件操作,比如:dml.

b实例上删除y表的数据文件:
[root@lbg2 ~]# cd /home/mysql3306/mysql3306/yy
[root@lbg2 yy]# ls
db.opt  y.frm  y.ibd
mysql> ALTER  TABLE 
y  DISCARD TABLESPACE;
[root@lbg2 yy]# ls
db.opt  y.frm
 
    3.在a实例上,FLUSH
 TABLES  y  FOR
EXPORT;
表y这时候处于quiesce状态,只读,且创建.cfg
metadata文件.

a实例上:

[root@master yy]# ls

db.opt 
y.frm  y.ibd

mysql> FLUSH 
TABLES  y  FOR EXPORT;

[root@master yy]# ls

db.opt 
y.cfg  y.frm  y.ibd

flush tables .. for
export 会加锁,这时候,千万不能退出终端或session,否则加锁无效且.cfg文件自动删除。

 
  4.将a实例中y.cfg和y.ibd拷贝到b实例对应位置.并在b上修改对应权限.

 在a实例:

[root@master yy]# scp y.cfg
root@192.168.88.9:/home/mysql3306/mysql3306/yy

[root@master yy]# scp y.ibd
root@192.168.88.9:/home/mysql3306/mysql3306/yy

在b实例:

[root@lbg2 yy]# ls

db.opt 
y.cfg  y.frm  y.ibd

[root@lbg2 yy]# chown -R mysql.mysql
/home/mysql3306/mysql3306/yy



   5.在实例a执行unlock
tables解锁;

a实例:

mysql> unlock tables;

执行unlock
tables 来释放FLUSH TABLES ... FOR
EXPORT 加的locks。

6.在实例b上导入tablespace: ALTER TABLE y IMPORT
TABLESPACE;

b实例:

mysql> ALTER TABLE y IMPORT
TABLESPACE;

mysql> select * from y;

+------+------+

| name | age  |

+------+------+

| yy.y | 
 25 |

| yy.y | 
 26 |

| yy.y | 
 27 |

+------+------+

完成表空间迁移。

说明:迁移数据会对表加锁.完成迁移后b实例下,依旧保留y.cfg,但解锁后,a实例下y.cfg自动删除.

 

3.innodb可传输表空间注意事项

必须开启 innodb_file_per_table

当这个表处于quiesced状态,甚至不能被select

两边实例的page size 一致

5.7 版本之前,不支持分区表transport外键相关的表,必须设置 foreign_key_checks=0 才能成功

ALTER TABLE ... IMPORT
TABLESPACE 不需要.cfg metadata file
. 但是,这样的话,MySQL就不会对schema进行verificate

5.6以及更高版本,import&export 版本必须在同一个series

在replication环境中,master &
slave 都必须开启 innodb_file_per_table

对于InnoDB general tablespace,不支持discard & import
tablespace

如果两边服务器的table row_format设置的不一样,会导致schema mismatch
error

加密过的InnoDB tablespace 必须要拷贝.cfp 文件

4.MyISAM表空间迁移

1. flush table with read lock

2. 直接复制数据文件和表结构文件

Innodb表空间迁移过程的更多相关文章

  1. Innodb 表空间传输迁移数据

    在mysql5.5之前,mysql实例中innodb引擎表的迁移是个头疼的问题,要么使用mysqldump导出,要么使用物理备份的方法,但是在mysql5.6之后的版本中,可以使用一个新特性,方便地迁 ...

  2. MySQL Innodb表空间不足的处理方法

    官方给出的解决方案: 添加和删除 InnoDB 数据和日志文件 这一节描述在InnoDB表空间耗尽空间之时,或者你想要改变日志文件大小之时,你可以做的一些事情. 最简单的,增加InnoDB表空间大小的 ...

  3. 10. InnoDB表空间加密

    10. InnoDB表空间加密 InnoDB支持存储在单独表空间中的表的数据加密 .此功能为物理表空间数据文件提供静态加密. 详细信息见官方文档

  4. ibd2sdi — InnoDB表空间SDI提取实用程序

    参考mysql8.0官方文档 https://dev.mysql.com/doc/refman/8.0/en/ibd2sdi.html ibd2sdi是一个实用程序,用于从表空间文件中提取 序列化的字 ...

  5. MySQL InnoDB表空间加密

    从 MySQL5.7.11开始,MySQL对InnoDB支持存储在单独表空间中的表的数据加密 .此功能为物理表空间数据文件提供静态加密.该加密是在引擎内部数据页级别的加密手段,在数据页写入文件系统时加 ...

  6. Innodb 表空间卸载、迁移、装载

    从MySQL的Innodb特性中我们知道,Inndob的表空间有共享和独享的特点,如果是共享的.则默认会把表空间存放在一个文件中(ibdata1),当开启独享表空间参数Innodb_file_per_ ...

  7. InnoDB表空间、段、区

    1. 表空间是InnoDB存储引擎逻辑结构的最高层,所有的数据都存放在表空间中.默认,InnoDB存储引擎只有一个表空间ibdata1,即所有数据都存放在这个表空间内.如果用户启用了参数innodb_ ...

  8. Innodb表空间

    Innodb有两种管理表空间的方法 独立表空间:每一张表都会生成独立的文件来进行存储,每一张表都有一个.frm表描述文件,和一个.ibd文件.其中ibd文件包括了单独一个表的数据内容和索引内容. 共享 ...

  9. 019:InnoDB 表空间内部组织结构

    一. 表空间内部组织结构 表空间 内部有多个段对象(Segment) 组成 每个段(Segment)由区(Extent) 组成 每个区(Extent)由页(Page)组成 每个页里面报存数据 (或者叫 ...

随机推荐

  1. Monkey常用操作

    原文:https://www.cnblogs.com/lauren1003/p/6193277.html 一.Monkey测试原理:Monkey是Android中的一个命令行工具,可以运行在模拟器里或 ...

  2. Android Jetpack从入门到精通(深度好文,值得收藏)

    前言 即学即用Android Jetpack系列Blog的目的是通过学习Android Jetpack完成一个简单的Demo,本文是即学即用Android Jetpack系列Blog的第一篇. 记得去 ...

  3. 【UR #13】Yist

    UOJ小清新题表 题目摘要 UOJ链接 给出一个排列 \(A\) 以及它的一个非空子序列 \(B\),给出一个 \(x\) 并进行若干次操作,每一次操作需要在 \(A\) 中选择一个长度恰好为 \(x ...

  4. Go 安装配置golint

    原文链接:http://zhoubotong.site/post/3.html一. Golint介绍 Golint 是一个源码检测工具用于检测代码规范 Golint 不同于gofmt, Gofmt用于 ...

  5. selenium 图片懒加载

    from selenium import webdriver options = webdriver.ChromeOptions() prefs = {} prefs['profile.managed ...

  6. this.属性

    this是属于一个具体对象的,而不是属于一个类的. 当你创建了一个对象时,this自动的给你带过来了. this只能在类定义的方法中使用,不能在类定义的外部使用. class Person { //成 ...

  7. AQS 自定义同步锁,挺难的!

    AQS是AbstractQueuedSynchronizer的简称. AbstractQueuedSynchronizer 同步状态 AbstractQueuedSynchronizer 内部有一个s ...

  8. javascript中的描述对象(Descriptor)获取和定义随笔

    最近再看了阮一峰的老师的ES6入门,发现一个有趣的东西,借此纪录以及整理下. 对象的每个属性都有一个描述对象(Descriptor),用来控制该属性的行为.Object.getOwnPropertyD ...

  9. OpenTelemetry架构介绍

    OpenTelemetry: 经得起考验的工具 摘自:https://blog.newrelic.com/product-news/what-is-opentelemetry/ 目录 OpenTele ...

  10. Viper 微服务框架 编写一个hello world 插件-02

    1.Viper是什么? Viper 是.NET平台下的Anno微服务框架的一个示例项目.入门简单.安全.稳定.高可用.全平台可监控.底层通讯可以随意切换thrift grpc. 自带服务发现.调用链追 ...