mysql 5.6 使用传输表空间迁移表或恢复误删除的表

mysql 5.6 使用传输表空间迁移表或恢复误删除的表

http://blog.csdn.net/lidan3959/article/details/25152623

以前在网上也看过一些对5.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

mysql 5.6 使用传输表空间迁移表或恢复误删除的表

时间: 2024-10-12 22:41:32

mysql 5.6 使用传输表空间迁移表或恢复误删除的表的相关文章

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 si

使用传输表空间迁移数据

一.检查是否满足传输表空间的条件1.检查源库与目标库的平台支持 源库: SQL> select d.name,i.version,d.platform_name,endian_format from v$transportable_platform tp,v$database d,v$instance i 2 where tp.PLATFORM_NAME=d.platform_name; NAME VERSION PLATFORM_NAME ENDIAN_FORMAT --------- ---

oracle表空间迁移

1.创建一个新的表空间 newspaces (原来的表空间oldspaces) 2.从原来的表空间里面导出数据(test.dmp),然后在新的表空间里面导入之前导出的数据(test.dmp),选择从用户到用户的方式导入 3.执行下面这个SQL: select 'alter table ' ||table_name || ' move tablespace 目标表空间名称;' from user_all_tables 将结果集导出,然后在导出的文件里面把查询拼接的SQL全部复制到plsql里面执行

不同类型的数据跨表空间迁移的解决办法

http://blog.csdn.net/passion_wang/article/details/6541369 Oracle10g数据跨表空间迁移 因某些开发人员由于对oracle数据库理解的不够深入,往往在建表的时候指定了当前用户非默认的表空间,这样就导致了在exp及imp等操作时候问题很多,因此需要将这些表及相关的数据迁移回当前用户的默认表空间里.Oracle10g数据数据库提供了一个Move命令可以把这样的数据对象进行跨表空间的迁移,也可以对含有BLOB.CLOB这样的二进制大字段的表

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

--UNDO表空间汇总 --查看全部的表空间名字 SELECT NAME FROM V$TABLESPACE; --创建新的UNDO表空间,并设置自己主动扩展參数; CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\UNDOTBS02.DBF' SIZE 10M REUSE AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED; --注意:在OPEN状态下某

关于ORALCE一个表空间的数据导入到另一个表空间的方法(原创)

用户:   whnaproject     所属表空间: whnaproject 新用户   : wniec            所属新表空间: wniec 要求:将用户whnaproject中的数据库表以及数据 ,全部复制到 新表空间wniec的  wniec用户中. 常规过程:用exp命令把用户whnaproject的表及数据导出,然后用IMP命令把导出的表及数据导入到新用户wniec中. 存在问题:用户whnaproject的表及数据可以导入到新用户wniec中,但wniec中的导入的表

SYSTEM 表空间管理及备份恢复

标签: systemoraclesqldatabasefile数据库 2010-11-28 18:14 12689人阅读 评论(0) 收藏 举报 分类: -----Oracle备份恢复(16) 版权声明:本文为博主原创文章,欢迎扩散,扩散请务必注明出处. --============================= -- SYSTEM 表空间管理及备份恢复 --============================= SYSTEM表空间是Oracle数据库最重要的一个表空间,存放了一些DDL

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

今天在查数据的时候报错  ORA-01652:无法通过16(在表空间temp1中)扩展 temp 字段 查看表空间使用明细 SELECT b.tablespace, b.segfile#, b.segblk#, b.blocks, b.blocks * 32 / 1024 / 1024, a.sid, a.serial#, a.username, a.osuser, a.status, c.sql_text, b.contents FROM v$session a, v$sort_usage b

oracle表空间查询维护命令大全之一(数据表空间)史上最全

表空间是数据库的逻辑划分,一个表空间只能属于一个数据库.所有的数据库对象都存放在建立指定的表空间中.但主要存放的是表, 所以称作表空间.在oracle 数据库中至少存在一个表空间,即SYSTEM的表空间.一个表空间可以包含多个段,以及区,以及最小的块,同时也可以包含多个数据文件(物理结构). oracle 可以根据表空间对相关的用户配额以及磁盘空间都有极大的保护作用,而且还可以灵活的存放,同时也可以把不同的数据文件分开存放,保证不同数据文件的安全行. 所以在一般数据创建后,就会创建相关的表空间,