mysql innodb 数据打捞(三)innodb 簇不连接页的扫描提取(计划)

操作系统簇大小一般是4K,而innoDB的页大小一般是16K,那么就有可能16K的页没有存储在连续的簇中,这样扫描软件就不会扫描出来这样的页面.为了解决这个问题,决定给软件增加半页扫描功能.

在第一次扫描的时候把所有页头部特征正确,但尾部特征不正确的页保存在单独的文件中,并生成一个非完整页信息列表文件.

第二次再扫描(开发一个专门的程序)时,根据非完整页信息列表,搜索可能的非完整页下半部分,并保存在另外的文件中,同时也生成一个下半部分的页页信息列表.

第三次,再做一个专门的程序,来组合成完整的页面,并验证页面的正确完整性,并把正确的页面保存在文件中.

第四次再用第一次的扫描程序对第三次生成的文件扫描,把页面再按INDEX_ID分类提取出来.

按这样的原理,理论上只要是只一个页面只存在于两个磁盘碎片中的都可以扫描提取出来.

时间: 2024-10-07 15:00:36

mysql innodb 数据打捞(三)innodb 簇不连接页的扫描提取(计划)的相关文章

mysql innodb 数据打捞(一)innodb 页面结构特征

如果文件系统损坏或意外删除了数据库文件,只要磁盘空间没有被覆盖,其实数据都还在磁盘的扇区中,还是可以恢复出来的,有些通用的文件恢复工具好象也可以恢复文件 ,但这里要研究的是在通用文件 恢复工具失效的时候. innodb文件是按页保存的,这为打捞工作提供了非常有利的条件,页面具有一些特征,我们可以根据页面特征来把数据页从磁盘中提取出来,也就是数据打捞. Innodb表空间的概念:表空间,数据文件的集合,在innodb就是idb文件集合.一个表空间可以有多个idb文件 组成:innodb会对数据文件

mysql innodb 数据打捞(二)innodb 页面打捞编程

有了页面的结构和特征,需要编程实现数据库页面的打捞工作: 为了方便windows and linux 的通用,计划做成C语言的控制台应用,并且尽量只用ansi c;关于多线程,计划做成多线程的程序,最好是一个线程读文件,一个线程计算与输出:关于线程库:选择pthead,多线程正是个头疼的事儿呀,undrop虽然也用了多线程,但每个线程都是做完全部流程,编程难度上和单线程基本没什么区别;我的计划是一个线程读源文件,另一个线程做判断和提取工作; 写了一天,现在才发现undrop 中的stream_p

MySQL冗余数据的三种方案

一,为什么要冗余数据 互联网数据量很大的业务场景,往往数据库需要进行水平切分来降低单库数据量. 水平切分会有一个patition key,通过patition key的查询能够直接定位到库,但是非patition key上的查询可能就需要扫描多个库了. 此时常见的架构设计方案,是使用数据冗余这种反范式设计来满足分库后不同维度的查询需求. 例如:订单业务,对用户和商家都有订单查询需求: Order(oid, info_detail); T(buyer_id, seller_id, oid); 如果

细看InnoDB数据落盘 图解 MYSQL 专家hatemysql

http://hatemysql.com/?p=503 1.  概述 前面很多大侠都分享过MySQL的InnoDB存储引擎将数据刷新的各种情况.我们这篇文章从InnoDB往下,看看数据从InnoDB的内存到真正写到存储设备的介质上到底有哪些缓冲在起作用. 我们通过下图看一下相关的缓冲: 图 1 innodb all buffers 从上图中,我们可以看到,数据InnoDB到磁盘需要经过 InnoDB buffer pool, Redo log buffer.这个是InnoDB应用系统本身的缓冲.

详解 MySql InnoDB 中的三种行锁(记录锁、间隙锁与临键锁)

详解 MySql InnoDB 中的三种行锁(记录锁.间隙锁与临键锁) 前言 InnoDB 通过 MVCC 和 NEXT-KEY Locks,解决了在可重复读的事务隔离级别下出现幻读的问题.MVCC 我先挖个坑,日后再细讲,这篇文章我们主要来谈谈那些可爱的锁. 什么是幻读? 幻读是在可重复读的事务隔离级别下会出现的一种问题,简单来说,可重复读保证了当前事务不会读取到其他事务已提交的 UPDATE 操作.但同时,也会导致当前事务无法感知到来自其他事务中的 INSERT 或 DELETE 操作,这就

MySQL InnoDb数据表 自动提交总结

官方文档说明: http://dev.mysql.com/doc/refman/5.5/en/commit.html 1.autocommit仅适用于InnoDb数据表; 2.默认是自动提交,可通过语句查询: select @@autocommit; 3.SET autocommit 禁用或启用默认为当前会话自动提交模式(注意:只是当前会话生效); 4.语法:SET autocommit = {0 | 1}  0为当前会话禁用自动提交,1为当前会话启用自动提交 5.可通过启动服务加命令方式进行修

更改Innodb 数据页大小优化MySQL

更改Innodb 数据页大小优化MySQL http://www.mysqlsupport.cn/change_innodb_page_size/ 更改Innodb 数据页大小优化MySQL 2009年12月13日 Posted by wubx 作者:吴炳锡 来源:http://www.mysqlsupport.cn/ 联系方式: wubingxi#gmail.com 转载请注明作/译者和出处,并且不能用于商业用途,违者必究.         我们知道Innodb的数据页是16K,而且是一个硬性

一种基于MySQL Innodb数据引擎的增备方法_爱学术

[摘要]针对MySql Innodb数据引擎二进制日志备份较慢的问题,提出了一种基于MySQL Innodb存储引擎的增量备份方法,可以实现最短时间的备份,每次记录相对于上次完全备份点差异的数据.增备是速度最快的备份方法,而且需要最少的存储空间.但是增备却需要最长时间来完成恢复.增备方法基于日志页序列号,通过计算差值而直接对LOG页进行拷贝而实现,避免重复执行SQL语句,相比优于以前的BINLOG复制增备方案. [作者] 邬文轩  胡晓勤 转载至爱学术:https://www.ixueshu.c

MySQL 储存引擎 MyISAM 和 InnoDB 配置

MySQL 存储引擎 MyISAM 和 InnoDB 配置 MyISAM 和 InnoDB 最大特点: MyISAM : ① 不支持事务 . ② 表级锁定形式 ,数据在更新时锁定整个表 . ③ 不支持外键约束 ,只支持全文索引 . ④ 数据库在读取过程中相互阻塞 . ⑤ 数据单独写入或读取 , 速度较快且占用资源相对要少 . InnoDB: ① 支持事务 . ② 行级锁定 ,但是全表扫描仍然会是表级锁定 . ③ 支持分区.表空间 ,类似Oracle 数据库 . ④ 读写阻塞与事务隔离级别相关 .