mysql5.6之 传输表空间迁移表或恢复误删除的表
一,简单说明:
1),传输表空间的限制:
1,mysql 版本 5.6.6 及其以上,并且版本建议源和目标版本建议都是GA版并且大版本一样
2,表引擎为innodb并且开启独立表空间 innodb_file_per_table
3,处于导出状态的表只允许读也即是”read_only“状态
4,DISCARD TABLESPACE不支持分区表[5.6.17才支持] 并且当表上具有外键关系的时候需要将 foreign_key_check设置为0
5,源和目标实例的page size 必须大小一致
6,ALTER TABLE ... IMPORT TABLESPACE 不强制进行外键约束检查,所以需要将主表和子表都导出,然后在目标实例导入,
另外该操作不需要.cfg 元数据文件,当然如果没有改文件在导入的时候是不做元数据检查的
7,在windows上,innodb引擎内部都是以小写格式存储数据库,表名和表空间名,故为了避免导入因为大小写出现文件建议在大小写敏感, 如linux、unix的操作系统上都以小写的格式创建数据库和表同时在[mysqld]项下 添加
[mysqld]
lower_case_table_names=1
2),传输表空间的优点:
1,不需要消耗太多的资源
2,很方便的将表 从一个实例迁移到另一个实例
3,相对于mysqldump来说你无须导出然后导入同时还的维护索引
二,正常的表空间迁移
1, 源数据库:
use test;
create table lidan(id int) engine=innodb;
insert into lidan values(10);
2,目标数据库:
use test;
create table lidan(id int) engine=innodb;
insert into lidan values(10);
3,目标数据库卸载表空间:
ALTER TABLE lidan DISCARD TABLESPACE;
卸载表空间后lidan.ibd 文件和表空间分离并且会对表加一个排他锁,此时如果执行dml则会直接报错如图:
4,源数据执行表空间导出:
use test;
FLUSH TABLES lidan FOR EXPORT;
flush操作会触发表lidan的dirty page刷新到磁盘,并且stop purge 线程,同时将元数据信息写入lidan.cfg 如图:
元数据文件存储的信息如下:
主要就是一些数据库和表名、row_id 、回滚指针、事物id等
该会话会一直持有表lidan的metadata锁,故此时其他会话只能进行SELECT二更新和插入操作会被阻塞 。
如图:
5,将导出的表(源数据库)所在数据文件目录下对应的lidan.ibd file和lidan.cfg 拷贝到目标数据库对应的文件夹下
cp -p lidan.cfg lidan.ibd /data/percona-data-3307/test/
注意:文件的拷贝必须在下一步释放metadata lock 之前
6,释放源数据库的metadata lock
use test;
unlock table;
unlock 这一步会删除之前生成的lidan.cfg文件,同时释放metadata lock 并且重新启动purge 线程
7,目标数据库将表导入到表空间
alter table lidan import tablespace;
然后查看导入成功如图:
导入的过程mysql内部会做如下事情:
a,检查表空间每个page的一致性
b,更新每个page的space id和lsn的信息
c,启用头部页标记和更新LSN到头部页
d,page 状态信息设置为dirty ,这样page将很快会被刷新到磁盘
具体如图
三,误删除情况下的恢复
这里只讨论备库误删除的恢复,如果是主库误删表那只能通过备份来恢复了
1,首先备库上执行drop操作,模拟误删除
(user:root time: 16:37 port: 3307)[db: test]drop table lidan;
2,备库恢复必须要有.frm文件,故这里需要从源库查看表结构然后在目标库创建
create table lidan(id int) engine=innodb;
接下来的步骤就按照(二)当中从3开始做即可,具体请自行测试。
参考:
http://dev.mysql.com/doc/refman/5.6/en/flush.html
http://dev.mysql.com/doc/refman/5.6/en/tablespace-copying.html
转:http://blog.csdn.net/lidan3959/article/details/25152623
mysql5.6之 传输表空间迁移表或恢复误删除的表的更多相关文章
- 使用MySQL传输表空间迁移数据
对于大表的迁移,如果使用mysqldump进行导出,然后重新导入到其它环境,速度是非常缓慢的.如果使用传输表空间,则可以解决这个问题. 测试使用传输表空间迁移表,基础环境如下: 源库 目标库 IP ...
- mysql 案例 ~ 表空间迁移数据与数据导入
一 简介:mysql5.6+的表空间传输二 目的:复制数据到另一个表三 步骤 1 create table b like a ->创建一个空表 2 alter table b disc ...
- oracle暂时表空间 ORA-01652:无法通过16(在表空间XXX中)扩展 temp 字段
今天在查数据的时候报错 ORA-01652:无法通过16(在表空间temp1中)扩展 temp 字段 查看表空间使用明细 SELECT b.tablespace, b.segfile# ...
- oracle表空间查询维护命令大全之三(暂时表空间)史上最全
--UNDO表空间汇总 --查看全部的表空间名字 SELECT NAME FROM V$TABLESPACE; --创建新的UNDO表空间,并设置自己主动扩展參数; CREATE UNDO TABLE ...
- SYSTEM 表空间管理及备份恢复
标签: systemoraclesqldatabasefile数据库 2010-11-28 18:14 12689人阅读 评论(0) 收藏 举报 分类: -----Oracle备份恢复(16) 版权声 ...
- 如何通过RMAN使用传输表空间迁移到不同的Endian平台 (Doc ID 371556.1)
How to Migrate to different Endian Platform Using Transportable Tablespaces With RMAN (Doc ID 371556 ...
- RMAN传输表空间迁移数据
实验环境: 源数据库:oracle 10g(Release 10.2.0.1.0) 目标数据库:oracle 10g(Release 10.2.0.1.0) 待传输的表空间:TEST 1.在tes ...
- Oracle 表空间迁移
迁移表空间databump 使用databump导入导出,两个库用户必须一致,否则另一个库导入的时候会报错.所以两个库都是用helei用户. 给两个数据库的用户分别授予dba权限,这里只是实验更清晰而 ...
- Oracle表空间迁移Move Tablespace
move一个表到另外一个表空间时,索引不会跟着一起move,而且会失效.(LOB类型例外) move分为: *普通表move *分区表move *LONG,LOB大字段类型move来进行测试和说明. ...
随机推荐
- 三 ip dns等配置
一IP.端口.协议基本概念 ip的简单概念 互联网上的计算机,都会有一个唯一的32位的地址,ip地址 我们访问服务器,就必须通过ip地址 局域网里也有预留的ip地址 192/10/172.居于王的i ...
- constexpr与指针
一. 常量表达式:是指值不会改变并且在编译过程就能得到的计算结果的表达式. 定义常量表达式变量: constexpr 变量类型 变量名: 例如: constexpr int mf=20://///20 ...
- POJ 1144 无向图求割点
学长写的: #include<cstdio>#include<cstdlib>#include<cmath>#include<iostream>#in ...
- 1.mysql导论
虽然之前用过mysql一年多,但大多只是会用,深入了解的不多.所以想利用平时时间 系统的总结总结. 一.什么是数据库:(数据库软件) 1).什么是数据库(软件):数据库(DB:DataBase ...
- git checkout cannot stat permission denied
https://stackoverflow.com/questions/5970879/git-rebase-error-cannot-stat-file-permission-denied 退出vi ...
- js数组的操作方法
es5中新添加的方法比如map,reduce之类的
- PyCharm 的初始设置2 - 打开、新建项目
03. 新建/打开一个 Python 项目 3.1 项目简介 开发 项目 就是开发一个 专门解决一个复杂业务功能的软件 通常每 一个项目 就具有一个 独立专属的目录,用于保存 所有和项目相关的文件 – ...
- mysql中使用instr替换like
使用内部函数instr,可代替传统的like方式查询,并且速度更快. instr函数,第一个参数是字段,第二个参数是要查询的串,返回串的位置,第一个是1,如果没找到就是0. 实例: SELECT o. ...
- java:OutputStream和InputStream 输出输入流,FileOutputStream,FileInputStream写入读取流
1.在java中stream代表一种数据流(源),javaio的底层数据元,---(想像成水龙头)2.任何有能力产生数据流(源)的javaio对象就可以看作是一个InputStream对象既然它能产生 ...
- 自己动手写一个U盘拷贝小工具
这是五一期间,参照知乎上一篇的文章<十行代码--用python写一个USB病毒>写成的,最初只是单纯的想写成死循环,直到文件占满硬盘为止,第一个遇到的问题是,拷贝到硬盘之后,由于要无限次拷 ...