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. SpringBoot+MongoDB实现物流订单系统

    码字不易,点赞收藏,养成习惯!原创作者公众号:bigsai.更多精彩期待与您分享!项目收录在github的MongoDB案例中,文章收录在回车课堂中如果没基础请看看前两篇(墙裂推荐)MongoDB从立 ...

  2. 解决Django本地接口不能跨域访问的问题

    1.安装django-cors-headers模块: pip install django-cors-headers 2.插入Django的APP配置中: # 修改settings.py中的INSTA ...

  3. HTML轮播(2)

    前言 现在在完成轮播的框架上进行扩展更多的功能,上下切换图片,以及添加动画滚动更加平滑过渡 CSS <style> #LB { width: 100%; height: 948px; ov ...

  4. 对于app监测root权限或者强制升级

    只做分享学习 以下方法对于大多数Root检测的App (不限于仅银行类App),均适用. 另,"主用户 + Island用户" 情况下: 如果App仅安装在 Island下,当绕不 ...

  5. 3号随笔,搭建web环境

    创建数据库可能会遇到的问题 数据库语法错误: 如果写错了就会报错. 搭建web项目,我采用了MVC结构搭建 模型层写数据包装,controller层写业务代码,service写数据库内容,创建之后就搭 ...

  6. 一些常见JAVA问题

    原文:https://blog.csdn.net/weiyongxuan/article/details/45920765 一.Java的异常的基类是java.lang.Throwable 二.守护线 ...

  7. HBase基础理论知识

    来源:第四章:大数据 の HBase 基础   本课主题 NoSQL 数据库介绍 HBase 基本操作 HBase 集群架构与设计介紹 HBase 与HDFS的关系 HBase 数据拆分和紧缩 引言 ...

  8. JUC---03Lock(一)ReentrantLock

    1.什么是锁 在以前实现多线程的同步操作时,都是添加synchronized关键字或者synchronized代码块:而锁实现提供了比使用同步方法和语句可以获得的更广泛的锁操作.它们允许更灵活的结构, ...

  9. eclipse之SSH配置hibernate【三】

    配置hibernate,没有和spring整合,可以看成独立的部分. 在src下创建hibernate配置文件,hibernate.cfg.xml.主要是sql连接相关配置. <?xml ver ...

  10. 冷饭新炒:理解断路器CircuitBreaker的原理与实现

    前提 笔者之前在查找Sentinel相关资料的时候,偶然中找到了Martin Fowler大神的一篇文章<CircuitBreaker>.于是花了点时间仔细阅读,顺便温习一下断路器Circ ...