一种数据库主备切换后的数据回补方法及系统的制作方法_2

文档序号:8430786阅读:来源:国知局
0058]如所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中存在,但在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段有差异,则将所述可执行语句备案不重放。
[0059]较佳地,
[0060]所述事件重放模块对得到的每一可执行语句:
[0061]如所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中不存在,则将所述可执行语句备案不重放;
[0062]如所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在新主库的相应表格中,所述主键所在记录的部分字段与所述记录后镜像中的相应字段不同但与所述记录前镜像中的相应字段相同,则将新主库相应表格中的所述部分字段更新为所述记录前镜像中的相应字段;或者将所述可执行语句备案不重放。
[0063]上述方案使用宕机恢复后的主库日志进行数据回补,不依赖数据或日志双写,避免了可用性和性能问题。
【附图说明】
[0064]图1是本申请实施例一数据回补方法的流程图;
[0065]图2是本申请实施例一数据回补系统的模块图;
[0066]图3是本申请实施例二数据回补方法的流程图。
【具体实施方式】
[0067]为使本申请的目的、技术方案和优点更加清楚明白,下文中将结合附图对本申请的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
[0068]在本申请一个典型的配置中,系统包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
[0069]内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
[0070]计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
[0071]实施例一
[0072]对于主备切换后的数据丢失,现有方法都是在架构上去写双份数据或双份日志来避免数据丢失,而本实施例则使用宕机恢复后的主库日志进行最大限度数据回补,不依赖数据或日志双写,避免了可用性和性能问题。
[0073]如图1所示,本实施例数据库主备切换后的数据回补方法,包括:
[0074]步骤110,数据库主备切换后,业务切换到新主库;
[0075]假定本实施例涉及的数据库为MySQL。
[0076]步骤120,旧主库修复后,对其中还没有同步到新主库的遗留日志进行解析,得到一条或多条可执行语句,及每一可执行语句相关记录的前镜像和后镜像;
[0077]一般数据库都有Raid或高端存储保证宕机后数据不丢,因此旧主库修复后,可以找到宕机时的日志。在一个示例中,假定主库宕机时,其日志的事务提交位点为100,受同步延时的影响,备库日志此时的事务提交位点为80。则事务提交位点81至100的日志为遗留日志。这些遗留日志中记载了提交给旧主库执行的多条可执行语句,这些可执行语句在新主库中并未执行。
[0078]上述“可执行语句相关记录”指可执行语句所操作的记录,这里的操作包括插入记录、删除记录和更新记录。遗留日志中保存有这些记录的前镜像和后镜像(如将MySQL日志格式设置成Row模式,日志里就会含有相关记录的前镜像和后镜像),其中,前镜像即修改前的完整行记录,后镜像即修改后的完整行记录。
[0079]当操作为插入记录时,前镜像为空,后镜像保存有所述记录的主键和其他字段(文中的字段指代字段的值)。
[0080]当操作为删除记录时,前镜像保存有所述记录的主键和其他字段,后镜像为空。
[0081]当操作为更新记录时,前镜像保存有更新前所述记录的主键和其他字段,后镜像保存有更新后所述记录的主键和其他字段,除主键外的其他字段可能有部分或全部被更改。
[0082]步骤130,对得到的每一可执行语句,如所述可执行语句相关记录的前镜像与新主库中的当前记录匹配,则在新主库中重放所述可执行语句,如不匹配,则不在新主库重放所述可执行语句。
[0083]虽然对遗留日志解析得到的可执行语句在新主库中未执行,但在业务切换到新主库后,遗留日志中可执行语句对数据库修改产生的数据,可能会被用户再次修改或者被新的数据覆盖,简单地在新主库重放(即重新执行)这些可执行语句,会导致新的数据丢失。因此,需将可执行语句的前镜像、后镜像与新主库中的当前记录进行匹配,根据匹配结果决定是否重放。
[0084]本实施例中,所述可执行语句相关记录的前镜像与新主库中的当前记录匹配,包括:
[0085]所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中不存在。此情况下,所述记录的前镜像为空,即不存在所述记录,而新主库中不存在所述记录的主键,也就说明不存在所述记录,因此认为两者匹配。例如,可执行语句执行的操作是在表格A中插入记录,所述记录的后镜像为“3,XXX, τπ”,而新主库的表格A中不存在主键“3”,即属于这种情况。
[0086]所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同。例如,可执行语句执行的操作是在表格A中删除记录,所述记录的前镜像为“1,aaa, ccc”,新主库的表格A中存在主键为“I”的记录“1,aaa, ccc”,即属于这种情况。
[0087]所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同。例如,可执行语句执行的操作是在表格A中更新记录,所述记录的前镜像为“1,aaa, ccc”,后镜像为“1,axx, cxx”,新主库表格A中存在主键为“ I ”的记录“ 1,aaa, ccc”,即属于这种情况。
[0088]如果不满足以上匹配条件,则说明上述可执行语句对数据库修改产生的数据可能被用户再次修改或者被新的数据覆盖,本实施例中,不执行重放。但可以将这些可执行数据备案待查,如保存到一个集中分析库中,方便业务查询比对。
[0089]进行上述判断时,可以使用所述记录的主键到新主库相应表格中查询,获知所述主键是否存在,如果存在,还可以查询到所述主键所在记录的其他字段。对于插入记录的情况,也可以直接尝试在新主库执行所述可执行语句以在相应表格中插入所述记录(即重放),如果执行成功,说明满足上述匹配条件,如果执行失败,返回主键重复的提示,说明不满足上述匹配条件。
[0090]对于一条可执行语句对多条记录进行操作的情况下,对每一条记录都按照上述处理策略来处理。
[0091]在业务切换到新主库后,本实施例还可以通过以下两种方式中一种为新主库搭建一致性备库:
[0092]第一种:根据所述遗留日志在旧主库中进行数据回滚,将回滚后的旧主库作为新主库的一致性备库。可以根据遗留日志解析出逆向事务,然后对旧主库做逆序执行来实现数据回滚。
[0093]第二种,备份新主库的数据,将备份数据装载到一台新的数据库中,将所述新的数据库作为新主库的一致性备库。
[0094]相应地,本实施例数据回补系统用于在数据库主备切换后实现数据回补,如图2所示,包括:
[0095]日志解析模块10,用于在旧主库修复后,对其中还没有同步到新主库的遗留日志进行解析,得到一条或多条可执行语句,及每一可执行语句相关记录的前镜像和后镜像,其中,可执行语句相关记录指可执行语句所操作的记录;
[0096]事件重放模块20,对得到的每一可执行语句,如所述可执行语句相关记录的前镜像与新主库中的当前记录匹配,则在新主库中重放所述可执行语句,如不匹配,则不在新主库中重放所述可执行语句。
[0097]所述事件重放模块在以下情况下,确定所
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1