一种数据库校验方法及系统的制作方法【专利摘要】一种数据库校验方法及系统,该方法包括:对主库和备库中各对应数据库的各对应表执行如下数据片校验:从源端获取当前待校验表的当前数据片的数据片校验和,并从目的端获取对应数据片的数据片校验和,根据获取的数据片校验和是否相同判断源端和目的端的当前数据片是否一致;如果当前数据片不一致,则对当前数据片执行行校验,否则将当前待校验表的其它未校验数据片作为当前数据片执行所述数据片校验;对不一致数据片执行如下行校验:从源端获取当前数据片中各行的主键值和行校验和,并从目的端获取当前数据片中各行的主键值和行校验和,根据获取的主键值所对应的行校验和是否相同判断源端和目的端的对应行是否一致,记录不一致行的主键值。【专利说明】-种数据库校验方法及系统
技术领域:
[0001]本申请设及数据库
技术领域:
,尤其设及一种数据库校验方法及系统。【
背景技术:
】[0002]数据库是企业口(InformationTechnology,信息技术)设施的核屯、组件,在持久化存储领域的作用不可替代。随着业务不断发展,数据规模和访问量不断膨胀,为了解决性能和容量的问题,一种通用的解决方案是在同城或异地为主数据库(简称主库)集群部署备用数据库(简称备库)集群,主库集群和备库集群可化合称为主备集群。主备集群通过数据库源生同步或第Ξ方同步工具进行数据同步,使得备库集群一方面可W承担读流量,提升访问性能;另一方面可W在主库集群出现异常时,顶替主库集群承担数据访问业务,达到容灾的目的。因此主备集群间的数据一致性尤其重要,运是备库集群发挥作用的前提条件。[0003]现有的用于校验主备集群间的数据一致性的校验工具比如址-table-checksum利用特殊的基于语句级复制的同步模式,在主库执行数据校验语句,将数据校验结果插入主库的辅助表;数据校验语句通过复制同步到备库,在备库执行数据校验语句,将数据校验结果插入备库的辅助表;校验工具通过对比主库和备库的辅助表的数据是否一致来达到校验效果。[0004]现有的校验工具址-t油le-checksum的缺点是:阳0化]首先,该校验工具需要依赖MySQL(-种数据库产品名称)特殊的基于语句级复制的同步模式,如果数据库不支持基于语句级复制的同步模式则无法使用该校验工具;[0006]其次,使用该校验工具无法精确定位不一致数据,进而无法根据校验结果对不一致数据进行修复。【
发明内容】[0007]本申请的目的在于提供一种数据库校验方法及系统。[000引为了达到上述目的,本申请公开了一种数据库校验方法,该方法包括:[0009]对主库和备库中各对应数据库的各对应表执行如下数据片校验:从源端获取当前待校验表的当前数据片的数据片校验和,并从目的端获取对应数据片的数据片校验和,根据获取的数据片校验和是否相同判断源端和目的端的当前数据片是否一致;如果当前数据片不一致,则对当前数据片执行行校验,否则将当前待校验表的其它未校验数据片作为当前数据片执行所述数据片校验;[0010]对不一致数据片执行如下行校验:从源端获取当前数据片中各行的主键值和行校验和,并从目的端获取当前数据片中各行的主键值和行校验和,根据获取的主键值所对应的行校验和是否相同判断源端和目的端的对应行是否一致,记录不一致行的主键值;[0011]其中,所述源端为主库和备库中的一个,所述目的端为主库和备库中的另一个。[0012]此外,执行所述行校验后,该方法还包括:[0013]根据所述不一致行的主键值从源端和目的端获取不一致行的所有字段的字段值;[0014]对获取的不一致行的所有字段的字段值逐一比较,查找出不一致行的不一致字段;[0015]记录不一致行的不一致字段的字段名称。[0016]此外,进行所述数据片校验时,还从源端和目的端获取当前数据片的行数,并根据获取的行数和所述数据片校验和是否相同判断源端和目的端的当前数据片是否一致。[0017]此外,进行所述数据片校验前,该方法还包括如下步骤:[0018]将针对数据库集群的数据库校验任务划分为多个校验子任务,将各校验子任务分发到多个数据校验模块中执行;[0019]其中,一个所述校验子任务用于对数据库集群中的一个数据库进行数据校验,或用于对数据库集群的数据库中的一个表进行数据校验。[0020]此外,执行所述行校验后,该方法还包括:[0021]根据所述不一致行的主键值获取与所述不一致行对应的数据库操作信息;[0022]根据所述数据库操作信息判断主库和备库之间是否存在相对于数据校验的延迟;如果存在,则在等待预先设定的时间间隔后,根据所述不一致行的主键值对主库和备库中的对应行重新校验;[0023]其中,所述数据库操作信息中包含:主库最后更新时间,备库最后更新时间,数据校验时间。[0024]为了达到上述目的,本申请还公开了一种数据库校验系统,包括:数据校验模块;其中:[00巧]数据校验模块包括:数据片校验单元,行校验单元;[0026]数据片校验单元,用于对主库和备库中各对应数据库的各对应表执行如下数据片校验:从源端获取当前待校验表的当前数据片的数据片校验和,并从目的端获取对应数据片的数据片校验和,根据获取的数据片校验和是否相同判断源端和目的端的当前数据片是否一致;如果当前数据片不一致,则对当前数据片执行行校验,否则将当前待校验表的其它未校验数据片作为当前数据片执行所述数据片校验;[0027]行校验单元,用于对不一致数据片执行如下行校验:从源端获取当前数据片中各行的主键值和行校验和,并从目的端获取当前数据片中各行的主键值和行校验和,根据获取的主键值所对应的行校验和是否相同判断源端和目的端的对应行是否一致,记录不一致行的主键值;[0028]其中,所述源端为主库和备库中的一个,所述目的端为主库和备库中的另一个。[0029]此外,所述数据校验模块中还包括:[0030]字段校验单元,用于根据所述不一致行的主键值从源端和目的端获取不一致行的所有字段的字段值,对获取的不一致行的所有字段的字段值逐一比较,查找出不一致行的不一致字段,并记录不一致行的不一致字段的字段名称。[0031]此外,所述数据片校验单元在进行所述数据片校验时,还从源端和目的端获取当前数据片的行数,并根据获取的行数和所述数据片校验和是否相同判断源端和目的端的当前数据片是否一致。[0032]此外,该系统中还包括:[0033]调度机,用于将针对数据库集群的数据库校验任务划分为多个校验子任务,将各校验子任务分发到多个所述数据校验模块中执行;[0034]其中,一个所述校验子任务用于对数据库集群中的一个数据库进行数据校验,或用于对数据库集群的数据库中的一个表进行数据校验。[0035]此外,该系统中还包括:[0036]复检模块,根据所述不一致行的主键值获取与所述不一致行对应的数据库操作信息;并根据所述数据库操作信息判断主库和备库之间是否存在相对于数据校验的延迟;如果存在,则在等待预先设定的时间间隔后,根据所述不一致行的主键值对主库和备库中的对应行重新校验;[0037]其中,所述数据库操作信息中包含:主库最后更新时间,备库最后更新时间,数据校验时间。[0038]与现有技术相比,本申请可W获得的技术效果包括:[0039](1)采用包括数据片校验、行校验和字段校验的多级校验策略,能够迅速发现并精确定位不一致数据;[0040](2)通过获取并比较校验和来进行数据片校验和行校验,不再需要对待校验表进行逐行逐字段的提取和匹配,节省了网络带宽,减少了校验所需耗费的成本;[0041](3)将分布式思想用于数据校验,可W-次性对一个数据库集群进行数据校验,将数据库集群校验任务分解成若干个子任务,多个子任务并发执行,提高了校验效率,充分利用了计算机资源;[0042](4)根据主库和备库间的同步延时信息对校验结果进行复检,最大程度减少了误检,提高了数据校验的准确性。[0043]在实际生产环境中采用本申请的数据库校验方法,对于容量为15G、6000万行记录的表开启一个并发进行单表校验,只需要11分钟即可完成数据校验;对于包含64个分库、每个分库包含491张表、容量为16T的数据库集群进行数据校验,每个分库开启3个并发,完成全量数据校验只需3小时。[0044]当然,实施本申请的任一产品并不一定需要同时达到W上所述的所有技术效果。【附图说明】[0045]此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:[0046]图1是本申请的数据库校验系统的一种结构示意图;[0047]图2是本申请实施例的一种数据库校验方法的方法流程图;[0048]图3是本申请实施例的另一种数据库校验方法的方法流程图;[0049]图4是本申请实施例的另一种数据库校验方法的方法流程图;[0050]图5是本申请实施例的另一种数据库校验方法的方法流程图;[0051]图6是本申请实施例的另一种数据库校验方法的方法流程图;[0052]图7是本申请实施例的数据库校验系统的系统结构图。【具体实施方式】[0053]W下将配合附图及实施例来详细说明本申请的实施方式,藉此对本申请如何应用技术手段来解决技术问题并达成技术功效的实现过程能充分理解并据W实施。[0054]在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。[0055]内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。[0056]计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可W由任何方法或技术来实现信息存储。信息可W是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器值RAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器巧EPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘值VD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可W被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。[0057]在对本发明的具体实施例进行描述前,先对本申请的数据库校验系统进行简要描述。如图1所示,为本申请的数据库校验系统的一种结构示意图。该系统中可W包含:调度机,校验机和中屯、节点;其中:[005引调度机和校验机之间、W及校验机和中屯、节点之间可W通过数据线或网络(局域网或广域网)连接。[0059]调度机中包含:元数据解析模块和任务调度模块。[0060]元数据解析模块,用于获取数据库集群的元数据信息,并根据元数据信息将数据校验任务拆分为多个校验子任务;[0061]元数据信息可W存储在调度机中,也可W存储在其它计算机中。[0062]任务调度模块,用于将各校验子任务分发到校验机的数据校验模块。[0063]数据校验模块,用于根据被分发的校验子任务对相应的数据库中包含的表进行数据校验,并将数据校验结果输出到中屯、节点。[0064]本申请中,为了提高数据校验的速度,可W在系统中设置多个数据校验模块,各数据校验模块可W并发执行不同的校验子任务。[0065]多个校验模块可W设置在一台校验机中,不同校验模块对应可同时运行的不同进程或线程。各校验模块也可W分别设置在不同的校验机中。[0066]中屯、节点,用于对各数据校验模块发送的数据校验结果进行汇总,生成数据库集群校验结果。[0067]连施例描沐[0068]下面W-实施例对本申请方法的实现作进一步说明。如图2所示,为本申请实施例的一种数据库校验方法的方法流程图;本实施例中针对主库集群和备库集群执行分布式数据校验;该方法包括:[0069]步骤S200:调度机的元数据解析模块根据待校验的数据库集群的名称获取数据库集群的元数据信息;[0070]上述数据库集群的名称可W是数据集群的标识符(ID)。[0071]数据库集群可W分为主库集群和与主库集群对应的备库集群,一个数据库集群中可包含多个数据库,不同的数据库可W设置在不同的计算机上。[0072]上述元数据信息中包含:数据库名称,数据库地址。[0073]上述数据库名称为数据库集群中所包含的数据库的名称。数据库的名称可W是数据库的标识符(ID)。[0074]上述数据库地址可W包含与数据库名称相对应的数据库的IPQnternetProtocol,互联网协议)地址和端口号。[0075]步骤S202:调度机的元数据解析模块根据数据库集群的元数据信息将数据校验任务拆分为多个校验子任务,生成包含多个校验子任务的子任务列表;[0076]本实施例中,可WW数据库为单位进行校验子任务的划分,即每一校验子任务对主库集群和备库集群的一个数据库进行数据校验(即对一个数据库中的所有表进行数据校验);也可数据库表(简称表)为单位进行校验子任务的划分,即每一校验子任务对主库集群和备库集群的一个数据库中的一个表进行数据校验。[0077]步骤S204:调度机的任务调度模块遍历子任务列表,进行校验任务的调度,即将各校验子任务分发到各数据校验模块中执行;[0078]本实施例中,调度机和校验机是通过网络连接的不同的计算机,因此调度机需要通过网络远程调度校验任务,即通过网络将各校验子任务分发到各数据校验模块中执行。[0079]步骤S206:各数据校验模块执行校验子任务,对主库集群和备库集群中的对应数据库进行数据校验,并将数据校验结果发送到中屯、节点;[0080]各数据校验模块根据被分发的校验子任务对相应的数据库中包含的数据库表(简称表)进行数据校验,具体步骤将在下文中详述。[0081]步骤S208:中屯、节点对各数据校验模块发送的数据校验结果进行存储,并汇总生成数据库集群校验结果;[0082]上述数据库集群校验结果中包含被校验的数据库集群中的:不一致的表的名称,不一致的表所属的数据库名称,不一致的表的不一致信息清单。[0083]上述不一致信息清单中包含:不一致的行(也可称为记录)的主键值;或包含:不一致的行的主键值和不一致的字段的字段名称。[0084]下面W第二实施例对本申请方法的实现作进一步说明。如图3所示,为本申请实施例的另一种数据库校验方法的方法流程图,该方法包括:[00化]步骤S300:对主库和备库中各对应数据库的各对应表执行如下数据片校验:从源端获取当前待校验表的当前数据片的数据片校验和,并从目的端获取对应数据片的数据片校验和,根据获取的数据片校验和是否相同判断源端和目的端的当前数据片是否一致;如果当前数据片不一致,则对当前数据片执行行校验,否则将当前待校验表的其它未校验数据片作为当前数据片执行所述数据片校验。[0086]步骤S302:对不一致数据片执行如下行校验:从源端获取当前数据片中各行的主键值和行校验和,并从目的端获取当前数据片中各行的主键值和行校验和,根据获取的主键值所对应的行校验和是否相同判断源端和目的端的对应行是否一致,记录不一致行的主键值;[0087]其中,所述源端为主库和备库中的一个,所述目的端为主库和备库中的另一个。[0088]下面W第Ξ实施例对本申请方法的实现作进一步说明。如图4所示,为本申请实施例的另一种数据库校验方法的方法流程图;本实施例中针对主库和备库中的表执行数据校验,并将不一致数据精确定位到表中每一不一致行的不一致字段;该方法包括:[0089]步骤S400:将源端(例如,主库)的待校验表中包含的记录(行)划分为多个数据片;[0090]本步骤中,可W采用定长分片方式进行分片,例如:将待校验表的总记录数记作N,将预先设定的数据片长度值记作成,进行上述分片时,可W使用主键对待校验表进行排序,并依序将待校验表划分为[N/MJ个数据片,或划分为「N/N,1个数据片;其中,11^表示向下取整,[1.表示向上取整。[0091]上述主键分为单主键和复合主键两类。单主键是仅包含一个字段的主键,复合主键是包含多个字段的主键。[0092]除了定长分片方式W外,,还可W采用字段值域范围分片方式进行分片,即根据待检验表的一个或多个字段(通常为主键字段)的取值范围进行分片。[0093]例如,待校验表中包含用户标识符字段,用户标识符字段在待校验表中的取值范围是:[IDi,IDwi],可W根据用户标识符字段的取值范围把待校验表划分为多个数据片;例如:[0094]将用户标识符字段值在区间[IDi,102)的记录划分到第1个数据片;[0095]将用户标识符字段值在区间[102,103)的记录划分到第2个数据片;[0096]…[0097]将用户标识符字段值在区间[ID。,IDw)的记录划分到第η个数据片;[0098]其中,"["表示闭区间/')"表示开区间。[0099]步骤S402:向源端发送查询请求,W便从源端获取当前待校验数据片的行数和数据片校验和,或从源端获取当前待校验数据片的数据片校验和;[0100]本步骤中,数据片校验和可W使用数据库系统提供的聚合函数和校验和函数在源端计算。阳101]聚合函数用于对一组行记录行进行计算,得到一个结果;聚合函数包括:AVG(用于计算平均值的函数)、C0UNT(用于计算指定组中项目的数量的函数)、SUM(用于计算指定数据的和的函数)等。阳10引校验和函数可W是散列(HASH)函数,例如MD5(MessageDigest5,信息摘要5)函数。阳103]MD5是计算机安全领域广泛使用的一种散列函数,用于提供消息的完整性保护。在数据库领域,通过MD5函数可W对数据生成散列值。阳104]如果采用上述定长分片方式,本步骤中可W先从源端查询当前待校验数据片的最小主键,根据该最小主键W及数据片长度向源端发送上述查询请求。阳105]如果主键为复合主键,最小主键可W通过依序对比各主键字段获得。阳106]此外,如果采用上述定长分片方式,本步骤中还需要从源端查询当前待校验数据片的最大主键,W便使用当前待校验数据片的最小主键和最大主键在后续步骤中确定目的端的对应数据片。阳107]如果采用上述字段值域范围分片方式,本步骤中可W根据字段的取值范围发送上述查询请求。[0108]步骤S404:向目的端(例如,备库)发送查询请求,W便从目的端获取当前待校验数据片的行数和数据片校验和,或从目的端获取当前待校验数据片的数据片校验和;[0109]本步骤中,数据片校验和可W使用数据库系统提供的聚合函数和校验和函数在目的端计算。[0110]如果采用上述定长分片方式,本步骤中可W使用在步骤S402中获得的最小主键和最大主键向目的端发送上述查询请求,W便获取目的端中与源端相对应的待校验数据片的行数和数据片校验和,或获取目的端中与源端相对应的待校验数据片的数据片校验和。阳111]如果采用上述字段值域范围分片方式,本步骤中可W根据字段的取值范围发送上述查询请求,W便获取目的端中与源端相对应的待校验数据片的行数和数据片校验和,或获取目的端中与源端相对应的待校验数据片的数据片校验和。[0112]步骤S406:比较从源端和目的端获取的当前待校验数据片的行数和数据片校验和是否相同:[0113]如果行数和数据片校验和都相同,则表明当前待校验数据片的数据一致,跳转至步骤S422;[0114]如果从源端和目的端获取的行数和/或数据片校验和不相同,则表明当前待校验数据片的数据不一致,跳转至步骤S408,对数据不一致的数据片执行行校验。[0115]此外,根据MD5等散列算法的性质可知,当从源端和目的端获取的当前待校验数据片的数据片校验和相同时,表明有极高的概率当前待校验数据片的数据一致;当从源端和目的端获取的当前待校验数据片的数据片校验和不同时,表明当前待校验数据片的数据不一致。[0116]因此,本步骤中也可W仅通过对比数据片校验和来判断当前待校验数据片的数据是否一致,即如果从源端和目的端获取的数据片校验和相同,则表明当前待校验数据片的数据一致,跳转至步骤S422;如果从源端和目的端获取的数据片校验和不相同,则表明当前待校验数据片的数据不一致,跳转至步骤S408,对数据不一致的数据片执行行校验。[0117]当然,同时比较行数和数据片校验和可W提高数据校验的准确率。此外,由于数据片校验和的数据长度通常远远大于行数的数据长度,因此比较行数的速度要高于比较数据片校验和,在某些情况下采用先比较行数,后比较数据片校验和的方式可W更快地确定不一致数据片。[0118]步骤S408:向源端发送查询请求,W便从源端获取当前待校验数据片每一行的主键值和行校验和;[0119]本步骤中,行校验和可W使用数据库系统提供的聚合函数和校验和函数在源端计算。[0120]如果采用上述定长分片方式,本步骤中可W根据当前待校验数据片的最小主键和最大主键向源端发送上述查询请求。阳121]如果采用上述字段值域范围分片方式,本步骤中可W根据字段的取值范围发送上述查询请求。[0122]步骤S410:向目的端发送查询请求,W便从目的端获取当前待校验数据片中每一行的主键值和行校验和;[0123]本步骤中,行校验和可W使用数据库系统提供的聚合函数和校验和函数在目的端计算。[0124]如果采用上述定长分片方式,本步骤中可W根据当前待校验数据片的最小主键和最大主键向目的端发送上述查询请求。[01巧]如果采用上述字段值域范围分片方式,本步骤中可W根据字段的取值范围向目的端发送上述查询请求。[01%]步骤S412:根据主键值逐行比较从源端和目的端获取的行校验和,查找并记录不一致的行的主键值,将当前待校验数据片的第一个不一致行作为当前待校验行执行下一步;[0127]上述不一致行可W包括:[0128]源端和目的端都包含具有相同的主键值的行,但对应的行校验和不同;[0129]源端包含某一主键值所对应的行,但目的端不存在该主键值对应的行;[0130]目的端包含某一主键值所对应的行,但源端不存在该主键值对应的行。阳131]步骤S414:根据当前待校验行的主键值向源端发送查询请求,W便从源端获取当前待校验行的所有字段(列)的字段值。[0132]步骤S416:根据当前待校验行的主键值向目的端发送查询请求,W便从目的端获取当前待校验行的所有字段(列)的字段值。[0133]步骤S418:对从源端和目的端获取的当前待校验行的所有字段的字段值逐一比较,查找出当前待校验行中不一致的字段,将不一致信息写入不一致信息清单;[0134]上述不一致信息清单中包含:不一致的行的主键值,不一致的字段的字段名称。[0135]步骤S420:判断当前待校验行是否为当前待校验数据片的最后一个不一致的行:如果是,则跳转至步骤S422;否则,将当前待校验数据片的下一个不一致行作为当前待校验行,跳转至步骤S414。[0136]步骤S422:判断当前待校验数据片是否是当前待校验表中的最后一个待校验数据片:如果是,则本流程结束;否则,将当前待校验表中的下一个待校验数据片作为当前待校验数据片,跳转至步骤S402。[0137]下面W第四实施例对本申请方法的实现作进一步说明。如图5所示,为本申请实施例的另一种数据库校验方法的方法流程图;本实施例中针对主库和备库中的表执行数据校验,并将不一致数据精确定位到表中每一不一致行;该方法包括:[013引步骤S500:将源端(例如,主库)的待校验表中包含的记录(行)划分为多个数据片;[0139]与步骤S400相同,本步骤中可W采用定长分片方式进行分片,或采用字段值域范围分片方式进行分片。[0140]步骤S502:向源端发送查询请求,W便从源端获取当前待校验数据片的行数和数据片校验和,或从源端获取当前待校验数据片的数据片校验和;阳141]本步骤中,数据片校验和可W使用数据库系统提供的聚合函数和校验和函数在源端计算。阳142]如果采用上述定长分片方式,本步骤中可W先从源端查询当前待校验数据片的最小主键,根据该最小主键W及数据片长度向源端发送上述查询请求。阳143]此外,如果采用上述定长分片方式,本步骤中还需要从源端查询当前待校验数据片的最大主键。[0144]如果采用上述字段值域范围分片方式,本步骤中可W根据字段的取值范围发送上述查询请求。[0145]步骤S504:向目的端(例如,备库)发送查询请求,W便从目的端获取当前待校验数据片的行数和数据片校验和,或从目的端获取当前待校验数据片的数据片校验和;阳146]本步骤中,数据片校验和可W使用数据库系统提供的聚合函数和校验和函数在目的端计算。[0147]如果采用上述定长分片方式,本步骤中可W使用在步骤S502中获得的最小主键和最大主键向目的端发送上述查询请求,W便获取目的端中与源端相对应的待校验数据片的行数和数据片校验和,或获取目的端中与源端相对应的待校验数据片的数据片校验和。[0148]如果采用上述字段值域范围分片方式,本步骤中可W根据字段的取值范围发送上述查询请求,W便获取目的端中与源端相对应的待校验数据片的行数和数据片校验和,或获取目的端中与源端相对应的待校验数据片的数据片校验和。[0149]步骤S506:比较从源端和目的端获取的当前待校验数据片的行数和数据片校验和是否相同:[0150]如果行数和数据片校验和都相同,则表明当前待校验数据片的数据一致,跳转至步骤S514;阳151]如果从源端和目的端获取的行数和/或数据片校验和不相同,则表明当前待校验数据片的数据不一致,跳转至步骤S508,对数据不一致的数据片执行行校验。阳152]同样,本步骤中也可W仅通过对比数据片校验和来判断当前待校验数据片的数据是否一致,即如果从源端和目的端获取的数据片校验和相同,则表明当前待校验数据片的数据一致,跳转至步骤S514;如果从源端和目的端获取的数据片校验和不相同,则表明当前待校验数据片的数据不一致,跳转至步骤S508,对数据不一致的数据片执行行校验。[0153]步骤S508:向源端发送查询请求,W便从源端获取当前待校验数据片每一行的主键值和行校验和;[0154]本步骤中,行校验和可W使用数据库系统提供的聚合函数和校验和函数在源端计算。[0155]如果采用上述定长分片方式,本步骤中可W根据当前待校验数据片的最小主键和最大主键向源端发送上述查询请求。阳156]如果采用上述字段值域范围分片方式,本步骤中可W根据字段的取值范围发送上述查询请求。阳157]步骤S510:向目的端发送查询请求,W便从目的端获取当前待校验数据片中每一行的主键值和行校验和;[0158]本步骤中,行校验和可W使用数据库系统提供的聚合函数和校验和函数在目的端计算。[0159]如果采用上述定长分片方式,本步骤中可W根据当前待校验数据片的最小主键和最大主键向目的端发送上述查询请求。[0160]如果采用上述字段值域范围分片方式,本步骤中可W根据字段的取值范围向目的端发送上述查询请求。阳161]步骤S512:根据主键值逐行比较从源端和目的端获取的行校验和,查找不一致的行的主键值,将不一致信息写入不一致信息清单;[0162]上述不一致行可W包括:阳163]源端和目的端都包含具有相同的主键值的行,但对应的行校验和不同;[0164]源端包含某一主键值所对应的行,但目的端不存在该主键值对应的行;[01化]目的端包含某一主键值所对应的行,但源端不存在该主键值对应的行。[0166]上述不一致信息清单中包含:不一致的行的主键值。[0167]步骤S514:判断当前待校验数据片是否是当前待校验表中的最后一个待校验数据片:如果是,则本流程结束;否则,将当前待校验表中的下一个待校验数据片作为当前待校验数据片,跳转至步骤S502。[0168]下面W第五实施例对本申请方法的实现作进一步说明。如图6所示,为本申请实施例的另一种数据库校验方法的方法流程图;本实施例中针对主库和备库间的不一致数据进行复检,复检可W在对表完成校验后立即开始;该方法包括:[0169]步骤S600:获取对主库和备库进行数据校验所生成的不一致信息清单;[0170]上述不一致信息清单可W由图4或图5所示的数据库校验方法生成。阳171]步骤S602:根据不一致信息清单获取用于判断对应数据库的同步是否存在相对于数据校验的延迟的数据库操作信息;[0172]数据库的同步通常是在主库中的数据发生更新后,再将更新的数据同步到备库中,主库中的数据更新和备库中相应数据的更新之间存在时间差。如果对主库和备库进行数据校验的时间发生在主库中的数据发生更新之后、备库中相应的数据发生更新之前,贝U数据库的同步存在相对于数据校验的延迟。阳173]上述数据库操作信息中可W包含:主库最后更新时间,备库最后更新时间,数据校验时间。[0174]上述数据库操作信息中的主库最后更新时间和备库最后更新时间可W分别从主库和备库的数据库日志文件中获取,也可W通过调用数据库同步软件的相应查询接口来获取。[01巧]上述数据库操作信息中的校验时间可W从主库和备库的数据库日志文件中获取,或者在进行数据校验、复检时记录相应的信息。[0176]上述主库最后更新时间和备库最后更新时间可W是针对数据库进行数据更新的时间,也可W是针对数据库中的单个表进行数据更新的时间。[0177]步骤S604:根据上述数据库操作信息判断主库和备库之间是否存在相对于数据校验的延迟;如果存在延迟,则执行步骤S606;如果不存在延迟,则本复检流程结束;阳17引将主库最后更新时间记作T。,备库最后更新时间记作Tb,数据校验时间记作在W下情况下主库和备库之间的同步存在相对于数据校验的延迟:[0179]L〉Tb;表明到当前时间为止,备库尚未对主库的最新的数据更新进行同步,即主库和备库之间的同步必然存在相对于数据校验的延迟;阳180]Tg<L<Tb;同样表明主库和备库之间的同步存在相对于数据校验的延迟。阳181]步骤S606:等待预先设定的时间间隔,例如,等待5秒。[0182]步骤S608:根据不一致信息清单中包含的不一致的行的主键值从主库和备库分别获取对应的行数据,进行逐字段比较,判断对应行数据是否一致,如果对应行数据一致,则更新不一致信息清单,即从不一致信息清单中删除对应记录。[0183]步骤S610:查看不一致信息清单中是否还包含不一致行信息,如果不包含,则本复检流程结束;否则执行下一步。[0184]步骤S612:判断是否已完成最后一轮复检;如果是,则本复检流程结束,否则,跳转至步骤S602;阳化5]为了尽量避免主备库之间的延迟所造成的数据校验错误,可W进行多轮复检,例如进行2轮复检。阳186]下面W另一实施例对本申请系统的实现作进一步说明。如图7所示,为本申请实施例的数据库校验系统的系统结构图,数据库校验系统包括:数据校验模块710,数据校验模块710中包括:数据片校验单元711,行校验单元712;其中:阳187]数据片校验单元,用于对主库和备库中各对应数据库的各对应表执行如下数据片校验:从源端获取当前待校验表的当前数据片的数据片校验和,并从目的端获取对应数据片的数据片校验和,根据获取的数据片校验和是否相同判断源端和目的端的当前数据片是否一致;如果当前数据片不一致,则对当前数据片执行行校验,否则将当前待校验表的其它未校验数据片作为当前数据片执行所述数据片校验;[0188]所述数据片校验单元在进行所述数据片校验时,还从源端和目的端获取当前数据片的行数,并根据获取的行数和所述数据片校验和是否相同判断源端和目的端的当前数据片是否一致。[0189]行校验单元,用于对不一致数据片执行如下行校验:从源端获取当前数据片中各行的主键值和行校验和,并从目的端获取当前数据片中各行的主键值和行校验和,根据获取的主键值所对应的行校验和是否相同判断源端和目的端的对应行是否一致,记录不一致行的主键值;阳190]其中,所述源端为主库和备库中的一个,所述目的端为主库和备库中的另一个。阳191]此外,所述数据校验模块中还包括:阳192]字段校验单元,用于根据所述不一致行的主键值从源端和目的端获取不一致行的所有字段的字段值,对获取的不一致行的所有字段的字段值逐一比较,查找出不一致行的不一致字段,并记录不一致行的不一致字段的字段名称。阳193]此外,该系统中还包括:[0194]调度机,用于将针对数据库集群的数据库校验任务划分为多个校验子任务,将各校验子任务分发到多个所述数据校验模块中执行;[0195]其中,一个所述校验子任务用于对数据库集群中的一个数据库进行数据校验,或用于对数据库集群的数据库中的一个表进行数据校验。阳196]此外,该系统中还包括:[0197]复检模块,根据所述不一致行的主键值获取与所述不一致行对应的数据库操作信息;并根据所述数据库操作信息判断主库和备库之间是否存在相对于数据校验的延迟;如果存在,则在等待预先设定的时间间隔后,根据所述不一致行的主键值对主库和备库中的对应行重新校验;[0198]其中,所述数据库操作信息中包含:主库最后更新时间,备库最后更新时间,数据校验时间。[0199]所述系统与前述的方法流程描述对应,更具体的描述请参考上述方法流程的叙述,不再一一寶述。阳200]上述说明示出并描述了本申请的若干优选实施例,但如前所述,应当理解本申请并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本申请的精神和范围,则都应在本申请所附权利要求的保护范围内。【主权项】1.一种数据库校验方法,其特征在于,该方法包括:对主库和备库中各对应数据库的各对应表执行如下数据片校验:从源端获取当前待校验表的当前数据片的数据片校验和,并从目的端获取对应数据片的数据片校验和,根据获取的数据片校验和是否相同判断源端和目的端的当前数据片是否一致;如果当前数据片不一致,则对当前数据片执行行校验,否则将当前待校验表的其它未校验数据片作为当前数据片执行所述数据片校验;对不一致数据片执行如下行校验:从源端获取当前数据片中各行的主键值和行校验和,并从目的端获取当前数据片中各行的主键值和行校验和,根据获取的主键值所对应的行校验和是否相同判断源端和目的端的对应行是否一致,记录不一致行的主键值;其中,所述源端为主库和备库中的一个,所述目的端为主库和备库中的另一个。2.根据权利要求1所述的方法,其特征在于,执行所述行校验后,该方法还包括:根据所述不一致行的主键值从源端和目的端获取不一致行的所有字段的字段值;对获取的不一致行的所有字段的字段值逐一比较,查找出不一致行的不一致字段;记录不一致行的不一致字段的字段名称。3.根据权利要求1所述的方法,其特征在于,进行所述数据片校验时,还从源端和目的端获取当前数据片的行数,并根据获取的行数和所述数据片校验和是否相同判断源端和目的端的当前数据片是否一致。4.根据权利要求1所述的方法,其特征在于,进行所述数据片校验前,该方法还包括如下步骤:将针对数据库集群的数据库校验任务划分为多个校验子任务,将各校验子任务分发到多个数据校验模块中执行;其中,一个所述校验子任务用于对数据库集群中的一个数据库进行数据校验,或用于对数据库集群的数据库中的一个表进行数据校验。5.根据权利要求1所述的方法,其特征在于,执行所述行校验后,该方法还包括:根据所述不一致行的主键值获取与所述不一致行对应的数据库操作信息;根据所述数据库操作信息判断主库和备库之间是否存在相对于数据校验的延迟;如果存在,则在等待预先设定的时间间隔后,根据所述不一致行的主键值对主库和备库中的对应行重新校验;其中,所述数据库操作信息中包含:主库最后更新时间,备库最后更新时间,数据校验时间。6.-种数据库校验系统,其特征在于,包括:数据校验模块;其中:数据校验模块包括:数据片校验单元,行校验单元;数据片校验单元,用于对主库和备库中各对应数据库的各对应表执行如下数据片校验:从源端获取当前待校验表的当前数据片的数据片校验和,并从目的端获取对应数据片的数据片校验和,根据获取的数据片校验和是否相同判断源端和目的端的当前数据片是否一致;如果当前数据片不一致,则对当前数据片执行行校验,否则将当前待校验表的其它未校验数据片作为当前数据片执行所述数据片校验;行校验单元,用于对不一致数据片执行如下行校验:从源端获取当前数据片中各行的主键值和行校验和,并从目的端获取当前数据片中各行的主键值和行校验和,根据获取的主键值所对应的行校验和是否相同判断源端和目的端的对应行是否一致,记录不一致行的主键值;其中,所述源端为主库和备库中的一个,所述目的端为主库和备库中的另一个。7.根据权利要求6所述的系统,其特征在于,所述数据校验模块中还包括:字段校验单元,用于根据所述不一致行的主键值从源端和目的端获取不一致行的所有字段的字段值,对获取的不一致行的所有字段的字段值逐一比较,查找出不一致行的不一致字段,并记录不一致行的不一致字段的字段名称。8.根据权利要求6所述的系统,其特征在于,所述数据片校验单元在进行所述数据片校验时,还从源端和目的端获取当前数据片的行数,并根据获取的行数和所述数据片校验和是否相同判断源端和目的端的当前数据片是否一致。9.根据权利要求6所述的系统,其特征在于,该系统中还包括:调度机,用于将针对数据库集群的数据库校验任务划分为多个校验子任务,将各校验子任务分发到多个所述数据校验模块中执行;其中,一个所述校验子任务用于对数据库集群中的一个数据库进行数据校验,或用于对数据库集群的数据库中的一个表进行数据校验。10.根据权利要求6所述的系统,其特征在于,该系统中还包括:复检模块,根据所述不一致行的主键值获取与所述不一致行对应的数据库操作信息;并根据所述数据库操作信息判断主库和备库之间是否存在相对于数据校验的延迟;如果存在,则在等待预先设定的时间间隔后,根据所述不一致行的主键值对主库和备库中的对应行重新校验;其中,所述数据库操作信息中包含:主库最后更新时间,备库最后更新时间,数据校验时间。【文档编号】G06F17/30GK105989044SQ201510059589【公开日】2016年10月5日【申请日】2015年2月4日【发明人】蔡畅【申请人】阿里巴巴集团控股有限公司