一种数据恢复方法、装置、介质和电子设备
文献发布时间:2023-06-19 11:02:01
技术领域
本公开涉及数据处理领域,具体而言,涉及一种数据恢复方法、装置、介质和电子设备。
背景技术
对于数据库的进行增加、删除或修改操作时,常常会导致误操作,使正常数据遭到破坏,甚至是重要数据,造成无法挽回的恶果。
在发现误操作后,通常是采用回滚操作的方式恢复原数据。例如,对mysql数据库进行回滚前,需要对binlog2sql工具进行授权,使其可读取记录数据表元信息的information_schema.column表,并可通过特定命令获取服务端的数据库日志列表,以便从数据库日志中解析出需要的SQL语句。例如,误操作的SQL语句、回滚所需的SQL语句、去除主键的插入SQL语句。
但是,当在线对mysql实例查找和解析日志内容使,会对mysql实例造成性能压力,特别是,对mysql数据库访问量大,日志文件多时。而binlog2sql工具采用单进程工作时,解析操作和回滚操作均耗时很长,从而拖慢整个系统的正常运行。
发明内容
本公开的目的在于提供一种数据恢复方法、装置、介质和电子设备,能够解决上述提到的至少一个技术问题。具体方案如下:
根据本公开的具体实施方式,第一方面,本公开提供一种数据恢复方法,包括:
获取操作时间段、目标库的库名和目标表的表名;
基于所述库名和所述表名获取目标库的目标表的元信息;
获取备份日志文件中所述操作时间段内针对所述目标表的操作信息;
基于所述操作信息和所述元信息生成对应所述操作信息的操作指令;
判断所述操作指令是否为误操作指令;
若是,则按照所述误操作指令的执行顺序的倒序,依次基于所述误操作指令生成回滚操作指令。
可选的,所述获取备份日志文件中所述操作时间段内针对所述目标表的操作信息,包括:
判断所述备份日志文件中第一条操作信息的第一操作时间点或最后一条操作信息的第二操作时间点是否在所述操作时间段内;
若是,则从所述备份日志文件中获取所述操作时间段内针对所述目标表的操作信息。
可选的,所述从所述备份日志文件中获取所述操作时间段内针对所述目标表的操作信息,包括:
在所述备份日志文件中,获取所述操作时间段内的第一操作信息;
解析所述第一操作信息,得到第一表名;
判断所述第一表名与所述目标表的表名是否匹配;
当所述第一表名与所述目标表的表名匹配时,确定所述第一操作信息为所述操作信息。
可选的,所述在所述备份日志文件中,获取所述操作时间段内的第一操作信息,包括:
在所述备份日志文件中,获取第二操作信息;
解析所述第二操作信息,得到所述第二操作信息的操作时间点;
当所述操作时间点在所述操作时间段内时,确定所述第二操作信息为所述第一操作信息。
可选的,所述基于所述库名和所述表名获取目标库的目标表的元信息,包括:
基于所述库名和所述表名从预设的元信息文件中获取所述元信息。
可选的,所述基于所述库名和所述表名获取目标库的目标表的元信息,包括:
基于所述库名和所述表名生成获取查询元信息指令;
执行所述查询元信息指令得到所述元信息。
可选的,所述基于所述操作信息和所述元信息生成对应所述操作信息的操作指令,包括:
基于所述操作信息获取所述操作信息的特征信息和数据信息,其中,所述特征信息,包括:表名、操作类型信息和操作条件信息,所述数据信息包括字段名在元信息中排列位置的字段序号与字段值的第一对应关系;
基于所述操作类型信息和所述操作条件信息获取对应的指令模板信息;
基于所述字段序号从所述元信息中得到所述字段序号与所述字段名的第二对应关系;
基于所述第一对应关系和所述第二对应关系得到所述字段名与所述字段值的第三对应关系;
基于所述指令模板信息和所述第三对应关系生成所述操作指令。
可选的,所述方法还包括:
依据操作日志文件的修改时间顺序依次备份所述操作日志文件,生成所述备份日志文件。
可选的,所述方法还包括:
当检测到备份中断时,重新对所述操作日志文件继续进行备份。
可选的,所述当检测到备份中断时,重新对所述操作日志文件继续进行备份,包括:
当检测到备份中断时,从所述备份日志文件的存储路径下获取最后备份的所述备份日志文件的最后修改时间;
从所述操作日志文件的存储路径下基于所述最后修改时间获取未备份的操作日志文件;
对未备份的所述操作日志文件继续进行备份。
根据本公开的具体实施方式,第二方面,本公开提供一种数据恢复装置,包括:
基础信息获取单元,用于获取操作时间段、目标库的库名和目标表的表名;
元信息获取单元,用于基于所述库名和所述表名获取目标库的目标表的元信息;
操作信息获取单元,用于获取备份日志文件中所述操作时间段内针对所述目标表的操作信息;
操作指令生成单元,用于基于所述操作信息和所述元信息生成对应所述操作信息的操作指令;
指令判断单元,用于判断所述操作指令是否为误操作指令;
回滚指令生成单元,用于若是,则按照所述误操作指令的执行顺序的倒序,依次基于所述误操作指令生成回滚操作指令。
可选的,所述操作信息获取单元,包括:
第一判断子单元,用于判断所述备份日志文件中第一条操作信息的第一操作时间点或最后一条操作信息的第二操作时间点是否在所述操作时间段内;
第一获取子单元,用于从所述备份日志文件中获取所述操作时间段内针对所述目标表的操作信息。
可选的,所述第一获取子单元,包括:
第二获取子单元,用于在所述备份日志文件中,获取所述操作时间段内的第一操作信息;
第一得到子单元,用于解析所述第一操作信息,得到第一表名;
第二判断子单元,用于判断所述第一表名与所述目标表的表名是否匹配;
第一确定子单元,用于当所述第一表名与所述目标表的表名匹配时,确定所述第一操作信息为所述操作信息。
可选的,所述第二获取子单元,包括:
第三获取子单元,用于在所述备份日志文件中,获取第二操作信息;
第二得到子单元,用于解析所述第二操作信息,得到所述第二操作信息的操作时间点;
第二确定子单元,用于当所述操作时间点在所述操作时间段内时,确定所述第二操作信息为所述第一操作信息。
可选的,所述元信息获取单元,包括:
元信息获取子单元,用于基于所述库名和所述表名从预设的元信息文件中获取所述元信息。
可选的,所述元信息获取单元,包括:
指令获取子单元,用于基于所述库名和所述表名生成获取查询元信息指令;
元信息得到子单元,用于执行所述查询元信息指令得到所述元信息。
可选的,所述指令生成单元,包括:
信息分析子单元,用于基于所述操作信息获取所述操作信息的特征信息和数据信息,其中,所述特征信息,包括:表名、操作类型信息和操作条件信息,所述数据信息包括字段名在元信息中排列位置的字段序号与字段值的第一对应关系;
模板获取子单元,用于基于所述操作类型信息和所述操作条件信息获取对应的指令模板信息;
第三得到子单元,用于基于所述字段序号从所述元信息中得到所述字段序号与所述字段名的第二对应关系;
第四得到子单元,用于基于所述第一对应关系和所述第二对应关系得到所述字段名与所述字段值的第三对应关系;
指令生成子单元,用于基于所述指令模板信息和所述第三对应关系生成所述操作指令。
可选的,所述装置还包括:
日志备份单元,用于依据操作日志文件的修改时间顺序依次备份所述操作日志文件,生成所述备份日志文件。
可选的,所述装置还包括:
备份重启单元,用于当检测到备份中断时,重新对所述操作日志文件继续进行备份。
可选的,所述备份重启单元,包括:
时间获取子单元,用于当检测到备份中断时,从所述备份日志文件的存储路径下获取最后备份的所述备份日志文件的最后修改时间;
剩余文件获取子单元,用于从所述操作日志文件的存储路径下基于所述最后修改时间获取未备份的操作日志文件;
剩余文件备份子单元,用于对未备份的所述操作日志文件继续进行备份。
根据本公开的具体实施方式,第三方面,本公开提供一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如第一方面任一项所述数据恢复方法。
根据本公开的具体实施方式,第四方面,本公开提供一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如第一方面任一项所述数据恢复方法。
本公开实施例的上述方案与现有技术相比,至少具有以下有益效果:
本公开从备份日志文件中获取误操作信息,并基于误操作信息生成反向回滚操作指令,减轻了针对操作日志文件的访问负担。当备份日志文件保存在数据库外的另一台服务器中时,能够减轻数据库的压力,保证了数据库能够平稳的运行。
附图说明
结合附图并参考以下具体实施方式,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。贯穿附图中,相同或相似的附图标记表示相同或相似的元素。应当理解附图是示意性的,元件和元素不一定按照比例绘制。在附图中:
图1示出了根据本公开实施例的数据恢复方法的流程图;
图2示出了根据本公开实施例的数据恢复装置的单元框图;
图3示出了根据本公开的实施例的电子设备连接结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。
下面结合附图详细说明本公开的可选实施例。
对本公开提供的第一实施例,即一种数据恢复方法的实施例。
下面结合图1对本公开实施例进行详细说明。
步骤S101,获取操作时间段、目标库的库名和目标表的表名。
操作时间段用于从备份日志文件中找到在该时间范围内的操作信息。
本公开实施例所述目标库就是关系型数据库。所述关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为数据表,一组数据表组成了数据库。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织,例如,MySQL数据库。所述目标表是目标库中需要进行回滚操作的数据表。
对于一个大型的数据库应用,通常采用分布式数据库。分布式数据库系统通常包括多个计算机系统,每台计算机可单独放在一个地方,且每台计算机中都可能有数据库管理系统的一份完整拷贝副本,或者部分拷贝副本,并具有独立的局部的数据库,位于不同地点的许多计算机通过网络互相连接,共同组成一个完整的、全局的逻辑上集中、物理上分布的大型数据库。分布式数据库至少包括一个关系型数据库,而每个关系型数据库均配置有操作日志文件,用于记录对数据库的操作信息。例如,MySQL数据库中二进制的binlog日志文件,用于记录用户对数据库操作的SQL语句(除了数据查询语句)信息。
数据表是由表的名称、字段名和字段值三个部分组成的。
步骤S102,基于所述库名和所述表名获取目标库的目标表的元信息。
数据表的元信息是数据表的定义信息,定义了数据表的表名以及数据表包含字段名、字段类型和字段长度以及字段间的相互关系。
例如,数据表的元信息为:
CREATE TABLE`person_table`(
`id`int(11)NOT NULL AUTO_INCREMENT,
`name`varchar(20)NOT NULL COMMENT'人名',
`zone`varchar(255)DEFAULT NULL COMMENT'所属区域',
PRIMARY KEY(`id`),
KEY`views_zone_idx_dns`(`views`,`zone`)
)ENGINE=InnoDB AUTO_INCREMENT=6005DEFAULT CHARSET=utf8;
其中,“person_table”为表名,“id”、“name”和“zone”为字段名,“int”和“varchar”为字段类型,字段类型在定义中包括字段长度,字段间的排列顺序表明字段间的相互关系。
在一个具体实施例中,所述基于所述库名和所述表名获取目标库的目标表的元信息,包括以下步骤:
步骤S102a,基于所述库名和所述表名从预设的元信息文件中获取所述元信息。
也就是,元信息文件中预先保存着数据表的元信息。当需要时,根据目标库的库名和目标表的表名从元信息文件中检索到对应的元信息。
在另一个具体实施例中,所述基于所述库名和所述表名获取目标库的目标表的元信息,包括以下步骤:
步骤S102b-1,基于所述库名和所述表名生成获取查询元信息指令。
可选的,所述查询元信息指令由数据操作语言撰写。
例如,数据操作语言为SQL语言,在MySQL数据库中,查询元信息指令为:“selecttable_name,table_comment from information_schema.tables where table_schema='库名'and table_name='表名'”。
步骤S102b-2,执行所述查询元信息指令得到所述元信息。
例如,执行上述SQL语言,便可获得'表名'对应的元信息。
操作时间段可以比产生误操作的时间范围大一些,避免范围过窄,遗漏误操作信息。
操作时间段、目标库名称和目标表名称均可以通过用户界面输入获得;也可以通过批处理的方式,保存在批处理文件中,并从所述批处理文件中分批读取获得;本公开实施例不做限制。
步骤S103,获取备份日志文件中所述操作时间段内针对所述目标表的操作信息。
其中,所述备份日志文件为操作日志文件的镜像文件。本公开实施例从备份日志文件中获取误操作信息,并基于误操作信息生成反向回滚操作指令,从而减轻了针对操作日志文件的访问负担。当备份日志文件保存在数据库外的另一台服务器中时,能够减轻数据库的压力,保证了数据库能够平稳的运行。
可选的,所述获取备份日志文件中所述操作时间段内针对所述目标表的操作信息,包括以下步骤:
步骤S103-1,判断所述备份日志文件中第一条操作信息的第一操作时间点或最后一条操作信息的第二操作时间点是否在所述操作时间段内。
对于一个分布式数据库来说,可能存在多个操作日志文件,相应的,也就存在与操作日志文件的数量相同的多个备份日志文件,且多个备份日志文件保存在多个计算机中。所述第一备份日志文件中至少一个操作信息的操作时间点在所述操作时间段内,也就是需要的备份日志文件。
备份日志文件可能备份在不同的计算机中。而在同一台计算机中,备份日志文件可能备份在不同的目录下。为了方便找到备份日志文件,通常,备份日志文件的存储路径保存在一个配置文件中。所述存储路径包括计算机名称或IP地址以及在计算机中的存储目录。
步骤S103-2,若是,则从所述备份日志文件中获取所述操作时间段内针对所述目标表的操作信息。
当所述备份文件中第一条操作信息的第一操作时间点或最后一条操作信息的第二操作时间点在所述操作时间段内时,确定所述备份日志文件中至少一个操作信息为所述操作时间段内针对所述目标表的信息。
针对备份文件中第一条操作信息和最后一条操作信息的判断,确定第一备份日志文件。避免了逐条判断操作信息,缩短了判断时间,提高了执行效率。
由于备份日志文件中包括了多个数据表的操作。为了生成针对目标表的回滚操作指令,本公开实施例剔除了针对其他数据表的操作信息,获取了所述操作时间段内针对所述目标表的操作信息。
具体的,所述从所述备份日志文件中获取所述操作时间段内针对所述目标表的操作信息,包括以下步骤:
步骤S103-2-1,在所述备份日志文件中,获取所述操作时间段内的第一操作信息。
在备份日志文件中,操作信息是以时间顺序排列的,每行记载着一条操作信息,且每条操作信息均包括操作时间点。
在一个具体实施例中,所述在所述备份日志文件中,获取所述操作时间段内的第一操作信息,包括以下步骤:
步骤S103-2-1-1,在所述备份日志文件中,获取第二操作信息。
步骤S103-2-1-2,解析所述第二操作信息,得到所述第二操作信息的操作时间点。
例如,第二操作信息记录着:“在19:05时间点,在人员表中添加了一条id=5,name=张杰的数据,”其中,“19:05时间点”为所述第二操作信息的操作时间点。
步骤S103-2-1-3,当所述操作时间点在所述操作时间段内时,确定所述第二操作信息为所述第一操作信息。
例如,继续上述例子,当操作时间段为:18:30~19:30时,“19:05时间点”在所述操作时间段内,则确定所述第二操作信息为所述第一操作信息,也就是第二操作信息满足所述操作时间段的操作信息。
步骤S103-2-2,解析所述第一操作信息,得到第一表名。
例如,继续上述例子,“人员表”就是第一表名。
步骤S103-2-3,判断所述第一表名与所述目标表的表名是否匹配。
步骤S103-2-4,当所述第一表名与所述目标表的表名匹配时,确定所述第一操作信息为所述操作时间段内针对所述目标表的操作信息。
步骤S104,基于所述操作信息和所述元信息生成对应所述操作信息的操作指令。
所述的操作指令由数据操作语言撰写,例如,数据操作语言为SQL语言。
具体的,所述基于所述操作信息和所述元信息生成对应所述操作信息的操作指令,包括:
步骤S104-1,基于所述操作信息获取所述操作信息的特征信息和数据信息。
其中,所述特征信息,包括:表名、操作类型信息和操作条件信息,所述数据信息包括字段名在元信息中排列位置的字段序号与字段值的第一对应关系。
其中,字段序号从数字“0”开始计算。
例如,继续上述数据表的元信息的例子,操作时间段的开始时间点为“2020-12-17:00:00”,结束时间点为“2020-12-1 8:00:00”,目标表为“person_table”;在备份日志文件中记录了一条操作信息:“2020-12-1 7:30:00,删除表person_table中0=8的数据”,则表名为“person_table”、操作类型信息为“删除”和第一对应关系为“0=8”,字段序号“0”,对应所述字段序号“0”的字段值为“8”。
步骤S104-2,基于所述操作类型信息和所述操作条件信息获取对应的指令模板信息。
指令模板信息是预先设置的,例如,对应上述例子的指令模板信息为:deletefrom