一,简单说明:

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之 传输表空间迁移表或恢复误删除的表的更多相关文章

  1. 使用MySQL传输表空间迁移数据

    对于大表的迁移,如果使用mysqldump进行导出,然后重新导入到其它环境,速度是非常缓慢的.如果使用传输表空间,则可以解决这个问题. 测试使用传输表空间迁移表,基础环境如下:   源库 目标库 IP ...

  2. mysql 案例 ~ 表空间迁移数据与数据导入

    一  简介:mysql5.6+的表空间传输二 目的:复制数据到另一个表三 步骤   1 create table b like a ->创建一个空表   2 alter table b disc ...

  3. oracle暂时表空间 ORA-01652:无法通过16(在表空间XXX中)扩展 temp 字段

    今天在查数据的时候报错  ORA-01652:无法通过16(在表空间temp1中)扩展 temp 字段 查看表空间使用明细 SELECT b.tablespace,        b.segfile# ...

  4. oracle表空间查询维护命令大全之三(暂时表空间)史上最全

    --UNDO表空间汇总 --查看全部的表空间名字 SELECT NAME FROM V$TABLESPACE; --创建新的UNDO表空间,并设置自己主动扩展參数; CREATE UNDO TABLE ...

  5. SYSTEM 表空间管理及备份恢复

    标签: systemoraclesqldatabasefile数据库 2010-11-28 18:14 12689人阅读 评论(0) 收藏 举报 分类: -----Oracle备份恢复(16) 版权声 ...

  6. 如何通过RMAN使用传输表空间迁移到不同的Endian平台 (Doc ID 371556.1)

    How to Migrate to different Endian Platform Using Transportable Tablespaces With RMAN (Doc ID 371556 ...

  7. RMAN传输表空间迁移数据

    实验环境: 源数据库:oracle 10g(Release 10.2.0.1.0) 目标数据库:oracle 10g(Release 10.2.0.1.0) 待传输的表空间:TEST 1.在tes ...

  8. Oracle 表空间迁移

    迁移表空间databump 使用databump导入导出,两个库用户必须一致,否则另一个库导入的时候会报错.所以两个库都是用helei用户. 给两个数据库的用户分别授予dba权限,这里只是实验更清晰而 ...

  9. Oracle表空间迁移Move Tablespace

    move一个表到另外一个表空间时,索引不会跟着一起move,而且会失效.(LOB类型例外) move分为: *普通表move *分区表move *LONG,LOB大字段类型move来进行测试和说明. ...

随机推荐

  1. 03_Hadoop简单介绍以及版本信息

    一.海量数据: 量:大.数目多,数据量到达PB.ZB级别,条目数到达几十亿条.百亿条 1)存储:分布式,集群的概念,管理(主节点.从节点),HDFS(HadoopDistributedFileSyst ...

  2. Vosio秘钥

    C2FG9-N6J68-H8BTJ-BW3QX-RM3B32NYF6-QG2CY-9F8XC-GWMBW-29VV8FJ2N7-W8TXC-JB8KB-DCQ7Q-7T7V3VXX6C-DN3HQ-3 ...

  3. linux音频 DAPM之二:audio paths与dapm kcontrol

    转:https://blog.csdn.net/wh_19910525/article/details/12749293 在用alsa_amixer controls时,除了我们之前提到的snd_so ...

  4. HTML如何禁止文本框输入

    禁止文本框输入有以下两种方法: 1,设置input为只读状态,代码如下: <input readonly="readonly" value="test1" ...

  5. Unity发布安卓后,安卓输入键盘字体白色

    项目里需要用到显示手机电池电量的,但是又不想写安卓,倒jar包,还要做配置,还要写IOS,好麻烦的说.一查,unity后期版本有这个API,索性就升级高版本的了.但是遇到个小问题,那就是安卓输入的时候 ...

  6. MongoDB快速入门(四)- 插入文档

    插入文档 将数据插入到MongoDB集合,需要使用MongoDB 的 insert() 方法. 语法 insert()命令的基本语法如下: >db.COLLECTION_NAME.insert( ...

  7. string 类(二)

    处理string对象中的字符: 在cctype头文件中定义了一组标准库函数来处理string对象中的字符,比如检查一个string对象是否包含空白,或者把string对象中的字母改成小写,再或者查看某 ...

  8. Linux 一键安装 webmin/virtualmin

    Webmin是一个可运行于Linux/freebsd的web界面的主机管理系统,而Virtualmin是一个基于Webmin的虚拟主机管理模块. webmin官方站: http://www.webmi ...

  9. eclipse异常关了,tomcat如何关

    eclipse异常关了,tomcat如何关 ? 1.bin文件夹下面有的shutdown.bat.双击即可! 2.在任务管理器里面关闭,看到javaw.exe关闭也行.            

  10. 虚拟机开启Linux时出现“我以复制虚拟机”、“我已移动虚拟机”

    当出现标题的情况时,并且网络出现状况时,可以尝试一下解决办法 首先用ifconfig -a命令调出现在的网卡驱动的名称和HWaddr地址,然后再编辑/etc/sysconfig/networking/ ...