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

文档序号:8430786阅读:262来源:国知局
一种数据库主备切换后的数据回补方法及系统的制作方法
【技术领域】
[0001]本申请涉及数据库技术,更具体地,涉及一种数据库主备切换后的数据回补方法及系统。
【背景技术】
[0002]目前很多数据库都使用了高可用(HA:High Available)方案,主库和备库做双机热备。比如Oracle的DataGuard,MySQL的replicat1n。很好地解决高可用的问题。主库异常了,把读写流量切换到备库。但是宕机时刻主库上的部分更新,没有完全同步到备库,切换后会有数据丢失。
[0003]例如,假定主库宕机时,其日志的事务提交位点(可用日志的位置号表示)为100,由于日志在主库先提交才会同步到备库,受同步延时的影响,备库日志此时的事务提交位点为80。则切换后,新主库相对于旧主库有部分事务没有执行,这会造成部分数据的丢失。
[0004]为了避免数据丢失,目前的解决方法通常有三种:
[0005]第一种是数据库日志写双份。比如oralce redo写本地机房的同时,写远程机房。但其架构复杂,且网络延时会带来性能问题。
[0006]第二种是主库等待备库接收到日志后再提交。类似MySQL的semi sync或Oracle的最大可用模式。其主要问题是同步提交会造成性能问题和可用性下降。
[0007]第三种是应用同时写两个数据库,两个都写完才提交。两个数据库各自有自己的HA备库。其问题是成本高,性能受影响,两台同时服务提高单机宕机概率。

【发明内容】

[0008]本申请要解决的技术问题是提供一种数据库主备切换后的数据回补方法及系统,可以在不影响系统性能的情况下恢复数据。
[0009]为了解决上述问题,本申请提供了一种数据库主备切换后的数据回补方法,所述方法包括:
[0010]数据库主备切换后,业务切换到新主库;
[0011]旧主库修复后,对其中还没有同步到新主库的遗留日志进行解析,得到一条或多条可执行语句,及每一可执行语句相关记录的前镜像和后镜像;
[0012]对得到的每一可执行语句,如所述可执行语句相关记录的前镜像与新主库中的当前记录匹配,则在新主库中重放所述可执行语句;
[0013]其中,可执行语句相关记录指可执行语句所操作的记录。
[0014]较佳地,所述方法还包括:
[0015]对得到的每一可执行语句,如所述可执行语句相关记录的前镜像与新主库中的当前记录不匹配,则不在新主库中重放所述可执行语句。
[0016]较佳地,
[0017]所述可执行语句相关记录的前镜像与新主库中的当前记录匹配,包括:
[0018]所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中不存在;
[0019]所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同;
[0020]所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同。
[0021]较佳地,所述方法还包括:
[0022]对得到的每一可执行语句,如所述可执行语句相关记录的后镜像与新主库中的当前记录匹配,则不在新主库中重放所述可执行语句;
[0023]所述可执行语句相关记录的后镜像与新主库中的当前记录匹配,包括:
[0024]所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同;
[0025]所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中不存在;
[0026]所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同。
[0027]较佳地,所述方法还包括:
[0028]对得到的每一可执行语句:
[0029]如所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中存在,但在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段有差异,则将所述记录的主键去除后插入新主库的相应表格并赋予一新的主键,或者将所述可执行语句备案不重放;
[0030]如所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中存在,但在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段有差异,则将所述可执行语句备案不重放。
[0031]较佳地,所述方法还包括:
[0032]对得到的每一可执行语句:
[0033]如所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中不存在,则将所述可执行语句备案不重放;
[0034]如所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在新主库的相应表格中,所述主键所在记录的部分字段与所述记录后镜像中的相应字段不同但与所述记录前镜像中的相应字段相同,则将新主库相应表格中的所述部分字段更新为所述记录前镜像中的相应字段;或者将所述可执行语句备案不重放。
[0035]较佳地,
[0036]所述业务切换到新主库后,还包括:
[0037]根据所述遗留日志在旧主库中进行数据回滚,将回滚后的旧主库作为新主库的一致性备库;或者
[0038]备份新主库的数据,将备份数据装载到一台新的数据库中,将所述新的数据库作为新王库的一致性备库。
[0039]相应地,本申请还提供了一种数据回补系统,用于在数据库主备切换后实现数据回补,包括:
[0040]日志解析模块,用于在旧主库修复后,对其中还没有同步到新主库的遗留日志进行解析,得到一条或多条可执行语句,及每一可执行语句相关记录的前镜像和后镜像,其中,可执行语句相关记录指可执行语句所操作的记录;
[0041]事件重放模块,对得到的每一可执行语句,如所述可执行语句相关记录的前镜像与新主库中的当前记录匹配,则在新主库中重放所述可执行语句。
[0042]较佳地,
[0043]所述事件重放模块对得到的每一可执行语句,如所述可执行语句相关记录的前镜像与新主库中的当前记录不匹配,则不在新主库中重放所述可执行语句。
[0044]较佳地,
[0045]所述事件重放模块在以下情况下,确定所述可执行语句相关记录的前镜像与新主库中的当前记录匹配:
[0046]所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中不存在;
[0047]所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同;
[0048]所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的前镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同。
[0049]较佳地,
[0050]所述事件重放模块对得到的每一可执行语句,如所述可执行语句相关记录的后镜像与新主库中的当前记录匹配,不在新主库中重放所述可执行语句;
[0051]所述事件重放模块在以下情况下,确定所述可执行语句相关记录的后镜像与新主库中的当前记录匹配:
[0052]所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同;
[0053]所述可执行语句执行的操作是在表格中删除记录,所述记录的主键在新主库的相应表格中不存在;
[0054]所述可执行语句执行的操作是在表格中更新记录,所述记录的主键在新主库的相应表格中存在,且在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段完全相同。
[0055]较佳地,
[0056]所述事件重放模块对得到的每一可执行语句:
[0057]如所述可执行语句执行的操作是在表格中插入记录,所述记录的主键在新主库的相应表格中存在,但在所述记录的后镜像和新主库的相应表格中,所述主键所在记录的其他字段有差异,则将所述记录的主键去除后插入新主库的相应表格并赋予一新的主键,或者将所述可执行语句备案不重放;
[
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1