博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Innodb表空间迁移过程
阅读量:6872 次
发布时间:2019-06-26

本文共 2607 字,大约阅读时间需要 8 分钟。

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.frmy.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.cfgy.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. 直接复制数据文件和表结构文件

 

转载于:https://www.cnblogs.com/lbg-database/p/10109927.html

你可能感兴趣的文章
HTML5本地存储——IndexedDB(一:基本使用)
查看>>
Android Studio HelloWorld
查看>>
Windows命令点滴
查看>>
BZOJ-1040: [ZJOI2008]骑士 (树形DP)
查看>>
MS CRM 2011的自定义和开发(10)——CRM web服务介绍(第二部分)——IOrganizationService(二)...
查看>>
【Summary】ANSYS TRANSIENT ANALYSIS
查看>>
Unity3D性能优化--- 收集整理的一堆
查看>>
全面理解Unity加载和内存管理
查看>>
JMeter接口测试示例(二)
查看>>
swift -- 单例+ lazy懒加载 + 第三方库
查看>>
The Zen of Python, by Tim Peters
查看>>
SQL日期格式转换
查看>>
移动互联网下半场的面试真经,让你进入 BAT 不再是梦
查看>>
Windows 下 Hbuilder 真机调试(Android,iphone)
查看>>
async和await
查看>>
称霸Kaggle的十大深度学习技巧
查看>>
只需3步,即可将你的Chromium Edge 浏览器设置成中文
查看>>
【270】IDL处理GeoTIFF数据
查看>>
【071】我的博客园中的插件源码
查看>>
SQL Server 查看空间使用情况的 5 种方法
查看>>