CN115730008A - 一种日志解析方法、数据同步系统、电子设备及存储介质 - Google Patents

一种日志解析方法、数据同步系统、电子设备及存储介质 Download PDF

Info

Publication number
CN115730008A
CN115730008A CN202211409923.3A CN202211409923A CN115730008A CN 115730008 A CN115730008 A CN 115730008A CN 202211409923 A CN202211409923 A CN 202211409923A CN 115730008 A CN115730008 A CN 115730008A
Authority
CN
China
Prior art keywords
instruction
metadata information
target
time
table structure
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202211409923.3A
Other languages
English (en)
Inventor
苏腾辉
霍国铖
王旭
付大超
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Cloud Computing Ltd
Original Assignee
Alibaba Cloud Computing Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Alibaba Cloud Computing Ltd filed Critical Alibaba Cloud Computing Ltd
Priority to CN202211409923.3A priority Critical patent/CN115730008A/zh
Publication of CN115730008A publication Critical patent/CN115730008A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种日志解析方法、数据同步系统、电子设备及存储介质,包括:从源数据库获取第一时间的第一元数据信息,并将第一元数据信息与本地存储的第二时间的第二元数据信息进行校验,其中,第二元数据信息为第一元数据信息执行指定指令后的信息;在校验失败的情况下,对第一时间到第二时间的增量日志进行解析,以获取指定指令;获取指定指令对应的逆向指令,得到对应的目标指令;根据第二元数据信息和目标指令获取第三元数据信息,并使用第三元数据信息替换第二元数据信息,以通过校验;根据第三元数据信息对第一时间的日志进行解析,解决了相关技术中,历史元数据和解析模块实际获取到的当前元数据不一致导致历史日志解析失败的技术问题。

Description

一种日志解析方法、数据同步系统、电子设备及存储介质
技术领域
本申请涉及到数据同步领域,具体而言,涉及一种日志解析方法、数据同步系统、电子设备及存储介质。
背景技术
关系型数据库从源库到目标库进行数据实时迁移、同步部分场景下,需要解析历史时间的日志,但是经常会遇到历史时间的历史元数据和解析模块实际获取到的当前元数据不一致的情况,导致历史时间日志解析失败,针对该技术问题,相关技术尚未提出有效的解决方案。
发明内容
本申请实施例提供了一种日志解析方法、数据同步系统、电子设备及存储介质,以至少解决现有技术中在解析历史日志时,历史元数据和解析模块实际获取到的当前元数据不一致导致的历史日志解析失败技术问题。
根据本申请的一个方面,提供了一种日志解析方法,包括:从源数据库获取第一时间的第一元数据信息,并将所述第一元数据信息与本地存储的第二时间的第二元数据信息进行校验,其中,所述第二元数据信息为所述第一元数据信息执行指定指令后的信息;在校验失败的情况下,对所述第一时间到所述第二时间的增量日志进行解析,以获取所述指定指令;获取所述指定指令对应的逆向指令,得到对应的目标指令;根据所述第二元数据信息和所述目标指令获取第三元数据信息,并使用所述第三元数据信息替换所述第二元数据信息,以通过二次校验;根据所述第三元数据信息对所述第一时间的日志进行解析。
可选地,获取所述指定指令对应的逆向指令,得到对应的目标指令包括:判断所述指定指令是否为可逆指令,其中,所述可逆指令为第一表结构执行第一指令后得到第二表结构,且可以通过所述第二表结构和所述第一指令的逆向指令唯一计算出所述第一表结构的指令;根据判断结果,获取所述指定指令对应的逆向指令,得到对应的目标指令。
可选地,根据判断结果,获取所述指定指令对应的逆向指令,得到对应的目标指令包括:在所述指定指令为所述可逆指令时,将所述指定指令的逆向指令设置为所述目标指令;在所述指定指令为非可逆指令时,获取所述第一时间到所述第二时间的增量日志中指定事件的元数据信息;通过所述指定指令对应的逆向指令结合对应时间的指定事件的元数据信息确定所述目标指令。
可选地,所述指定事件包括表映射事件。
可选地,根据所述第二元数据信息和所述目标指令获取第三元数据信息包括:将所述目标指令按照时间倒序排列,得到目标指令集合,将所述第二元数据信息中的表结构设置为初始表结构;执行下列循环步骤,直至目标表结构和所述第一元数据信息中的表结构的列数保持一致:设置所述初始表结构执行所述目标指令集合中的目标指令,得到目标表结构,其中,所述目标指令为所述目标指令集合中的第一个指令;将所述目标表结构、所述目标指令的下一个未使用的指令作为下一次循环步骤的输入。
可选地,将所述第一元数据信息与本地存储的第二时间的第二元数据信息进行校验包括:获取所述第一元数据信息的第一表的列数以及所述第二元数据信息的第二表的列数;将所述第一表的列数与所述第二表的列数进行校验。
可选地,在所述指定指令无法生成对应的逆向指令时,发出报错。
可选地,在校验失败的情况下,所述方法还包括:设置从所述源数据库获取元数据信息的操作进入等待状态,并判断所述等待状态的持续时间;在所述持续时间超过预设阈值时,发出报错。
可选地,在通过所述第一元数据信息对所述第一时间的日志进行解析之后,所述方法还包括:根据解析结果,将所述第一元数据信息同步至目标数据库。
根据本申请的一个方面,还提供了一种数据同步系统,包括:拉取模块,用于通过上述方法对源数据库的日志进行解析;中间数据存储模块,用于存储所述拉取模块获取到的数据;写入模块,用于将所述中间数据存储模块的数据进行处理后,写入至目标数据库。
根据本申请的另一个方面,还提供了一种电子设备,包括存储器和处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现上述的方法步骤。
根据本申请的另一个方面,还提供了一种可读存储介质,其上存储有计算机指令,其中,该计算机指令被处理器执行时实现上述的方法步骤。
在本申请实施例中,从源数据库获取第一时间的第一元数据信息,并将该第一元数据信息与本地存储的第二时间的第二元数据信息进行校验,其中,该第二元数据信息为该第一元数据信息执行指定指令后的信息;在校验失败的情况下,对该第一时间到该第二时间的增量日志进行解析,以获取该指定指令;获取该指定指令对应的逆向指令,得到对应的目标指令;根据该第二元数据信息和该目标指令获取第三元数据信息,并使用该第三元数据信息替换该第二元数据信息,以通过二次校验;根据该第三元数据信息对该第一时间的日志进行解析。即,在历史元数据信息(对应上述第一元数据信息)和当前元数据信息(对应上述第二元数据信息)校验失败的情况下,通过当前元数据和对应的指令的逆向指令计算出与历史元数据对应的数据(第三元数据信息),该第三元数据信息至少和上述第一元数据信息的表列数一致,这样可以保证校验通过,进一步解析历史日志内容,解决了相关技术中,在解析历史日志时,历史元数据和解析模块实际获取到的当前元数据不一致导致的历史日志解析失败的技术问题,达到了提高日志解析模块稳定性的技术效果。
附图说明
构成本申请的一部分的附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例的一种DTS数据同步方法流程示意图;
图2是根据本申请实施例的一种日志解析方法方法流程图;
图3是根据本申请实施例的另一种日志解析方法方法流程图;
图4是根据本申请实施例的一种日志解析系统结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
根据本申请实施例,提供了一种日志解析方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
数据传输服务(Data Transmission Service,简称为DTS)数据同步流程如图1所示,其中,包括源数据库(例如关系型数据库)、拉取模块、中间数据存储模块、写入模块以及目标数据库(例如关系型数据库)。其中,拉取模块包括二进制日志binlog/重做日志redo拉取、解析、元数据meta管理、序列化以及数据投递;中间数据存储模块包括开始、插入、提交、数据库模式定义语言(Data Definition Language,简称为DDL)等;写入模块包括拉取中间数据、数据过滤、映射、事务拼接、冲突矩阵、DDL解析、结构化查询语言(Structured QueryLanguage,简称为SQL)拼装。上述拉取模块负责拉取源数据库的同步日志,随后进行解析,同步期间需要维护源数据库表结构的元数据信息,首次启动拉取模块时会从源数据库通过执行SQL命令获取到表结构,随即将其序列化到本地存储,遇到DDL则需要解析出库名、表名、列名、列类型等信息用于更新本地的元数据信息,按一定的策略将元数据快照存储到本地从而实现可以将表的状态恢复到任意指定的时间点,然后拉取模块将数据操纵语言(Data Manipulation Language,简称为DML)/DDL/数据控制语言(Data ControlLanguage,简称为DCL)数据投递到中间数据存储模块,但是关系型数据库实时迁移、同步部分场景下解析历史事务日志时经常会遇到元数据缺失的问题,源数据库日志解析模块以当前时间Tnow启动,希望从T0时刻开始拉取并解析增量日志时可能会遇到元数据与预写式WAL日志不匹配的问题,主要包括以下两种情况:情况一、T0是起始位点,而Tnow是日志解析模块启动后真正获取源数据库元数据的时间,对于一般的场景而言,T0<Tnow,其相差一个比较小的值,往往是秒级别的,这取决于外部管控调度(可以理解为有一个调度程序选择机器,在该机器上启动DTS进程)的速度和日志解析模块初始化的时间,在某些极端情况下,在T0到Tnow之间,源数据库的表结构是可能发生过变更的,此时日志解析模块可能因历史元数据与当前元数据不一致的问题导致解析失败或者数据错误的情况;情况二、有一些用户的需求是期望从一个指定的历史位点T1开始解析增量日志,Tnow是日志解析模块启动后真正获取源端数据库元数据的时间,T1<Tnow,其相差可能是一个较大的值,往往是分钟甚至小时级别,源数据库的表结构发生变更的概率相较于情况一中描述的情况大,也可能遇到上述情况一中类似的问题。
基于上述内容,本申请实施例提出了如图2所示的日志解析方法,包括:
S202,从源数据库获取第一时间的第一元数据信息,并将该第一元数据信息与本地存储的第二时间的第二元数据信息进行校验,其中,该第二元数据信息为该第一元数据信息执行指定指令后的信息;需要说明的是,上述第一时间小于上述第二时间,在第一时间到第二时间这段时间内,第一元数据信息可能发生执行了一个或者多个指定指令,因此,上述第一元数据信息就可能变成第二元数据信息。上述第一元数据信息和上述第二元数据信息包括但不限于表名、列名、列类型,编码等。例如,在第一时间第一元数据信息包括表结构A,到上述第二时间后,该表结构A可能增加了一个列,变成了表B,当然也可以是减少了一个列,变成了表C,那么将表结构A和表结构B或者表结构C进行校验时,就会出现校验失败的情况。另外,需要说明的是,上述指定指令包括但并不限于:数据操纵语言DML指令、数据库模式定义语言DDL指令、数据控制语言DCL指令。
S204,在校验失败的情况下,对该第一时间到该第二时间的增量日志进行解析,以获取该指定指令;需要说明的是,上述指定指令包括但并不限于:增加列的指令、减少列的指令、更改表名的指令,更改列名的指令。例如,从上述第一时间到第二时间,表结构A执行了增加列的指令,变成了表结构B,那么在第一时间到第二时间的指定指令就是该增加列的指令。再例如,从上述第一时间到第二时间,表结构A经过了增加列的指令1,变成了表结构B,然后又经过了增加列的指令2,得到了表结构C,那么在第一时间到第二时间的指定指令就是增加列的指令1、增加列的指令2。
S206,获取该指定指令对应的逆向指令,得到对应的目标指令;
关于上述逆向指令的求解就需要提出两个概念,可逆指令和逆向指令,以关系型数据库为例,其有一个表结构A,其经过了指令,表结构变更为B。显然在已知A和指令的情况下是一定可以计算出B的,如果B和指令已知,能否唯一的计算出表结构A,就需要分情况讨论了。对于能够通过表结构B和指令唯一计算出表结构A,将该指令称为可逆指令。若该指令为可逆指令,则可使用公式来表达:A+指令=B等价于B-指令=A,对于一个可逆指令,有一个对应的反向指令,即上面公式中的-指令,这个-指令称为反向指令,即B+反向指令=A。
S208,根据该第二元数据信息和该目标指令获取第三元数据信息,并使用该第三元数据信息替换该第二元数据信息,以通过二次校验;需要说明的是,上述第三元数据信息和上述第一元数据信息中表列数可以保持一致,当然为了校验结果更准确,也可以结合第三元数据信息和上述第一元数据信息的其他信息进行校验。在该步骤中,由于使用第三元数据信息替换了第二元数据信息,第三元数据信息和第一元数据信息中表列数保持一致,那么就可以通过校验。
进一步地,由于要解析历史日志,就需要拿到历史的元数据信息,因此,本申请实施例还提出了S210,根据该第三元数据信息对该第一时间的日志进行解析,解析的内容包括但不限于日志里面的DML(插入、更新、删除),DDL、DCL等。
通过上述S202~S210,从源数据库获取第一时间的第一元数据信息,并将该第一元数据信息与本地存储的第二时间的第二元数据信息进行校验,其中,该第二元数据信息为该第一元数据信息执行指定指令后的信息;在校验失败的情况下,对该第一时间到该第二时间的增量日志进行解析,以获取该指定指令;获取该指定指令对应的逆向指令,得到对应的目标指令;根据该第二元数据信息和该目标指令获取第三元数据信息,并使用该第三元数据信息替换该第二元数据信息,以通过二次校验;根据该第三元数据信息对该第一时间的日志进行解析。即,在历史元数据信息(对应上述第一元数据信息)和当前元数据信息(对应上述第二元数据信息)校验失败的情况下,通过当前元数据和对应的指令的逆向指令计算出与历史元数据对应的数据(第三元数据信息),该第三元数据信息至少和上述第一元数据信息的表列数一致,这样可以保证校验通过,进一步解析历史日志内容,解决了相关技术中,在解析历史日志时,历史元数据和解析模块实际获取到的当前元数据不一致导致的历史日志解析失败的技术问题,达到了提高日志解析模块稳定性的技术效果。
在一个可选地实施方式中,获取该指定指令对应的逆向指令,得到对应的目标指令包括:判断该指定指令是否为可逆指令,其中,该可逆指令为第一表结构执行第一指令后得到第二表结构,且可以通过该第二表结构和该第一指令的逆向指令唯一计算出该第一表结构的指令;根据判断结果,获取该指定指令对应的逆向指令,得到对应的目标指令。其中,根据判断结果,获取该指定指令对应的逆向指令,得到对应的目标指令可以包括:在该指定指令为该可逆指令时,将该指定指令的逆向指令设置为该目标指令;在该指定指令为非可逆指令时,获取该第一时间到该第二时间的增量日志中指定事件的元数据信息;通过该指定指令对应的逆向指令结合对应时间的指定事件的元数据信息确定该目标指令。需要说明的是,上述指定事件可以包括表映射事件。例如,表结构A有2个列,F1和F2,指定指令为改变表A增加列F3,则表结构B有3个列,分别为F1,F2,F3;若已知B和指定指令,则可以唯一地计算出表结构A,故该改变表A增加列F3的指定指令为可逆指令,其反向指令为:改变表去掉列F3,但在某些情况下已知B与指令是不能够唯一地计算出A的,此时该指令被称为非可逆指令,例如表结构A有2个列F1,F2;指令为改变表A去掉列F2,表结构B有1个列F1,但是无法从指令中得知F2的具体类型或者F2的位置(在F1前面还是F1后面)。对于非可逆指令,也不是完全没有作用,在本申请实施例中,虽然无法通过改变表A去掉列F2这个指令推测出在去掉之前F2列的具体类型,但是可以通过具体日志中一些辅助信息来帮助解析。比如MySQL二进制日志binlog中的表映射事件table_map_event里面的元数据信息,推测出F2的模糊类型和位置,又因为F2最终是会被去掉的,所以从最终一致性的角度而言,是可以接受F2基于模糊类型的解析。因此,在本申请实施例中,非可逆指令也可能在满足一定条件下也推测出反向指令的关键信息,可用于恢复增量解析系统。因此,通过上述两种方式,可以有效获取到一个或者多个逆向指令,为还原历史元数据提供了基础。
在本实施例中,根据该第二元数据信息和该目标指令获取第三元数据信息可以包括:将该目标指令按照时间倒序排列,得到目标指令集合,将该第二元数据信息中的表结构设置为初始表结构;执行下列循环步骤,直至目标表结构和该第一元数据信息中的表结构的列数保持一致:设置该初始表结构执行该目标指令集合中的目标指令,得到目标表结构,其中,该目标指令为该目标指令集合中的第一个指令;将该目标表结构、该目标指令的下一个未使用的指令作为下一次循环步骤的输入。即,将一个或者多个逆向指令从后往前遍历,结合上述第二元数据信息,计算出第一时间对应的元数据信息(即,上述第三元数据信息),以便将该第三元数据信息更新到本地存储中。
可选地,本实施例在校验时,主要是元数据列校验,具体地,获取该第一元数据信息的第一表的列数以及该第二元数据信息的第二表的列数;将该第一表的列数与该第二表的列数进行校验。例如,第一元数据信息中的表结构包括1个列,第二元数据信息中的表结构包括1个列,那么第一元数据信息和第二元数据信息的表结构的列数相同,校验通过。再例如,第一元数据信息中的表结构包括1个列,第二元数据信息中的表结构包括2个列,那么第一元数据信息和第二元数据信息的表结构的列数不同,校验不通过。
当然在该指定指令无法生成对应的逆向指令时,本申请实施例还会发出报错。在校验失败的情况下,设置从该源数据库获取元数据信息的操作进入等待状态,并判断该等待状态的持续时间;在该持续时间超过预设阈值时,也会发出报错。
在通过上述方式获取到第一时间的日志解析结果之后,还可以根据解析结果,将该第一元数据信息同步至目标数据库,实现源数据库和目标数据库之间的数据同步。然后,在使用上述日志解析方法依次获取上述源数据库的其他时间点的日志。
下面结合具体示例,对本申请实施例进行举例说明。
如图3所示,以关系型数据库MySQL为例,指定指令以DDL指令为例进行说明。具体地,源关系型数据库有t1表,表结构为c1 int,可以看到在ts1时刻,t1表只有一个列c1int,在ts2时刻发生了一个加列的DDL指令,在ts3时刻t1表有2个列,改变表t1增加列c2int,增量拉取模块在ts3时刻启动,希望拉取ts1时刻的二进制日志binlog,ts3时刻,增量拉取模块从源数据库获取t1表的结构,缓存到内存中,那么t1表结构的快照时间是ts3,可以看到在ts3时刻,t1表有c1、c2两个列,而需要拉取的binlog是在ts1时刻,binlog中t1表只有一个列的数据,所以按照原来的逻辑增量拉取模块会因为列校验失败而导致解析失败。在引入DDL指令对应的逆向指令后,会在启动增量日志拉取线程时同时再启动一个DDL指令解析线程,DDL指令解析线程从起始位点开始读取binlog,主要是获取binlog中的DDL指令,其解析位点随着其拉取binlog不断更新,对于源数据库是MySQL的情况,还会收集各个表的表映射事件table_map_event内容,用于辅助推理列的类型和位置。当拉取线程在遇到binlog和表结构不匹配时,该线程会进入循环等待阶段,期间其不断获取DDL指令解析线程的位点,直到DDL指令解析线程的位点超过报错表结构的快照时间,拉取线程就会将DDL指令线程解析到的DDL指令从后往前遍历,如果这些DDL指令都能生成其对应的逆向指令,则会依次更新内存中的表结构,得到ts1时刻的表结构,拉取线程能够得到和binlog匹配的表结构,进入正常同步阶段,如果DDL指令无法生成其对应的逆向指令,就会报错退出,如果拉取线程超过了最大等待时间,也会报错退出。
综上,本实施例提出了指令的逆向指令的概念,对指令提供反向的映射能力,并可根据不同关系型数据库特征,如MySQL的table_map_event在较大概率上解决历史日志的解析问题,在恢复任务的同时,可实现数据迁移、同步的数据的最终一致性。本实施例适用于关系型数据库的日志解析时需要回拉历史位点的场景,是一个通用的方案。DTS的客户工单中,确实出现过好几次需要回拉历史数据的场景,回拉时间点到当前的指令以改变表增加列为主,根据本实施例提出的指令的逆向指令构建历史元数据信息的方案,能够成功帮助客户解析日志。
本发明实施例还提供了一种数据同步系统,如图4所示,包括:拉取模块42,用于通过上述日志解析方法对源数据库的日志进行解析;中间数据存储模块44,用于存储所述拉取模块获取到的数据;写入模块46,用于将所述中间数据存储模块的数据进行处理后,写入至目标数据库。
通过上述系统,从源数据库获取第一时间的第一元数据信息,并将该第一元数据信息与本地存储的第二时间的第二元数据信息进行校验,其中,该第二元数据信息为该第一元数据信息执行指定指令后的信息;在校验失败的情况下,对该第一时间到该第二时间的增量日志进行解析,以获取该指定指令;获取该指定指令对应的逆向指令,得到对应的目标指令;根据该第二元数据信息和该目标指令获取第三元数据信息,并使用该第三元数据信息替换该第二元数据信息,以通过二次校验;根据该第三元数据信息对该第一时间的日志进行解析。即,在历史元数据信息(对应上述第一元数据信息)和当前元数据信息(对应上述第二元数据信息)校验失败的情况下,通过当前元数据和对应的指令的逆向指令计算出与历史元数据对应的数据(第三元数据信息),该第三元数据信息至少和上述第一元数据信息的表列数一致,这样可以保证校验通过,进一步解析历史日志内容,解决了相关技术中,在解析历史日志时,历史元数据和解析模块实际获取到的当前元数据不一致导致的历史日志解析失败的技术问题,达到了提高日志解析模块稳定性的技术效果。
在一个可选地实施方式中,上述拉取模块42还用于获取该指定指令对应的逆向指令,得到对应的目标指令,其中包括:判断该指定指令是否为可逆指令,其中,该可逆指令为第一表结构执行第一指令后得到第二表结构,且可以通过该第二表结构和该第一指令的逆向指令唯一计算出该第一表结构的指令;根据判断结果,获取该指定指令对应的逆向指令,得到对应的目标指令。其中,根据判断结果,获取该指定指令对应的逆向指令,得到对应的目标指令可以包括:在该指定指令为该可逆指令时,将该指定指令的逆向指令设置为该目标指令;在该指定指令为非可逆指令时,获取该第一时间到该第二时间的增量日志中指定事件的元数据信息;通过该指定指令对应的逆向指令结合对应时间的指定事件的元数据信息确定该目标指令。需要说明的是,上述指定事件可以包括表映射事件。例如,表结构A有2个列,F1和F2,指定指令为改变表A增加列F3,则表结构B有3个列,分别为F1,F2,F3;若已知B和指定指令,则可以唯一地计算出表结构A,故该改变表A增加列F3的指定指令为可逆指令,其反向指令为:改变表去掉列F3,但在某些情况下已知B与指令是不能够唯一地计算出A的,此时该指令被称为非可逆指令,例如表结构A有2个列F1,F2;指令为改变表A去掉列F2,表结构B有1个列F1,但是无法从指令中得知F2的具体类型或者F2的位置(在F1前面还是F1后面)。对于非可逆指令,也不是完全没有作用,在本申请实施例中,虽然无法通过改变表A去掉列F2这个指令推测出在去掉之前F2列的具体类型,但是可以通过具体日志中一些辅助信息来帮助解析。比如MySQL二进制日志binlog中的表映射事件table_map_event里面的元数据信息,推测出F2的模糊类型和位置,又因为F2最终是会被去掉的,所以从最终一致性的角度而言,是可以接受F2基于模糊类型的解析。因此,在本申请实施例中,非可逆指令也可能在满足一定条件下也推测出反向指令的关键信息,可用于恢复增量解析系统。因此,通过上述两种方式,可以有效获取到一个或者多个逆向指令,为还原历史元数据提供了基础。
在本实施例中,拉取模块42还用于将该目标指令按照时间倒序排列,得到目标指令集合,将该第二元数据信息中的表结构设置为初始表结构;执行下列循环步骤,直至目标表结构和该第一元数据信息中的表结构的列数保持一致:设置该初始表结构执行该目标指令集合中的目标指令,得到目标表结构,其中,该目标指令为该目标指令集合中的第一个指令;将该目标表结构、该目标指令的下一个未使用的指令作为下一次循环步骤的输入。根据该第二元数据信息和该目标指令获取第三元数据信息可以包括:将该目标指令按照时间倒序排列,得到目标指令集合,将该第二元数据信息中的表结构设置为初始表结构;执行下列循环步骤,直至目标表结构和该第一元数据信息中的表结构的列数保持一致:设置该初始表结构执行该目标指令集合中的目标指令,得到目标表结构,其中,该目标指令为该目标指令集合中的第一个指令;将该目标表结构、该目标指令的下一个未使用的指令作为下一次循环步骤的输入。即,将一个或者多个逆向指令从后往前遍历,结合上述第二元数据信息,计算出第一时间对应的元数据信息(即,上述第三元数据信息),以便将该第三元数据信息更新到本地存储中。。
可选地,本实施例在校验时,主要是元数据列校验,具体地,拉取模块42还用于获取该第一元数据信息的第一表的列数以及该第二元数据信息的第二表的列数;将该第一表的列数与该第二表的列数进行校验。例如,第一元数据信息中的表结构包括1个列,第二元数据信息中的表结构包括1个列,那么第一元数据信息和第二元数据信息的表结构的列数相同,校验通过。再例如,第一元数据信息中的表结构包括1个列,第二元数据信息中的表结构包括2个列,那么第一元数据信息和第二元数据信息的表结构的列数不同,校验不通过。
当然在该指定指令无法生成对应的逆向指令时,本申请实施例还会发出报错。在校验失败的情况下,设置从该源数据库获取元数据信息的操作进入等待状态,并判断该等待状态的持续时间;在该持续时间超过预设阈值时,也会发出报错。
本发明实施例还提供了一种电子设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,处理器被配置为执行上述任一项方法的步骤。
本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有指令,指令被处理器执行时实现上述任一项方法的步骤。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (12)

1.一种日志解析方法,包括:
从源数据库获取第一时间的第一元数据信息,并将所述第一元数据信息与本地存储的第二时间的第二元数据信息进行校验,其中,所述第二元数据信息为所述第一元数据信息执行指定指令后的信息;
在校验失败的情况下,对所述第一时间到所述第二时间的增量日志进行解析,以获取所述指定指令;
获取所述指定指令对应的逆向指令,得到对应的目标指令;
根据所述第二元数据信息和所述目标指令获取第三元数据信息,并使用所述第三元数据信息替换所述第二元数据信息,以通过二次校验;
根据所述第三元数据信息对所述第一时间的日志进行解析。
2.根据权利要求1所述的方法,其中,获取所述指定指令对应的逆向指令,得到对应的目标指令包括:
判断所述指定指令是否为可逆指令,其中,所述可逆指令为第一表结构执行第一指令后得到第二表结构,且可以通过所述第二表结构和所述第一指令的逆向指令唯一计算出所述第一表结构的指令;
根据判断结果,获取所述指定指令对应的逆向指令,得到对应的目标指令。
3.根据权利要求2所述的方法,其中,根据判断结果,获取所述指定指令对应的逆向指令,得到对应的目标指令包括:
在所述指定指令为所述可逆指令时,将所述指定指令的逆向指令设置为所述目标指令;
在所述指定指令为非可逆指令时,获取所述第一时间到所述第二时间的增量日志中指定事件的元数据信息;通过所述指定指令对应的逆向指令结合对应时间的指定事件的元数据信息确定所述目标指令。
4.根据权利要求3所述的方法,其中,所述指定事件包括表映射事件。
5.根据权利要求3所述的方法,其中,根据所述第二元数据信息和所述目标指令获取第三元数据信息包括:
将所述目标指令按照时间倒序排列,得到目标指令集合,将所述第二元数据信息中的表结构设置为初始表结构;
执行下列循环步骤,直至目标表结构和所述第一元数据信息中的表结构的列数保持一致:
设置所述初始表结构执行所述目标指令集合中的目标指令,得到目标表结构,其中,所述目标指令为所述目标指令集合中的第一个指令;将所述目标表结构、所述目标指令的下一个未使用的指令作为下一次循环步骤的输入。
6.根据权利要求1所述的方法,其中,将所述第一元数据信息与本地存储的第二时间的第二元数据信息进行校验包括:
获取所述第一元数据信息的第一表的列数以及所述第二元数据信息的第二表的列数;
将所述第一表的列数与所述第二表的列数进行校验。
7.根据权利要求1所述的方法,其中,在所述指定指令无法生成对应的逆向指令时,发出报错。
8.根据权利要求1所述的方法,其中,在校验失败的情况下,所述方法还包括:
设置从所述源数据库获取元数据信息的操作进入等待状态,并判断所述等待状态的持续时间;
在所述持续时间超过预设阈值时,发出报错。
9.根据权利要求1所述的方法,其中,在通过所述第一元数据信息对所述第一时间的日志进行解析之后,所述方法还包括:
根据解析结果,将所述第一元数据信息同步至目标数据库。
10.一种数据同步系统,包括:
拉取模块,用于通过权利要求1至9任一项所述的方法对源数据库的日志进行解析;
中间数据存储模块,用于存储所述拉取模块获取到的数据;
写入模块,用于将所述中间数据存储模块的数据进行处理后,写入至目标数据库。
11.一种电子设备,包括存储器和处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现权利要求1至9任一项所述的方法步骤。
12.一种可读存储介质,其上存储有计算机指令,其中,该计算机指令被处理器执行时实现权利要求1至9任一项所述的方法步骤。
CN202211409923.3A 2022-11-10 2022-11-10 一种日志解析方法、数据同步系统、电子设备及存储介质 Pending CN115730008A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211409923.3A CN115730008A (zh) 2022-11-10 2022-11-10 一种日志解析方法、数据同步系统、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211409923.3A CN115730008A (zh) 2022-11-10 2022-11-10 一种日志解析方法、数据同步系统、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN115730008A true CN115730008A (zh) 2023-03-03

Family

ID=85295196

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211409923.3A Pending CN115730008A (zh) 2022-11-10 2022-11-10 一种日志解析方法、数据同步系统、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN115730008A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115982285A (zh) * 2023-03-10 2023-04-18 北京集度科技有限公司 数据处理方法、设备及计算机可读存储介质
CN116107816A (zh) * 2023-04-13 2023-05-12 山东捷瑞数字科技股份有限公司 一种mysql数据库回档云平台
CN117708094A (zh) * 2023-12-26 2024-03-15 行吟信息科技(武汉)有限公司 数据处理方法、装置、电子设备和存储介质

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115982285A (zh) * 2023-03-10 2023-04-18 北京集度科技有限公司 数据处理方法、设备及计算机可读存储介质
CN115982285B (zh) * 2023-03-10 2023-07-07 北京集度科技有限公司 数据处理方法、设备及计算机可读存储介质
CN116107816A (zh) * 2023-04-13 2023-05-12 山东捷瑞数字科技股份有限公司 一种mysql数据库回档云平台
CN117708094A (zh) * 2023-12-26 2024-03-15 行吟信息科技(武汉)有限公司 数据处理方法、装置、电子设备和存储介质

Similar Documents

Publication Publication Date Title
CN115730008A (zh) 一种日志解析方法、数据同步系统、电子设备及存储介质
US9953051B2 (en) Multi-version concurrency control method in database and database system
US8078588B2 (en) Recoverable execution
US8200614B2 (en) Apparatus and method to transform an extract transform and load (ETL) task into a delta load task
US10191931B2 (en) Systems and methods for generating event stream data
US8341132B2 (en) System and method for applying deltas in a version control system
KR20110091776A (ko) 검출 이벤트에 따른 액션 실행을 지원하는 시스템, 검출 이벤트에 다른 액션 실행을 지원하는 방법, 지원 장치 및 컴퓨터 프로그램
US11288255B2 (en) Systems and methods for generating event stream data
CN110309227B (zh) 分布式数据回档方法、装置和计算机可读存储介质
CN109086382B (zh) 一种数据同步方法、装置、设备及存储介质
CN109240854B (zh) 对误操作引起的更改进行数据恢复的方法及系统
US20160321143A1 (en) Database rollback using wal
CN108984337A (zh) 一种数据同步异常的修复方法、修复装置、介质和计算设备
CN109101368B (zh) 一种数据处理方法及装置
CN116701355A (zh) 数据视图处理方法、装置、计算机设备及可读存储介质
CN110196880B (zh) 异构数据库数据同步方法和装置、存储介质及电子装置
CN111240891A (zh) 基于数据库多表间数据一致性的数据恢复方法及装置
EP3955127A1 (en) Automatic database schema updater
CN114722045A (zh) 时间序列数据的存储方法及装置
CN112612649A (zh) Cache数据库的日志恢复方法、系统及存储介质
US8631391B2 (en) Method and a system for process discovery
CN112612773A (zh) 数据库同步测试方法、装置、计算机设备及存储介质
CN111221801A (zh) 一种数据库迁移方法、系统及相关装置
US10922301B1 (en) Apparatus, computer program, and method for trigger-based tracking of database modifications
CN115756960B (zh) 误操作数据恢复方法、装置、计算机设备与存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination