CN104750755B - 一种数据库主备切换后的数据回补方法及系统 - Google Patents
一种数据库主备切换后的数据回补方法及系统 Download PDFInfo
- Publication number
- CN104750755B CN104750755B CN201310753056.XA CN201310753056A CN104750755B CN 104750755 B CN104750755 B CN 104750755B CN 201310753056 A CN201310753056 A CN 201310753056A CN 104750755 B CN104750755 B CN 104750755B
- Authority
- CN
- China
- Prior art keywords
- record
- executable statement
- library
- new
- master library
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 28
- 230000001360 synchronised effect Effects 0.000 claims abstract description 11
- 238000004458 analytical method Methods 0.000 claims description 6
- 239000004973 liquid crystal related substance Substances 0.000 description 7
- 229920000642 polymer Polymers 0.000 description 7
- 230000004048 modification Effects 0.000 description 6
- 238000012986 modification Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 3
- 238000011084 recovery Methods 0.000 description 3
- 238000003169 complementation method Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002441 reversible effect Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种数据库主备切换后的数据回补方法及系统,所述方法包括:数据库主备切换后,业务切换到新主库;旧主库修复后,对其中还没有同步到新主库的遗留日志进行解析,得到一条或多条可执行语句,及每一可执行语句相关记录的前镜像和后镜像;对得到的每一可执行语句,如所述可执行语句相关记录的前镜像与新主库中的当前记录匹配,则在新主库中重放所述可执行语句;其中,可执行语句相关记录指可执行语句所操作的记录。所述数据回补系统包括日志解析模块和事件重放模块。本申请的数据回补方法及系统可以在不影响系统性能的情况下恢复数据。
Description
技术领域
本申请涉及数据库技术,更具体地,涉及一种数据库主备切换后的数据回补方法及系统。
背景技术
目前很多数据库都使用了高可用(HA:High Available)方案,主库和备库做双机热备。比如Oracle的DataGuard,MySQL的replication。很好地解决高可用的问题。主库异常了,把读写流量切换到备库。但是宕机时刻主库上的部分更新,没有完全同步到备库,切换后会有数据丢失。
例如,假定主库宕机时,其日志的事务提交位点(可用日志的位置号表示)为100,由于日志在主库先提交才会同步到备库,受同步延时的影响,备库日志此时的事务提交位点为80。则切换后,新主库相对于旧主库有部分事务没有执行,这会造成部分数据的丢失。
为了避免数据丢失,目前的解决方法通常有三种:
第一种是数据库日志写双份。比如oralce redo写本地机房的同时,写远程机房。但其架构复杂,且网络延时会带来性能问题。
第二种是主库等待备库接收到日志后再提交。类似MySQL的semisync或Oracle的最大可用模式。其主要问题是同步提交会造成性能问题和可用性下降。
第三种是应用同时写两个数据库,两个都写完才提交。两个数据库各自有自己的HA备库。其问题是成本高,性能受影响,两台同时服务提高单机宕机概率。
发明内容
本申请要解决的技术问题是提供一种数据库主备切换后的数据回补方法及系统,可以在不影响系统性能的情况下恢复数据。
为了解决上述问题,本申请提供了一种数据库主备切换后的数据回补方法,所述方法包括:
数据库主备切换后,业务切换到新主库;
旧主库修复后,对其中还没有同步到新主库的遗留日志进行解析,得到一条或多条可执行语句,及每一可执行语句相关记录的前镜像和后镜像;
对得到的每一可执行语句,如所述可执行语句相关记录的前镜像与新主库中的当前记录匹配,则在新主库中重放所述可执行语句;
其中,可执行语句相关记录指可执行语句所操作的记录。
较佳地,所述方法还包括:
对得到的每一可执行语句,如所述可执行语句相关记录的前镜像与新主库中的当前记录不匹配,则不在新主库中重放所述可执行语句。
较佳地,
所述可执行语句相关记录的前镜像与新主库中的当前记录匹配,包括:
所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中不存在;
所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同;
所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同。
较佳地,所述方法还包括:
对得到的每一可执行语句,如所述可执行语句相关记录的后镜像与新主库中的当前记录匹配,则不在新主库中重放所述可执行语句;
所述可执行语句相关记录的后镜像与新主库中的当前记录匹配,包括:
所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同;
所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中不存在;
所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同。
较佳地,所述方法还包括:
对得到的每一可执行语句:
如所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中存在,但在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段有差异,则将所述记录的主键去除后插入新主库的相应表格并赋予一新的主键,或者将所述可执行语句备案不重放;
如所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中存在,但在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段有差异,则将所述可执行语句备案不重放。
较佳地,所述方法还包括:
对得到的每一可执行语句:
如所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中不存在,则将所述可执行语句备案不重放;
如所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在新主库的相应表格中,所述主键所在记录的部分字段与所述记录后镜像中的相应字段不同但与所述记录前镜像中的相应字段相同,则将新主库相应表格中的所述部分字段更新为所述记录前镜像中的相应字段;或者将所述可执行语句备案不重放。
较佳地,
所述业务切换到新主库后,还包括:
根据所述遗留日志在旧主库中进行数据回滚,将回滚后的旧主库作为新主库的一致性备库;或者
备份新主库的数据,将备份数据装载到一台新的数据库中,将所述新的数据库作为新主库的一致性备库。
相应地,本申请还提供了一种数据回补系统,用于在数据库主备切换后实现数据回补,包括:
日志解析模块,用于在旧主库修复后,对其中还没有同步到新主库的遗留日志进行解析,得到一条或多条可执行语句,及每一可执行语句相关记录的前镜像和后镜像,其中,可执行语句相关记录指可执行语句所操作的记录;
事件重放模块,对得到的每一可执行语句,如所述可执行语句相关记录的前镜像与新主库中的当前记录匹配,则在新主库中重放所述可执行语句。
较佳地,
所述事件重放模块对得到的每一可执行语句,如所述可执行语句相关记录的前镜像与新主库中的当前记录不匹配,则不在新主库中重放所述可执行语句。
较佳地,
所述事件重放模块在以下情况下,确定所述可执行语句相关记录的前镜像与新主库中的当前记录匹配:
所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中不存在;
所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同;
所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同。
较佳地,
所述事件重放模块对得到的每一可执行语句,如所述可执行语句相关记录的后镜像与新主库中的当前记录匹配,不在新主库中重放所述可执行语句;
所述事件重放模块在以下情况下,确定所述可执行语句相关记录的后镜像与新主库中的当前记录匹配:
所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同;
所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中不存在;
所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同。
较佳地,
所述事件重放模块对得到的每一可执行语句:
如所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中存在,但在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段有差异,则将所述记录的主键去除后插入新主库的相应表格并赋予一新的主键,或者将所述可执行语句备案不重放;
如所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中存在,但在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段有差异,则将所述可执行语句备案不重放。
较佳地,
所述事件重放模块对得到的每一可执行语句:
如所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中不存在,则将所述可执行语句备案不重放;
如所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在新主库的相应表格中,所述主键所在记录的部分字段与所述记录后镜像中的相应字段不同但与所述记录前镜像中的相应字段相同,则将新主库相应表格中的所述部分字段更新为所述记录前镜像中的相应字段;或者将所述可执行语句备案不重放。
上述方案使用宕机恢复后的主库日志进行数据回补,不依赖数据或日志双写,避免了可用性和性能问题。
附图说明
图1是本申请实施例一数据回补方法的流程图;
图2是本申请实施例一数据回补系统的模块图;
图3是本申请实施例二数据回补方法的流程图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚明白,下文中将结合附图对本申请的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
在本申请一个典型的配置中,系统包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
实施例一
对于主备切换后的数据丢失,现有方法都是在架构上去写双份数据或双份日志来避免数据丢失,而本实施例则使用宕机恢复后的主库日志进行最大限度数据回补,不依赖数据或日志双写,避免了可用性和性能问题。
如图1所示,本实施例数据库主备切换后的数据回补方法,包括:
步骤110,数据库主备切换后,业务切换到新主库;
假定本实施例涉及的数据库为MySQL。
步骤120,旧主库修复后,对其中还没有同步到新主库的遗留日志进行解析,得到一条或多条可执行语句,及每一可执行语句相关记录的前镜像和后镜像;
一般数据库都有Raid或高端存储保证宕机后数据不丢,因此旧主库修复后,可以找到宕机时的日志。在一个示例中,假定主库宕机时,其日志的事务提交位点为100,受同步延时的影响,备库日志此时的事务提交位点为80。则事务提交位点81至100的日志为遗留日志。这些遗留日志中记载了提交给旧主库执行的多条可执行语句,这些可执行语句在新主库中并未执行。
上述“可执行语句相关记录”指可执行语句所操作的记录,这里的操作包括插入记录、删除记录和更新记录。遗留日志中保存有这些记录的前镜像和后镜像(如将MySQL日志格式设置成Row模式,日志里就会含有相关记录的前镜像和后镜像),其中,前镜像即修改前的完整行记录,后镜像即修改后的完整行记录。
当操作为插入记录时,前镜像为空,后镜像保存有所述记录的主键和其他字段(文中的字段指代字段的值)。
当操作为删除记录时,前镜像保存有所述记录的主键和其他字段,后镜像为空。
当操作为更新记录时,前镜像保存有更新前所述记录的主键和其他字段,后镜像保存有更新后所述记录的主键和其他字段,除主键外的其他字段可能有部分或全部被更改。
步骤130,对得到的每一可执行语句,如所述可执行语句相关记录的前镜像与新主库中的当前记录匹配,则在新主库中重放所述可执行语句,如不匹配,则不在新主库重放所述可执行语句。
虽然对遗留日志解析得到的可执行语句在新主库中未执行,但在业务切换到新主库后,遗留日志中可执行语句对数据库修改产生的数据,可能会被用户再次修改或者被新的数据覆盖,简单地在新主库重放(即重新执行)这些可执行语句,会导致新的数据丢失。因此,需将可执行语句的前镜像、后镜像与新主库中的当前记录进行匹配,根据匹配结果决定是否重放。
本实施例中,所述可执行语句相关记录的前镜像与新主库中的当前记录匹配,包括:
所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中不存在。此情况下,所述记录的前镜像为空,即不存在所述记录,而新主库中不存在所述记录的主键,也就说明不存在所述记录,因此认为两者匹配。例如,可执行语句执行的操作是在表格A中插入记录,所述记录的后镜像为“3,xxx,yyy”,而新主库的表格A中不存在主键“3”,即属于这种情况。
所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同。例如,可执行语句执行的操作是在表格A中删除记录,所述记录的前镜像为“1,aaa,ccc”,新主库的表格A中存在主键为“1”的记录“1,aaa,ccc”,即属于这种情况。
所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同。例如,可执行语句执行的操作是在表格A中更新记录,所述记录的前镜像为“1,aaa,ccc”,后镜像为“1,axx,cxx”,新主库表格A中存在主键为“1”的记录“1,aaa,ccc”,即属于这种情况。
如果不满足以上匹配条件,则说明上述可执行语句对数据库修改产生的数据可能被用户再次修改或者被新的数据覆盖,本实施例中,不执行重放。但可以将这些可执行数据备案待查,如保存到一个集中分析库中,方便业务查询比对。
进行上述判断时,可以使用所述记录的主键到新主库相应表格中查询,获知所述主键是否存在,如果存在,还可以查询到所述主键所在记录的其他字段。对于插入记录的情况,也可以直接尝试在新主库执行所述可执行语句以在相应表格中插入所述记录(即重放),如果执行成功,说明满足上述匹配条件,如果执行失败,返回主键重复的提示,说明不满足上述匹配条件。
对于一条可执行语句对多条记录进行操作的情况下,对每一条记录都按照上述处理策略来处理。
在业务切换到新主库后,本实施例还可以通过以下两种方式中一种为新主库搭建一致性备库:
第一种:根据所述遗留日志在旧主库中进行数据回滚,将回滚后的旧主库作为新主库的一致性备库。可以根据遗留日志解析出逆向事务,然后对旧主库做逆序执行来实现数据回滚。
第二种,备份新主库的数据,将备份数据装载到一台新的数据库中,将所述新的数据库作为新主库的一致性备库。
相应地,本实施例数据回补系统用于在数据库主备切换后实现数据回补,如图2所示,包括:
日志解析模块10,用于在旧主库修复后,对其中还没有同步到新主库的遗留日志进行解析,得到一条或多条可执行语句,及每一可执行语句相关记录的前镜像和后镜像,其中,可执行语句相关记录指可执行语句所操作的记录;
事件重放模块20,对得到的每一可执行语句,如所述可执行语句相关记录的前镜像与新主库中的当前记录匹配,则在新主库中重放所述可执行语句,如不匹配,则不在新主库中重放所述可执行语句。
所述事件重放模块在以下情况下,确定所述可执行语句相关记录的前镜像与新主库中的当前记录匹配:
所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中不存在;
所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同;
所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同。
实施例二
本实施例也是使用宕机恢复后的主库日志进行数据回补,实施例一在可执行语句相关记录的前镜像与新主库中的当前记录不匹配时,就不重放所述可执行语句。而本实施例在不匹配的情况下,还进行进一步的分析,根据不同的情况做不同的处理,以尽最大限度地恢复数据。
本实施例数据库主备切换后的数据回补方法如图3所示,包括:
步骤210,数据库主备切换后,业务切换到新主库;
本步骤同实施例一的步骤110。
步骤220,旧主库修复后,对其中还没有同步到新主库的遗留日志进行解析,得到一条或多条可执行语句,及每一可执行语句相关记录的前镜像和后镜像;
本步骤同实施例一的步骤120。
步骤230,对得到的每一可执行语句,如所述可执行语句相关记录的前镜像与新主库中的当前记录匹配,则在新主库中重放所述可执行语句;如所述可执行语句相关记录的后镜像与新主库中的当前记录匹配,则不在新主库中重放所述可执行语句;在其他情况下,以特定方式在新主库重放或不重放。
其中,
所述可执行语句相关记录的前镜像与新主库中的当前记录匹配的具体情况,同实施例一。
所述可执行语句相关记录的后镜像与新主库中的当前记录匹配,包括:
所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同。例如,可执行语句执行的操作是在表格A中插入记录,所述记录的后镜像为“1,aaa,ccc”,新主库表格A中存在主键为“1”的记录“1,aaa,ccc”,即属于这种情况。
所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中不存在。此情况下,所述记录的后镜像为空即不存在所述记录,而新主库中不存在所述记录的主键,也就说明不存在所述记录,因此认为两者匹配。例如,可执行语句执行的操作是在表格A中删除记录,所述记录的前镜像为“3,xxx,yyy”,新主库表格A中不存在主键为“3”的记录,即属于这种情况。
所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同。例如,可执行语句执行的操作是在表格A中更新记录,所述记录的前镜像为“2,bbb,ddd”、后镜像为“2,bbb,eee”,新主库表格A中存在主键为“2”的记录“2,bbb,eee”,即属于这种情况。
其他情况,具体包括:
如所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中存在,但在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段有差异(有差异包括部分字段不同或全部字段不同两种情况,可能是因为新主库中插入另一记录且为所述另一记录生成了相同的主键),则将所述记录的主键去除后插入新主库的相应表格并赋予一新的主键,具体可以将所述可执行语句转换为statement模式在新主库重放。在另一实施例中,也可以将所述可执行语句备案不重放。例如,可执行语句执行的操作是在表格A中插入记录,所述记录的后镜像为“2,bbb,ddd”,新主库表格A中存在主键为“2”的记录“2,bbb,eee”,即属于这种情况。
如所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中存在,但在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段有差异(这种情况新主库没有删除所述记录但用户可能对所述记录做了修改),则将所述可执行语句备案不重放。例如,可执行语句执行的操作是在表格A中删除记录,所述记录的前镜像为“2,bbb,ddd”,新主库表格A中存在主键为“2”的记录“2,bbb,eee”,即属于这种情况。
如所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中不存在,则将所述可执行语句备案不重放。这种情况可能是新主库中所述记录已经被删除。例如,可执行语句执行的操作是在表格A中更新记录,所述记录的前镜像为“2,bbb,ddd”,新主库表格A中不存在主键为“2”的记录,即属于这种情况。
如所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在新主库的相应表格中,所述主键所在记录的部分字段与所述记录后镜像中的相应字段不同但与所述记录前镜像中的相应字段相同(这种情况是旧主库中所述记录的某些字段被更新,而新主库又更新了所述记录的其他字段),则将新主库相应表格中的所述部分字段更新为所述记录前镜像中的相应字段,如可以将所述可执行语句转换为statement模式在新主库中重放,以实现对部分字段的更新,最大限度地恢复数据。另一实施例中,也可以将所述可执行语句备案不重放。例如,可执行语句执行的操作是在表格A中更新记录,所述记录的前镜像为“3,bbb,nnn”,后镜像为“3,ccc,nnn”,即旧主库更新了字段“bbb”,但没有更新字段“nnn”。新主库表格A中存在主键为“3”的记录“2,bbb,kkk”,即相对前镜像,新主库更新了字段“nnn”但没有更新字段“bbb”,此时可以在新主库将字段“bbb”更新为“ccc”。
本实施例数据回补系统也包括日志解析模块和事件重放模块,与实施例一不同的是,事件重放模块对得到的每一可执行语句,如所述可执行语句相关记录的前镜像与新主库中的当前记录不匹配,还要根据情况来决定是否重放,具体包括:
所述事件重放模块对得到的每一可执行语句,如所述可执行语句相关记录的后镜像与新主库中的当前记录匹配,不在新主库中重放所述可执行语句;其中,所述事件重放模块在以下情况下,确定所述可执行语句相关记录的后镜像与新主库中的当前记录匹配:
所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同;
所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中不存在;
所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同。
所述事件重放模块对得到的每一可执行语句:
如所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中存在,但在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段有差异,则将所述记录的主键去除后插入新主库的相应表格并赋予一新的主键,或者将所述可执行语句备案不重放;
如所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中存在,但在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段有差异,则将所述可执行语句备案不重放。
如所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中不存在,则将所述可执行语句备案不重放;
如所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在新主库的相应表格中,所述主键所在记录的部分字段与所述记录后镜像中的相应字段不同但与所述记录前镜像中的相应字段相同,则将新主库相应表格中的所述部分字段更新为所述记录前镜像中的相应字段;或者将所述可执行语句备案不重放。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现,相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本申请不限制于任何特定形式的硬件和软件的结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (13)
1.一种数据库主备切换后的数据回补方法,所述方法包括:
数据库主备切换后,业务切换到新主库;
旧主库修复后,对其中还没有同步到新主库的遗留日志进行解析,得到一条或多条可执行语句,及每一可执行语句相关记录的前镜像和后镜像;
对得到的每一可执行语句,如所述可执行语句相关记录的前镜像与新主库中的当前记录匹配,则在新主库中重放所述可执行语句;
其中,可执行语句相关记录指可执行语句所操作的记录。
2.如权利要求1所述的数据回补方法,其特征在于,还包括:
对得到的每一可执行语句,如所述可执行语句相关记录的前镜像与新主库中的当前记录不匹配,则不在新主库中重放所述可执行语句。
3.如权利要求1所述的数据回补方法,其特征在于:
所述可执行语句相关记录的前镜像与新主库中的当前记录匹配,包括:
所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中不存在;
所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同;
所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同。
4.如权利要求3所述的数据回补方法,其特征在于,还包括:
对得到的每一可执行语句,如所述可执行语句相关记录的后镜像与新主库中的当前记录匹配,则不在新主库中重放所述可执行语句;
所述可执行语句相关记录的后镜像与新主库中的当前记录匹配,包括:
所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同;
所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中不存在;
所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同。
5.如权利要求3或4所述的数据回补方法,其特征在于,还包括:
对得到的每一可执行语句:
如所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中存在,但在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段有差异,则将所述记录的主键去除后插入新主库的相应表格并赋予一新的主键,或者将所述可执行语句备案不重放;
如所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中存在,但在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段有差异,则将所述可执行语句备案不重放。
6.如权利要求5所述的数据回补方法,其特征在于,还包括:
对得到的每一可执行语句:
如所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中不存在,则将所述可执行语句备案不重放;
如所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在新主库的相应表格中,所述主键所在记录的部分字段与所述记录后镜像中的相应字段不同但与所述记录前镜像中的相应字段相同,则将新主库相应表格中的所述部分字段更新为所述记录前镜像中的相应字段;或者将所述可执行语句备案不重放。
7.如权利要求1或2或3或4或6所述的数据回补方法,其特征在于:
所述业务切换到新主库后,还包括:
根据所述遗留日志在旧主库中进行数据回滚,将回滚后的旧主库作为新主库的一致性备库;或者
备份新主库的数据,将备份数据装载到一台新的数据库中,将所述新的数据库作为新主库的一致性备库。
8.一种数据回补系统,用于在数据库主备切换后实现数据回补,其特征在于,包括:
日志解析模块,用于在旧主库修复后,对其中还没有同步到新主库的遗留日志进行解析,得到一条或多条可执行语句,及每一可执行语句相关记录的前镜像和后镜像,其中,可执行语句相关记录指可执行语句所操作的记录;
事件重放模块,对得到的每一可执行语句,如所述可执行语句相关记录的前镜像与新主库中的当前记录匹配,则在新主库中重放所述可执行语句。
9.如权利要求8所述的数据回补系统,其特征在于:
所述事件重放模块对得到的每一可执行语句,如所述可执行语句相关记录的前镜像与新主库中的当前记录不匹配,则不在新主库中重放所述可执行语句。
10.如权利要求8所述的数据回补系统,其特征在于:
所述事件重放模块在以下情况下,确定所述可执行语句相关记录的前镜像与新主库中的当前记录匹配:
所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中不存在;
所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同;
所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同。
11.如权利要求10所述的数据回补系统,其特征在于:
所述事件重放模块对得到的每一可执行语句,如所述可执行语句相关记录的后镜像与新主库中的当前记录匹配,不在新主库中重放所述可执行语句;
所述事件重放模块在以下情况下,确定所述可执行语句相关记录的后镜像与新主库中的当前记录匹配:
所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同;
所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中不存在;
所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同。
12.如权利要求10或11所述的数据回补系统,其特征在于:
所述事件重放模块对得到的每一可执行语句:
如所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中存在,但在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段有差异,则将所述记录的主键去除后插入新主库的相应表格并赋予一新的主键,或者将所述可执行语句备案不重放;
如所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中存在,但在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段有差异,则将所述可执行语句备案不重放。
13.如权利要求12所述的数据回补系统,其特征在于:
所述事件重放模块对得到的每一可执行语句:
如所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中不存在,则将所述可执行语句备案不重放;
如所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在新主库的相应表格中,所述主键所在记录的部分字段与所述记录后镜像中的相应字段不同但与所述记录前镜像中的相应字段相同,则将新主库相应表格中的所述部分字段更新为所述记录前镜像中的相应字段;或者将所述可执行语句备案不重放。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310753056.XA CN104750755B (zh) | 2013-12-31 | 2013-12-31 | 一种数据库主备切换后的数据回补方法及系统 |
HK15108111.0A HK1207450A1 (zh) | 2013-12-31 | 2015-08-21 | 種數據庫主備切換後的數據回補方法及系統 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310753056.XA CN104750755B (zh) | 2013-12-31 | 2013-12-31 | 一种数据库主备切换后的数据回补方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104750755A CN104750755A (zh) | 2015-07-01 |
CN104750755B true CN104750755B (zh) | 2018-06-15 |
Family
ID=53590450
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310753056.XA Active CN104750755B (zh) | 2013-12-31 | 2013-12-31 | 一种数据库主备切换后的数据回补方法及系统 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN104750755B (zh) |
HK (1) | HK1207450A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105069160A (zh) * | 2015-08-26 | 2015-11-18 | 国家电网公司 | 一种基于自主可控数据库的高可用性方法及构架 |
CN106557514A (zh) * | 2015-09-29 | 2017-04-05 | 中兴通讯股份有限公司 | 一种分布式事务回滚方法及装置 |
CN107391539B (zh) * | 2017-04-28 | 2020-08-04 | 阿里巴巴集团控股有限公司 | 事务处理方法、服务器和存储介质 |
CN107357800A (zh) * | 2017-05-18 | 2017-11-17 | 杭州沃趣科技股份有限公司 | 一种数据库高可用零丢失解决方法 |
CN112256656B (zh) * | 2019-07-22 | 2023-04-18 | 金篆信科有限责任公司 | 事务回滚方法及装置、数据库、系统、计算机存储介质 |
CN110825546A (zh) * | 2019-09-12 | 2020-02-21 | 烽火通信科技股份有限公司 | 一种面向高可用数据库集群的恢复方法、系统及设备终端 |
CN113220785A (zh) * | 2021-05-21 | 2021-08-06 | 上海申铁信息工程有限公司 | 一种基于主键比对的数据库变更记录同步方法及装置 |
CN117874145B (zh) * | 2024-03-13 | 2024-05-28 | 连连(杭州)信息技术有限公司 | 一种主从数据库的强一致方法、装置、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101060391A (zh) * | 2007-05-16 | 2007-10-24 | 华为技术有限公司 | 主备服务器切换方法及系统及主用服务器、备用服务器 |
CN101212341A (zh) * | 2006-12-25 | 2008-07-02 | 中兴通讯股份有限公司 | 一种数据库系统切换方法 |
CN102708150A (zh) * | 2012-04-12 | 2012-10-03 | 华为技术有限公司 | 异步复制数据的方法、装置和系统 |
-
2013
- 2013-12-31 CN CN201310753056.XA patent/CN104750755B/zh active Active
-
2015
- 2015-08-21 HK HK15108111.0A patent/HK1207450A1/zh unknown
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101212341A (zh) * | 2006-12-25 | 2008-07-02 | 中兴通讯股份有限公司 | 一种数据库系统切换方法 |
CN101060391A (zh) * | 2007-05-16 | 2007-10-24 | 华为技术有限公司 | 主备服务器切换方法及系统及主用服务器、备用服务器 |
CN102708150A (zh) * | 2012-04-12 | 2012-10-03 | 华为技术有限公司 | 异步复制数据的方法、装置和系统 |
Also Published As
Publication number | Publication date |
---|---|
HK1207450A1 (zh) | 2016-01-29 |
CN104750755A (zh) | 2015-07-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104750755B (zh) | 一种数据库主备切换后的数据回补方法及系统 | |
US11256715B2 (en) | Data backup method and apparatus | |
US10235375B1 (en) | Persistent file system objects for management of databases | |
KR101476018B1 (ko) | 플래시카피 캐스케이드내의 버퍼 디스크 | |
CN113396407A (zh) | 用于利用区块链技术扩充数据库应用的系统和方法 | |
CN106815275B (zh) | 一种通过备用数据库实现主备数据库同步的方法与设备 | |
CN104937556A (zh) | 恢复数据库的页面 | |
JP2006268139A (ja) | データ複製装置、方法及びプログラム並びに記憶システム | |
US20110137874A1 (en) | Methods to Minimize Communication in a Cluster Database System | |
WO2022048416A1 (zh) | 操作请求的处理方法、装置、设备、可读存储介质及系统 | |
US9606749B2 (en) | Asynchronous tape backup and restore from tape backup in a disk storage environment | |
US8402008B2 (en) | Handling file operations with low persistent storage space | |
KR102049417B1 (ko) | Nvdimm을 이용한 인-메모리 데이터베이스 기반의 데이터 저장 및 복원 방법 | |
US20160170842A1 (en) | Writing to files and file meta-data | |
US8918364B1 (en) | Online mirror state transitioning in databases | |
CN114780489B (zh) | 一种实现分布式块存储底层gc的方法及装置 | |
US9235349B2 (en) | Data duplication system, data duplication method, and program thereof | |
CN114442944B (zh) | 一种数据复制方法、系统及设备 | |
CN115658391A (zh) | 基于QianBase MPP数据库的WAL机制的备份恢复方法 | |
CN110928945A (zh) | 一种针对数据库的数据处理方法及装置,数据处理系统 | |
US20050246385A1 (en) | Database-rearranging program, database-rearranging method, and database-rearranging apparatus | |
CN106155837B (zh) | 一种主备库数据修复的方法以及装置 | |
CN111858516B (zh) | 数据处理方法及装置 | |
CN114442942B (zh) | 一种数据迁移方法、系统、设备及存储介质 | |
US11755425B1 (en) | Methods and systems for synchronous distributed data backup and metadata aggregation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1207450 Country of ref document: HK |
|
GR01 | Patent grant |