用于主备数据一致性校验的方法和设备与流程

文档序号:12550674阅读:638来源:国知局
用于主备数据一致性校验的方法和设备与流程

本申请涉及计算机领域,尤其涉及一种用于主备数据一致性校验的方法和设备。



背景技术:

为实现高可靠性,数据库系统一般采取一主一备或一主多备的主备架构,包括一个主数据库服务器以及一个或者多个备数据库服务器。在主备架构的数据库系统中,主数据库服务器通过向备数据库服务器传输日志来完成数据的备份,由于日志中记录了主数据库服务器对数据所进行操作,当主数据库宕机时,备数据库服务器可以根据日志恢复这些数据。

为了性能考虑,主数据库服务器与备数据库服务器之间一般采取异步模式,即主数据库服务器在提交事务时,不必等待相应的事务提交操作日志发送到备数据库服务器之后,才完成提交。上述异步模式可能造成事务提交完成并通知用户后,相应的日志还未传输到备数据库服务器的情况。如果此时主数据库服务器宕机、切换到备数据库服务器时,由于无法通过日志来恢复相应的数据,那么这些事务的数据就会丢失。

为防止主备切换后数据丢失,切换时需要检查备数据库服务器是否已有全部已提交事务的日志,然后决定是否进行切换。但由于主数据库服务器宕机,无法获知最后生成的日志号以与当前备数据库服务器的日志对比,所以无法判断备数据库服务器中是否已有所有日志,即主备切换后是否会有数据丢失。

现有的一种方案中,主数据库服务器每隔固定的时间(比如10秒),写入当前时间到一个心跳表中,此心跳表的记录的时间戳不断同步到备数据库服务器。主备切换时,从备数据库服务器查询此心跳表记录的最后时间,可以判断有多长时间的主数据库服务器数据没有同步到备数据库服务器。如果备数据库服务器心跳表的最后时间是09:00:10,当前时间是9:00:35,就可以估算出,最多有25秒的数据没有同步过来(也有可能这 25秒主数据库服务器并没有数据更新)。如果这个时间值是在容忍范围内(例如1分钟),则进行切换。但是,这种方法无法准确比较主数据库服务器和备数据库服务器中的数据是否一致,因此无法精确判断主备切换后是否会有数据丢失。

申请内容

本申请的一个目的是提供一种用于主备数据一致性校验的方法和设备,用以解决现有技术中无法精确判断主备切换后是否会有数据丢失的问题。

为实现上述目的,本申请提供了一种在主数据库服务器端用于主备数据一致性校验的方法,该方法包括:

向当前待发送的日志包中写入标记信息,生成标记日志包,其中所述标记信息表示主数据库服务器的日志更新状态;

向备数据库服务器发送所述标记日志包,以使所述备数据库服务器根据所述标记日志包中的标记信息所表示的所述主数据库服务器的日志更新状态,确定主备数据的一致性。

本申请提供的一种在备数据库服务器端用于主备数据一致性校验的方法,该方法包括:

接收主数据库服务器发送的标记日志包,其中所述标记日志包中包含标记信息;

根据所述标记日志包中的标记信息所表示的所述主数据库服务器的日志更新状态,确定主备数据的一致性。

基于本申请的另一方面,还提供了一种用于主备数据一致性校验的主数据库服务器,该主数据库服务器包括:

标记写入装置,用于向当前待发送的日志包中写入标记信息,生成标记日志包,其中所述标记信息表示主数据库服务器的日志更新状态;

发送装置,用于向备数据库服务器发送所述标记日志包,以使所述备数据库服务器根据所述标记日志包中的标记信息所表示的所述主数据库服务器的日志更新状态,确定主备数据的一致性。

本申请提供的一种用于主备数据一致性校验的备数据库服务器,该备 数据库服务器包括:

接收装置,用于接收主数据发送的标记日志包,其中所述标记日志包中包含标记信息;

校验装置,用于根据所述标记日志包中的标记信息所表示的所述主数据库服务器的日志更新状态,确定主备数据的一致性。

与现有技术相比,本申请的技术方案中的主数据库服务器在每次发送日志包时,向当前待发送的日志包中插入表示主数据库服务器当前日志更新状态的标记信息,生成包含标记信息的标记日志包,将其发送给备数据库服务器。由于标记信息是通过当前待发送的日志包进行传递,因此该日志包会在极短的时间内向备数据库服务器发送,因此主数据库服务器的日志更新状态几乎是实时地通过日志包同步到备数据库服务器,由此备数据库服务器总是可以在最短的时间内获知主数据库服务器的日志更新状态,由此提高主备数据一致性判断的准确性,精确地判断主备切换后是否会有数据丢失。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:

图1为本申请实施例提供的用于主备数据一致性校验的数据库系统;

图2为主数据库服务器和备数据库服务器进行主备数据一致性校验的流程图;

图3为主数据库服务器和备数据库服务器进行主备数据一致性校验的一种优选方式的流程图;

图4为本申请实施例提供的用于主备数据一致性校验的主数据库服务器的结构示意图;

图5为本申请实施例提供的用于主备数据一致性校验的备数据库服务器的结构示意图;

图6为本申请实施例提供的一种优选的用于主备数据一致性校验的主数据库服务器的结构示意图;

附图中相同或相似的附图标记代表相同或相似的部件。

具体实施方式

下面结合附图对本申请作进一步详细描述。

在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

图1示出了用于主备数据一致性校验的数据库系统,以一主一备的构架为例,该数据库系统中包括一个主数据库服务器110以及一个通过网络与其连接的备数据库服务器120。根据实际的应用需求,该数据库系统也可以为包含多个备数据库服务器的一主多备的构架,其中任意一个备数据库服务器与主数据库服务器之间进行主备数据一致性校验方式,与本例中一主一备的构架类似。

本领域技术人员应当理解,所述数据库系统中的主数据库服务器110和备数据库服务器120可以包括但不限于用户设备、网络设备或用户设备与网络设备通过网络相集成所构成的设备。所述用户设备包括但不限于个 人计算机、触控终端等实现;所述网络设备包括但不限于如网络主机、单个网络服务器、多个网络服务器集或基于云计算的计算机集合等实现。在此,云由基于云计算(Cloud Computing)的大量主机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟计算机。

图2示出了所述主数据库服务器110和所述备数据库服务器120之间进行主备数据一致性校验的处理流程图。其中,在所述主数据库服务器110端,用于主备数据一致性校验的方法包括:

步骤S201,主数据库服务器向当前待发送的日志包中写入标记信息,生成标记日志包。

步骤S202,主数据库服务器向备数据库服务器发送所述标记日志包,以使所述备数据库服务器根据所述标记日志包中的标记信息所表示的所述主数据库服务器的日志更新状态,确定主备数据的一致性。

其中,待发送的日志包是指主数据库服务器在当前时刻将要向备数据库服务器发送的日志包,即该日志包会在极短的时间内向备数据库服务器发送,因此主数据库服务器的日志更新状态几乎是实时地通过日志包同步到备数据库服务器,由此备数据库服务器总是可以在最短的时间内获知主数据库服务器的日志更新状态,由此提高主备数据一致性判断的准确性,精确地判断主备切换后是否会有数据丢失。

所述标记信息表示主数据库服务器的日志更新状态,由于本方案的目的在于对主备数据的一致性进行校验,因此所述日志更新状态可以设置两种情形:1、正在更新或已更新日志;2、未更新日志。该日志更新状态表示在将要发送所述待发送的日志包时,相较于该日志包中最后产生的日志,主数据库服务器中是否有新的日志已经产生或者正在产生。若在第1种情形下,表示有新的日志已经产生或者正在产生,主数据库服务器中存在数据更新,而该数据更新的操作并未标记日志包中的日志所记录,此时就会造成主数据库服务器中的数据与备数据库服务器中的数据不一致。相应地,在第2种情形下,表示没有新的日志产生,主数据库服务器中没有数据更新,主数据库服务器最后产生的日志已经在标记日志包中准备发送,因此 备数据库服务器可以根据其接收到的标记日志包中的日志复制主数据库服务器在发送该标记日志包时的数据,使得两者的数据一致。

对应所述正在更新或已更新日志的日志更新状态,相应的标记信息可以是更新标记;而对应所述未更新日志的日志更新状态,相应的标记信息可以是未更新标记。

具体地,在步骤S201中,主数据库服务器向当前待发送的日志包中写入标记信息,包括:若主数据库服务器的日志更新状态为正在更新或已更新日志,向当前待发送的日志包中写入更新标记;若主数据库服务器的日志更新状态为未更新日志,向当前待发送的日志包中写入未更新标记。

在实际应用中,基于编码方式或者其它因素的考虑,所述更新标记和未更新标记可以采用不同的形式。例如,可以是日志号的形式,将主数据库服务器最近产生的日志的日志号或者当前正在产生的日志的日志号作为更新标记,而对应地,将待发送的日志包中最近产生的一个日志的日志号或者一个预设的特殊日志号(如0或者00等)作为未更新标记。

还如,可以是比特位的形式,即以一个比特位(1或0)表示两种情形。具体的,以比特位为1表示日志更新状态为正在更新或已更新日志,而以比特位为0表示表示日志更新状态为未更新日志。当然,也可以相反的取值表示相应的日志更新状态。

此外,还可以是在一种日志更新状态时写入空的标记信息,而在另一种日志更新状态时写入任意内容的标记信息。具体的,在未更新日志的日志更新状态时,写入空的标记信息(即不写入任何标记);而在正在更新或已更新日志的日志更新状态时,写入任意内容的标记信息(可以是比特位、日志号等)。当然,也可以采用相反的形式表示相应的日志更新状态。

在此,本领域技术人员应当理解,所述更新标记和未更新标记的具体形式仅为举例,其他现有的或今后可能出现的更新标记和未更新标记的形式如可适用于本发明,也应包含在本发明保护范围以内,并在此以引用方式包含于此。

相应地,在所述备数据库服务器120端,用于主备数据一致性校验的方法包括:

步骤S203,备数据库服务器接收主数据库服务器发送的标记日志包,其中所述标记日志包中包含标记信息。

步骤S204,备数据库服务器根据所述标记日志包中的标记信息所表示的所述主数据库服务器的日志更新状态,确定主备数据的一致性。

根据主数据库服务器不同的日志更新状态,主数据库服务器向标记日志包中写入的标记信息可能是更新标记,也可能是未更新标记。因此步骤S204具体包括:根据所述标记日志包中的更新标记获取所述主数据库服务器的日志更新状态为正在更新或已更新日志,并由所述日志更新状态确定所述主备数据不一致;或者根据所述标记日志包中的未更新标记获取所述主数据库服务器的日志更新状态为未更新日志,并由所述日志更新状态确定所述主备数据一致。

以前述日志号的形式为例,若所述标记日志包中包含的所有日志的日志号为101~105。在该日志包将要被发送时,主数据库服务器正在产生新的日志106,因此该日志包中写入的标记信息即为由日志号106所表示的更新标记。备数据库服务器接收到包含日志号106的标记日志包之后,由于日志包中最后生成的日志的日志号为105,与更新标记的日志号106不同,因此,备数据库服务器能够获取所述主数据库服务器的日志更新状态为正在更新或已经更新日志,此时备数据库服务器中的日志少于主数据库服务器的日志。若此时进行主备切换的话,备数据库服务器有可能无法根据其拥有的日志恢复主数据库服务器中的所有数据,由此确定主备数据不一致,将会导致数据丢失。

在另一种情况下,若在该日志包将要被发送时,主数据库服务器并未产生新的日志,即主数据库服务器最后产生的日志即为该日志包中最后产生的日志(日志号为105的日志),那么该日志包中写入的标记信息即为由日志号105所表示的更新标记。备数据库服务器接收到该标记日志包之后,由于日志包中最后生成的日志的日志号为105,与更新标记的日志号105相同,因此,备数据库服务器能够获取所述主数据库服务器的日志更新状态为未更新日志,可以确定主数据库服务器中的所有日志已经都同步至备数据库服务器,若此时进行主备切换的话,备数据库服务器能够根据 其拥有的日志恢复主数据库服务器中的所有数据,由此确定主备数据一致,不会导致数据丢失。

在实际应用中,在一次事务处理所产生的所有日志中,最后的一个日志为事务提交操作日志。数据库服务器在进行事务处理时,只有已经提交的事务会对数据进行实际的更新,从而有可能造成数据的丢失。因此,作为一种优选的实施方式,可以仅考虑主数据库服务器中的事务提交操作日志(例如数据库系统中COMMIT语句对应的日志),即所述日志更新状态可以仅考虑事务提交操作日志的更新状态,使得主备数据一致性校验的结果更加准确。

此时,步骤S201中主数据库服务器向当前待发送的日志包中写入标记信息,具体包括:若主数据库服务器的事务提交操作日志的更新状态为正在更新或已更新事务提交操作日志,向当前待发送的日志包中写入更新标记;若主数据库服务器的事务提交操作日志的更新状态为未更新事务提交操作日志,向当前待发送的日志包中写入未更新标记。

相应地,步骤S204中根据所述标记日志包中的标记信息所表示的所述主数据库服务器的日志更新状态,确定主备数据的一致性,具体包括:根据所述标记日志包中的更新标记获取所述主数据库服务器的日志更新状态为正在更新或已更新日志,并由所述日志更新状态确定所述主备数据不一致;或者根据所述标记日志包中的未更新标记获取所述主数据库服务器的日志更新状态为未更新日志,并由所述日志更新状态确定所述主备数据一致。

以前述比特位的形式为例,若在某一日志包将要被发送时,主数据库服务器正在进行事务的提交操作,同时产生相应的事务提交操作日志,此时主数据库服务器会将取值为1的一个比特位作为更新标记写入到该日志包中,以生成标记日志包。备数据库服务器接收到该标记日志包之后,可以根据该比特位的值获知主数据库服务器的日志更新状态为正在更新或已更新事务提交操作日志,主数据库服务器中最近产生的事务提交操作日志并未同步到备数据库服务器。若此时进行主备切换的话,备数据库服务器无法根据其拥有的日志恢复主数据库服务器中的所有数据,由此确定主 备数据不一致,将会导致数据丢失。

在实际应用中,标记日志包从写入标记信息到发送至备数据库服务器的时间虽然极短,但是也有较小的可能性在此段时间内出现问题。例如,主数据库服务器在进行事务A的提交,并且正在生成事务A的事务提交操作日志,此时向本次发送的标记日志包内写入的标记信息为更新标记,随后主数据库服务器完成事务A的提交操作,同时生成对应的事务提交操作日志。若主数据库服务器由于宕机而导致所述标记日志包未发送成功,则有可能使得备数据库服务器由于前一次接收到的标记日志包中的未更新标记而产生错误的判断。

为解决上述问题,本申请实施例还提供了一种优选的用于主备数据一致性校验的方法,如图3所示,在主数据库服务器110端,在向备数据库服务器发送所述标记日志包之后,还包括:

步骤S205,若所述标记日志包中包含更新标记,在确认所述备数据库服务器接收到所述标记日志包后,完成正在更新的事务提交操作日志所对应的事务提交操作。

其中,主数据库服务器确认所述备数据库服务器接收到所述标记日志包的方式可以根据应用场景的需求确定,例如通过可靠的传输协议来保证在备数据库服务器在接收到之后会发送相应的确认字符(例如TCP协议的ACK),或者备数据库服务器单独返回一个反馈消息告知主数据库服务器已经接收到等。

通过确定所述备数据库服务器接收到所述标记日志包后,再完成正在更新的事务提交操作日志所对应的事务提交操作,由此保证事务提交所造成的状态改变能够通知到备数据库服务器,以避免因前述提及的情况而造成备数据库服务器产生错误的判断,从而进一步提高主备数据一致性校验的准确性。

若每次在进行事务提交操作时,都需要等待相应的标记日志包发送完成才进行,可能会影响到事务处理的速度。因此,可以对所述步骤S205进行优化,具体为:若所述标记日志包中包含更新标记,且向所述备数据库服务器发送的前一标记日志包中包含未更新标记,则在确认所述备数据 库服务器接收到本次发送的标记日志包后,完成正在更新的事务提交操作日志所对应的事务提交操作。

若主数据库服务器向所述备数据库服务器发送的前一标记日志包中包含更新标记,那么备数据库服务器在接收到前一标记日志包时,已经可以确定了主备数据不一致,若本次发送的标记日志包中也包含更新标记,备数据库服务器收到后所确定的主备数据状态仍将是不一致。因此,无论备数据库服务器是否收到本次的标记日志包,均不会影响备数据库服务器对于当前主备数据一致性的判断结果。

因此,仅当本次发送的标记日志包中包含更新标记,而前一标记日志包中包含未更新标记时,才进行等待,在确认所述备数据库服务器接收到本次发送的标记日志包后,完成正在更新的事务提交操作日志所对应的事务提交操作。而当本次发送的标记日志包中包含更新标记,而前一标记日志包中也包含更新标记时,则无需进行等待,从而保证事务处理的速度。

图4示出了本申请实施例提供的一种用于主备数据一致性校验的主数据库服务器110,包括标记写入装置111和发送装置112。具体地,所述标记写入装置111用于向当前待发送的日志包中写入标记信息,生成标记日志包,其中所述标记信息表示主数据库服务器的日志更新状态;所述发送装置112用于向备数据库服务器发送所述标记日志包,以使所述备数据库服务器根据所述标记日志包中的标记信息所表示的所述主数据库服务器的日志更新状态,确定主备数据的一致性。

其中,待发送的日志包是指主数据库服务器在当前时刻将要向备数据库服务器发送的日志包,即该日志包会在极短的时间内向备数据库服务器发送,因此主数据库服务器的日志更新状态几乎是实时地通过日志包同步到备数据库服务器,由此备数据库服务器总是可以在最短的时间内获知主数据库服务器的日志更新状态,由此提高主备数据一致性判断的准确性,精确地判断主备切换后是否会有数据丢失。

所述标记信息表示主数据库服务器的日志更新状态,由于本方案的目的在于对主备数据的一致性进行校验,因此所述日志更新状态可以设置两种情形:1、正在更新或已更新日志;2、未更新日志。该日志更新状态表 示在将要发送所述待发送的日志包时,相较于该日志包中最后产生的日志,主数据库服务器中是否有新的日志已经产生或者正在产生。若在第1种情形下,表示有新的日志已经产生或者正在产生,主数据库服务器中存在数据更新,而该数据更新的操作并未标记日志包中的日志所记录,此时就会造成主数据库服务器中的数据与备数据库服务器中的数据不一致。相应地,在第2种情形下,表示没有新的日志产生,主数据库服务器中没有数据更新,主数据库服务器最后产生的日志已经在标记日志包中准备发送,因此备数据库服务器可以根据其接收到的标记日志包中的日志复制主数据库服务器在发送该标记日志包时的数据,使得两者的数据一致。

对应所述正在更新或已更新日志的日志更新状态,相应的标记信息可以是更新标记;而对应所述未更新日志的日志更新状态,相应的标记信息可以是未更新标记。

具体地,所述标记写入装置111用于在主数据库服务器的日志更新状态为正在更新日志时,向当前待发送的日志包中写入更新标记;或者在主数据库服务器的日志更新状态为未更新日志时,向当前待发送的日志包中写入未更新标记,生成标记日志包。

在实际应用中,基于编码方式或者其它因素的考虑,所述更新标记和未更新标记可以采用不同的形式。例如,可以是日志号的形式,将主数据库服务器最近产生的日志的日志号或者当前正在产生的日志的日志号作为更新标记,而对应地,将待发送的日志包中最近产生的一个日志的日志号或者一个预设的特殊日志号(如0或者00等)作为未更新标记。

还如,可以是比特位的形式,即以一个比特位(1或0)表示两种情形。具体的,以比特位为1表示日志更新状态为正在更新或已更新日志,而以比特位为0表示表示日志更新状态为未更新日志。当然,也可以相反的取值表示相应的日志更新状态。

此外,还可以是在一种日志更新状态时写入空的标记信息,而在另一种日志更新状态时写入任意内容的标记信息。具体的,在未更新日志的日志更新状态时,写入空的标记信息(即不写入任何标记);而在正在更新或已更新日志的日志更新状态时,写入任意内容的标记信息(可以是比特 位、日志号等)。当然,也可以采用相反的形式表示相应的日志更新状态。

在此,本领域技术人员应当理解,所述更新标记和未更新标记的具体形式仅为举例,其他现有的或今后可能出现的更新标记和未更新标记的形式如可适用于本发明,也应包含在本发明保护范围以内,并在此以引用方式包含于此。

相应地,本申请实施例还提供了一种用于主备数据一致性校验的备数据库服务器120,该备数据库服务器120的结构如图5所示,包括接收装置121和校验装置122。具体地,所述接收装置121用于接收主数据发送的标记日志包,其中所述标记日志包中包含标记信息;所述校验装置122用于根据所述标记日志包中的标记信息所表示的所述主数据库服务器的日志更新状态,确定主备数据的一致性。

根据主数据库服务器不同的日志更新状态,主数据库服务器向标记日志包中写入的标记信息可能是更新标记,也可能是未更新标记。因此,所述校验装置122具体用于:根据所述标记日志包中的更新标记获取所述主数据库服务器的日志更新状态为正在更新或已更新日志,并由所述日志更新状态确定所述主备数据不一致;或者根据所述标记日志包中的未更新标记获取所述主数据库服务器的日志更新状态为未更新日志,并由所述日志更新状态确定所述主备数据一致。

以前述日志号的形式为例,若所述标记日志包中包含的所有日志的日志号为101~105。在该日志包将要被发送时,主数据库服务器正在产生新的日志106,因此该日志包中写入的标记信息即为由日志号106所表示的更新标记。备数据库服务器接收到包含日志号106的标记日志包之后,由于日志包中最后生成的日志的日志号为105,与更新标记的日志号106不同,因此,备数据库服务器能够获取所述主数据库服务器的日志更新状态为正在更新或已经更新日志,此时备数据库服务器中的日志少于主数据库服务器的日志。若此时进行主备切换的话,备数据库服务器有可能无法根据其拥有的日志恢复主数据库服务器中的所有数据,由此确定主备数据不一致,将会导致数据丢失。

在另一种情况下,若在该日志包将要被发送时,主数据库服务器并未 产生新的日志,即主数据库服务器最后产生的日志即为该日志包中最后产生的日志(日志号为105的日志),那么该日志包中写入的标记信息即为由日志号105所表示的更新标记。备数据库服务器接收到该标记日志包之后,由于日志包中最后生成的日志的日志号为105,与更新标记的日志号105相同,因此,备数据库服务器能够获取所述主数据库服务器的日志更新状态为未更新日志,可以确定主数据库服务器中的所有日志已经都同步至备数据库服务器,若此时进行主备切换的话,备数据库服务器能够根据其拥有的日志恢复主数据库服务器中的所有数据,由此确定主备数据一致,不会导致数据丢失。

在实际应用中,在一次事务处理所产生的所有日志中,最后的一个日志为事务提交操作日志。数据库服务器在进行事务处理时,只有已经提交的事务会对数据进行实际的更新,从而有可能造成数据的丢失。因此,作为一种优选的实施方式,可以仅考虑主数据库服务器中的事务提交操作日志(例如数据库系统中COMMIT语句对应的日志),即所述日志更新状态可以仅考虑事务提交操作日志的更新状态,使得主备数据一致性校验的结果更加准确。

此时,所述主数据库服务器110中的所述标记写入装置111具体用于:在主数据库服务器的事务提交操作日志的更新状态为正在更新事务提交操作日志时,向当前待发送的日志包中写入更新标记,或者在主数据库服务器的事务提交操作日志的更新状态为未更新事务提交操作日志时,向当前待发送的日志包中写入未更新标记,生成标记日志包。

相应地,所述备数据库服务器120中的所述校验装置122具体用于:根据所述标记日志包中的更新标记获取所述主数据库服务器的事务提交操作日志的更新状态为正在更新或已更新事务提交操作日志,并由所述事务提交操作日志的更新状态确定所述主备数据不一致;或者根据所述标记日志包中的未更新标记获取所述主数据库服务器的事务提交操作日志的更新状态为未更新事务提交操作日志,并由所述事务提交操作日志的更新状态确定所述主备数据一致。

以前述比特位的形式为例,若在某一日志包将要被发送时,主数据库 服务器正在进行事务的提交操作,同时产生相应的事务提交操作日志,此时主数据库服务器会将取值为1的一个比特位作为更新标记写入到该日志包中,以生成标记日志包。备数据库服务器接收到该标记日志包之后,可以根据该比特位的值获知主数据库服务器的日志更新状态为正在更新或已更新事务提交操作日志,主数据库服务器中最近产生的事务提交操作日志并未同步到备数据库服务器。若此时进行主备切换的话,备数据库服务器无法根据其拥有的日志恢复主数据库服务器中的所有数据,由此确定主备数据不一致,将会导致数据丢失。

在实际应用中,标记日志包从写入标记信息到发送至备数据库服务器的时间虽然极短,但是也有较小的可能性在此段时间内出现问题。例如,主数据库服务器在进行事务A的提交,并且正在生成事务A的事务提交操作日志,此时向本次发送的标记日志包内写入的标记信息为更新标记,随后主数据库服务器完成事务A的提交操作,同时生成对应的事务提交操作日志。若主数据库服务器由于宕机而导致所述标记日志包未发送成功,则有可能使得备数据库服务器由于前一次接收到的标记日志包中的未更新标记而产生错误的判断。

为解决上述问题,本申请实施例还提供了一种优选的用于主备数据一致性校验的主数据库服务器,如图6所示,除图4所示的标记写入装置111和发送装置112之外,还包括事务提交装置113。具体地,所述事务提交装置113用于在所述标记日志包中包含更新标记,且确认所述备数据库服务器接收到所述标记日志包后,完成正在更新的事务提交操作日志所对应的事务提交操作。

其中,主数据库服务器确认所述备数据库服务器接收到所述标记日志包的方式可以根据应用场景的需求确定,例如通过可靠的传输协议来保证在备数据库服务器在接收到之后会发送相应的确认字符(例如TCP协议的ACK),或者备数据库服务器单独返回一个反馈消息告知主数据库服务器已经接收到等。

通过确定所述备数据库服务器接收到所述标记日志包后,再完成正在更新的事务提交操作日志所对应的事务提交操作,由此保证事务提交所造 成的状态改变能够通知到备数据库服务器,以避免因前述提及的情况而造成备数据库服务器产生错误的判断,从而进一步提高主备数据一致性校验的准确性。

若每次在进行事务提交操作时,都需要等待相应的标记日志包发送完成才进行,可能会影响到事务处理的速度。因此,可以对事务提交装置113进行优化,具体地,所述事务提交装置113用于在所述标记日志包中包含更新标记,且向所述备数据库服务器发送的前一标记日志包中包含未更新标记,且在确认所述备数据库服务器接收到本次发送的标记日志包后,完成正在更新的事务提交操作日志所对应的事务提交操作。

若主数据库服务器向所述备数据库服务器发送的前一标记日志包中包含更新标记,那么备数据库服务器在接收到前一标记日志包时,已经可以确定了主备数据不一致,若本次发送的标记日志包中也包含更新标记,备数据库服务器收到后所确定的主备数据状态仍将是不一致。因此,无论备数据库服务器是否收到本次的标记日志包,均不会影响备数据库服务器对于当前主备数据一致性的判断结果。

因此,仅当本次发送的标记日志包中包含更新标记,而前一标记日志包中包含未更新标记时,才进行等待,在确认所述备数据库服务器接收到本次发送的标记日志包后,完成正在更新的事务提交操作日志所对应的事务提交操作。而当本次发送的标记日志包中包含更新标记,而前一标记日志包中也包含更新标记时,则无需进行等待,从而保证事务处理的速度。

需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。

另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据 本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。

对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

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