一种针对MYSQL数据库的碎片恢复方法与流程

文档序号:12733371阅读:1053来源:国知局

本发明涉及信息安全技术领域,特别涉及一种针对MYSQL数据库的碎片恢复方法。



背景技术:

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用;

数据库(DataBase,DB)是指在计算机的存储设备上合理存放的相关联的有结构的数据集合。一个数据库含有各种成分,包括表、视图、存储过程、记录、字段、索引等;

MYSQL是一个关系型数据库管理系统,由瑞典MYSQL AB公司开发,目前属于Oracle旗下产品。MYSQL最流行的关系型数据库管理系统,在WEB应用方面MYSQL是最好的RDBMS(Relational Database Management System,关系数据库管理系统)应用软件之一。

MYSQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MYSQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MYSQL软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MYSQL作为网站数据库。

但是MYSQL数据库有时也会发生故障,导致无法访问数据,其中数据库损坏常见的原因有以下几种:事务日志问题。比如事务日志文件丢失;事务日志文件在操作过程中被误删;事务日志文件被损坏以及事务日志文件过大,导致硬盘的空间不足等;意外掉电或异常强制关机,造成数据文件损坏,主要数据库正在被读写过程中异常关机;数据库的表被破坏或索引等被破坏,或者数据库的其他对象被破坏或丢失等;删除了数据文件,或者更改了它的名字;硬盘损坏,造成数据和日志文件读写错误等;这些错误中部分数据库自己是可以采取容灾机制处理,保证数据可以正常访问,但是针对数据库表破坏,数据库被删除,或者数据文件被删除,此时数据库本身无法修复,就需要一个专门的方法来解决这些问题,解决办法大多是恢复丢失的数据库文件,进而恢复记录,但是如果文件是以碎片的形式存储,目前市面上的一些恢复MYSQL数据库的方法就无从下手了。

本发明用到的技术名词:

数据表(Table):简称表,由一组数据记录组成,数据库中的数据是以表为单位进行组织的。一个表是一组相关的按行排列的数据;每个表中都含有相同类型的信息。表实际上是一个二维表格,例如,一个班所有学生的考试成绩,可以存放在一个表中,表中的每一行对应一个学生,这一行包括学生的学号,姓名及各门课程成绩。

记录(Record):表中的每一行称为一个记录,它由若干个字段组成。

字段(Field):也称域,表中的每一列称为一个字段。每个字段都有相应的描述信息,如数据类型、数据宽度等。

字段判断表:非空的字段其在底层由二进制0标志,为空的字段其在底层由二进制1标志,而字段判断表则存放了这些二进制的数值,并且也是倒叙存放的,也就是说字段管理表的第一位表示字段最后一位是否为空;而字段判断表的位数与字段个数相匹配,也就是若该条记录有8个字段则字段判断表则应有8位。

长度管理表:所有不为空的变长字段(如char和vchar类型的字段)均有一个长度字节表示其长度,而长度管理表则是存放了所有这些长度字节,并且存放的方式为倒叙的,也就是说长度管理表的第一个字节表示最后一个字段的长度。



技术实现要素:

本发明针对现有技术的缺陷,提供了一种针对MYSQL数据库的碎片恢复方法,能有效的解决上述现有技术存在的问题。

一种针对MYSQL数据库的碎片恢复方法,包括以下步骤:

S1:确认用户数据数储存在的数据文件;

S2:确定需要恢复的数据表,命名为关键表;

S3:通过一个正常的MYSQL数据库文件分析得到数据表记录的组成结构,得到表中字段和字段长度字节长度、表的长度以及位置,得到了关键表的详细结构;

S4:检索数据特征标志,在数据存储是会使用一个特征标志来判断该条记录为此数据库的数据表记录;

S5:确定长度管理表的长度;

S6:确定字段判断表,根据字段判断表判断该条记录的所有字段的状态是否为空;若字段为空所对应的字段判断表bit位为1,非空为0;

S7:排除判断表后4个字节和长度管理表第三个字段前13个字节;避免出现乱码等无用数据;

S8:根据分析出来的长度管理表以及字段判断表,在数据区提取字段,再将字段组成一条完整的记录,形成一张数据表。

作为优选,S3中确定长度管理表的字节长度需根据字段判断表的中二进制0的个数减去数据库设计书中定义为固定长度的字段个数,则得到长度判断表的长度。

作为优选,S3中确定字段判断表的长度以及位置:紧跟着长度判断表的后4个字节为字段判断表,再将该4个字节转换为二进制则为字段判断表;根据数据库设计书得到该条记录的实际字段个数得出字段判断表的位数。

作为优选,S3中确定特征头:反复对比同一张表的多条记录,找到同一张表里的多条记录中长度管理表里的相同字段,且字段其类型为char型;将固定字段作为特征头。

与现有技术相比本发明的优点在于:可以提取MYSQL数据库中的删除记录;可以完美恢复MYSQL数据库中的关键记录碎片;提取的数据是按照原MYSQL数据库的表结构组织的,增加了MYSQL数据库数据恢复的成功率和准确率,减少因数据丢失带来的损失。

附图说明

图1为本发明实施例MYSQL数据表一条记录的数据结构图。

具体实施方式

为使本发明的目的:技术方案及优点更加清楚明白,以下举实施例,对本发明做进一步详细说明。

一种针对MYSQL数据库的碎片恢复方法,包括以下步骤:

S1:确认用户数据数储存在的数据文件;

S2:确定需要恢复的数据表,命名为关键表;

S3:通过一个正常的MYSQL数据库文件分析得到数据表记录的组成结构,得到表中字段和字段长度字节长度、表的长度以及位置,得到了关键表的详细结构;

确定长度管理表的字节长度:根据字段判断表的中二进制0的个数减去数据库设计书中定义为固定长度的字段个数(如时间和金额等字段)则得到长度判断表的长度。

确定字段判断表的长度以及位置:紧跟着长度判断表的后4个字节为字段判断表,再将该4个字节转换为二进制则为字段判断表;根据数据库设计书得到该条记录的实际字段个数得出字段判断表的位数。

确定特征头:经分析发现MYSQL并没有一个明显的特征标志,反复对比同一张表的多条记录,发现同一张表里的多条记录的长度管理表里的某几个字段总是相同,发现该几个相同的字段其类型为char型。(MYSQL数据库若定义字段为char型,则其在底层字节长度固定并会在长度管理表里记录其长度;若实际长度小于定义的长度则会在底层字节填零补充)则可以将长度管理表中固定字段作为特征头。

S4:检索数据特征标志,在数据存储是会使用一个特征标志来判断该条记录为此数据库的数据表记录;

S5:按照长度管理表确定字段的长度,MYSQL数据库设计结构是将记录了所有变长的字段(如char和varchar类型的信息)的管理字节一起存放并存放在该条记录的起始位置,这里称其为字段长度管理表;而一些如时间信息或者金额信息等字节长度固定的信息,并不会存放标志这类信息长度的管理字节;

S6:确定字段的长度后,需要判断该条记录字段是否为空。MYSQL数据库设计结构在紧跟着长度管理表的接下来的一些字节,标志了该条记录是否为空。这里称这些判断字段是否为空的字节为字段判断表。

S7:确定了长度管理表和字段判断表后,还需要排除一些无用的字节。(在判断表后4个字节为排除字节,根据长度管理表第三个字段前13个字节为排除字节)这样在恢复MYSQL恢复程序时,可以将这些对恢复数据无用的字节筛除掉,就能避免出现乱码等无用数据。

S8:根据分析出来的长度管理表以及字段判断表,在数据区进行提取字段,再将字段组成一条完整的记录,最好将记录汇总,形成一张数据表。

例如,如图1所示,“01 09 06 02 09 01 36 0C 15 24 06 01 09”为该条记录的长度管理表。值得注意的是,其每一个字节对应的数据区的顺序是倒序的,也就是最后一个字节09对应数据区的第一条字段为“31 30 30 30 30 31 30 37 31”;倒数第二个字节01对应数据区的第二条字段为31,其他的依次读取数据。

“37 D0 80 00”为该条记录字段判断表,将其转换为2进制“00110111 11010000 10000000 00000000”,偏移1个比特位红色字体含义:0表示表列有数据,1表示表列数据为NULL。其对应表列的数据也是倒序的。第一个“0”表示最后一列的数据不为NULL,第二个“1”表示倒数第二列的数据为NULL。

本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的实施方法,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1