一种多数据库间快速同步及异常回滚合并数据的方法与流程

文档序号:31760487发布日期:2022-10-12 02:50阅读:64来源:国知局

1.本发明涉及数据库领域,提供了一种多数据库间快速同步及异常回滚合并数据的方法。


背景技术:

2.本技术运用于微服务架构领域,在现有开发流程中,我们经常遇到开发人员的相关开发数据忘了同步到其他环境,其他开发人员是否已同步过这张表的数据,并且在操作数据时可能存在忘记备份等操作时,需要手工查询日志筛选出sql语句进行回滚操作,并且判断当前环境数据是否已有新的操作数据更改等其他,还有某些情况下直接修改从数据库修改表数据从而造成系统不可访问,并且无法恢复。
3.一直以来,我们实现不同环境数据库脚本的同步及异常回滚功能都是通过数据开发人员从数据库层面去操作表数据并导入导出并人工判断数据回滚逻辑,使用起来并没有很便利,步骤也相对较为繁琐,同时也更容易出现问题,例如我们经常在开发时发现使用到的某张表突然被清空,或者某些数据突然被修改,而我们开发人员可能并不知道数据是否需要回滚等操作以及如果需要回滚,我们该如何进行数据回滚,是否会影响到其他使用此张表数据的开发人员。同时在某些忘记备份数据或没有开启数据库的记录日志的场景下,导致一些数据被误操作修改或删除并且无法很快恢复数据时,只能通过查看系统日志去排查相关操作语句时,耗时耗力。


技术实现要素:

4.本发明的目的在于解决当从数据库a生成文件,将数据导入数据库b时,如果发现导入数据有误时,且数据库b存在频繁项字段时,已经在导入数据基础上产生了新的数据,直接回滚将导致错误的问题。
5.为了实现上述目的本发明采用以下技术手段:
6.一种多数据库间快速同步及异常回滚合并数据的方法,其特征在于,包括以下步骤:
7.步骤1:对数据库a表结构通过接口查询展示到前台页面,为后续提供导出表的选择;
8.步骤2:根据选择的表名点击导出按钮,得到数据脚本文件并将所有数据脚本文件压缩,得到数据脚本文件压缩包;
9.步骤3:将导出的数据文件点击上传按钮,将数据脚本文件中的数据导入到对应表中;
10.步骤4:如果导入过程中出现异常或者导入的数据异常或者不是预期内容,可选中当前操作或当前操作的下的某张表,点击回滚按钮,回滚表数据;
11.步骤5:可查询操作日志,包括当前操作人操作的基本信息以及当前操作具体操作的哪几张表的明细信息;
12.上述技术方案中,所述步骤1包括以下步骤:
13.步骤1.1:配置一张可导出表的相关信息,相关信息包括基本信息、筛选信息、当更新该张数据表时的条件信息、字段频繁项标志信息;
14.基本信息包括:表名中文名称,英文名称;
15.筛选信息包括:日期、机构、状态,可作为增量数据筛选的字段信息,
16.字段频繁项标志信息:如字段属于频繁项,针对此字段的修改后数据,需要对该字段在回滚操作时,保留当前实时更新数据,可供后续查询表信息并作展示;
17.步骤1.2:将可导出表的相关信息通过接口查询出来在前台展示,可供后续选择该表以及根据相关信息进行配置。
18.上述技术方案中,所述步骤2包括以下步骤:
19.步骤2.1:根据步骤1在页面展示的表的相关信息进行选择,选择一张或多张需要导出的表的相关信息;
20.步骤2.2:根据选中的表数据的相关信息进行配置当前表是导出全量数据还是增量数据,如果增量数据,则需选择增量数据的筛选字段,此处字段信息来自步骤1.1的可导出表的筛选信息,包括对频繁实时更新的字段打上字段频繁项标志信息,此字段在后续回滚操作时作为更新依据;
21.步骤2.3:根据步骤2.2配置所有选中表信息后,点击导出按钮将进行导出数据操作,得到数据脚本文件,并将所有数据脚本文件压缩,得到数据脚本文件压缩包;
22.步骤2.3.1:接口获取当前表相关信息以及全量增量信息后,将当前导出操作记录存入操作日志表,例如操作类型、操作人、操作时间,并将日志id记录;
23.步骤2.3.2:接口获取所有选中表以及对应的配置信息后,将包括表信息,操作日志id信息生成数据文件存入服务器指定的路径中;
24.步骤2.3.3:调用shell脚本获取步骤2.5的数据文件并连接数据库a服务器,在shell脚本中通过命令导出数据脚本文件;
25.步骤2.3.4:将数据脚本文件导出后,根据操作的具体表信息以及文件中的操作日志id信息,将当前导出操作记录存入操作日志明细表;
26.步骤2.3.5:如果导出的增量或全量表查询无数据,则直接返回提示当前导出表无数据,如果导出多个表数据,则无数据的数据文件不会生成,其他有数据的则通过步骤2.3.6进行生成数据脚本文件;
27.步骤2.3.6:根据选择的表直接生成对应表的数据文件,数据脚本文件以表名命名;最后生成的所有数据文件压缩成zip包,zip包以导出时间命名;并将该生成的数据文件,并将所有数据脚本文件并压缩成数据脚本文件压缩包放到服务器固定目录下,并将文件返回前端页面进行保存。
28.上述技术方案中,所述步骤3包括以下步骤:
29.步骤3.1:将步骤2中导出的数据脚本文件压缩包点击导入按钮,准备将数据脚本文件导入数据库b中;
30.步骤3.2:根据导入按钮获取上传的数据脚本文件压缩包,在点击按钮时需要校验数据脚本文件后缀名是否正确,如果不正确则直接提示上传文件异常,请重新上传;
31.步骤3.3:在步骤3.2校验过后,还需判断数据脚本文件压缩包中是否存在数据脚
本文件名称重复的文件,如果重复,则直接返回提示存在数据脚本文件重复,请重新上传;
32.步骤3.4:接口获取当前导入表的相关信息、全量增量信息、操作类型、操作人、操作时间后,将当前导入操作记录存入操作日志表,并将操作日志id记录;
33.步骤3.5:在上述步骤校验过后,则需要先通过代码解压后,再通过代码将所有数据脚本文件上传到服务器上,同时根据数据脚本文件解析出对应表名,并根据表名调用查询方法查询步骤1.1中提到的相关信息表,得到上传的表基本信息,更新操作时的条件信息,对应的更新字段信息,以及是否频繁实时更新字段信息,并拿到步骤3.4的操作日志id,将以上所有信息生成数据文件保存到服务器指定路径中;
34.步骤3.6:调用shell脚本连接数据库b服务器并获取所需的步骤3.5中生成的数据文件,通过解析数据文件得到入表基本信息,更新条件,字段信息以及操作日志id,并根据解析出的内容拼接出merge into语句,如果数据存在则更新,不存在则插入;
35.步骤3.7:同时根据对应的表名创建备份表,以便后续回滚操作时能找到对应的备份表进行数据回滚。
36.步骤3.8:再到对应文件夹下找到步骤3.5上传的数据脚本文件,先根据数据文件创建对应的临时表并将数据脚本文件中的数据插入临时表中;
37.步骤3.9:根据步骤3.7生成的备份表以及步骤3.8的临时表,可以通过minus和intersect方法得到两个表的差集与交集,并生成对应的数据脚本文件,便于后续查询日志时能查询此次操作更新的数据以及插入的数据,以及在异常回滚操作时能进行手工数据核对;
38.步骤3.10:根据步骤3.6执行merge into语句,将需要导入的数据插入到对应表中;
39.步骤3.11:执行完后将当前导入操作的表信息、以及步骤3.6中解析的操作日志id信息,以及步骤3.7中生成的备份表的表名信息,拼接成insert语句并存入操作日志明细表,和操作日志表通过操作日志id关联,同时删除步骤3.8中临时表的信息。
40.上述技术方案中,所述步骤4包括以下步骤:
41.步骤4.1:针对导入操作才会有回滚动作,通过查询操作日志列表,展示信息包括步骤3.4中存储的日志信息,通过操作人或操作时间选择需要回滚的导入操作可批量回滚当前操作执行的所有表数据或者点击该操作的操作日志id查看此次操作的明细日志信息,展示步骤3.11中的导入操作的表信息,备份表名,可选择明细列表中的某张表信息,点击回滚按钮,将进行回滚操作;
42.步骤4.2:根据选择的回滚数据,判断如果执行批量回滚,则根据操作日志id,如果选中回滚明细表的具体某张表的回滚,则根据传入的操作日志明细id查询出选中导入操作日志涉及的所有表信息以及对应的备份表名,此处备份表名供后续回滚操作时找到数据库b中对应的备份表;
43.步骤4.3:在根据选择的操作日志信息查询出对应数据后,将当前回滚操作记录存入操作日志表,例如操作类型,操作人,操作时间,并将操作日志id记录;
44.步骤4.4:将步骤4.2查询出的所有表信息以及对应的备份表后,根据表信息将查询到的信息,备份表名,以及步骤4.3中的操作日志id信息生成数据文件存入服务器指定路径中;
45.表名查询步骤1.1中提到的相关信息表,得到如表名信息,更新操作时的条件信息,对应的更新字段信息,以及是否频繁实时更新字段信息;
46.步骤4.5:调用shell脚本获取步骤4.4中生成的数据文件信息并连接数据库b服务器,在脚本中通过命令回滚操作数据脚本;
47.步骤4.6:通过解析步骤4.5中生成的数据文件,得到表名信息,备份表名,更新条件信息,配置频繁实时更新字段信息,先对即将回滚操作的表数据进行备份操作,并记录当前备份表名,同时根据当前文件上传时给到的备份表名,找到对应的备份表数据文件,同时根据拿到的相关表配置信息包括频繁实时更新字段等拼接对应的merge into语句,如果频繁实时更新字段已存在新的数据则更新,不存在则插入;
48.步骤4.7:将需要回滚的表数据删除后,将备份语句导入表中,同时根据步骤4.6中拼接好的merge into数据将生产上实时更新或新增的数据插入到表中,同时根据操作的具体表信息以及文件中的操作日志id信息,以及新生成的备份表名等,将当前回滚操作记录存入操作日志明细表;
49.步骤4.8:将数据脚本文件回滚后,根据操作的具体表信息以及文件中的操作日志id信息,将当前导出操作记录存入操作日志明细表;
50.上述技术方案中,所述步骤5包括以下步骤:
51.步骤5.1:查询所有操作日志,包括操作人,操作时间,操作类型包括导入,导出,回滚操作等;
52.步骤5.2:可根据选择的操作日志,查询此次操作所涉及的相关表的信息,即每次操作涉及到的多张表分别为一条操作记录,可查询到当前表操作的数据文件信息,以及对导入操作可生成对应的该表的更新数据文件以及删除数据文件。
53.因为本发明采用上述技术方案,因此具备以下有益效果:
54.1.一键化生成对应的数据脚本文件,无需自己再登录数据库操作导出数据文。
55.2.点击导入文件时,无需手动备份操作,避免忘记备份操作,减少误操作的可能性。
56.3.在某些忘记备份数据的场景下和开启数据库的记录日志时,导致一些数据误修改或删除并且无法很快恢复数据,只能通过系统日志去排查相关操作时,可进行通过本技术方案的回滚操作来进行数据恢复。
57.4、为了解决此种在测试环境整理开发数据上线或同步测试环境数据时需要开发人员的手工导出表数据,从而开发从前端页面一键数据生成功能,仅需在前台页面上勾选想导出的全量或者增量表数据,点击导出按钮,则可生成对应的数据脚本压缩包,以便快速拿到生产上线或者同步某个其他测试环境的数据,同时上线过程中也可根据操作错误的数据文件进行单张表或者整个当前异常导入操作匹配到对应的日志信息,从而拿到对应的备份文件信息进行回滚操作,也包括关于数据回滚操作时,生产数据可能存在已被修改的情况下的处理。同时也能清晰的查到此过程中的所有操作以及具体操作的某张表的操作日志等。
58.5、此时可通过方案的查看日志操作来定位操作人员的操作时间,同时如果有回滚需要可以直接点击回滚操作来进行数据恢复,操作人员可以根据当前勾选的需回滚操作日志找到对应的备份文件来进行数据回滚,以及根据页面选择的是否频繁实时修改标志信
息,确认当回滚操作时,如果数据已做修改时,如何回滚当前数据,完成异常数据的恢复并保留当前已修改数据,因此这种通过页面选择表数据的方法很好的解决了此问题,开发人员只需在前台选择相应的表数据,并配置全量增量以及增量过滤字段等属性点击导出按钮,则可以导出相应的数据文件,并且可将该数据文件通过导入功能导入到需要的数据库中,如果导入数据操作失误或者出现异常更新等情况,同时也可进行数据回滚,包括将生产实时修改数据进行合并回滚,以及查看具体的操作日志等操作,将直接的数据库操作放到页面进行导出数据操作,大大解决了非数据开发人员直接操作数据库从而引发的操作失误问题,同时也解决在手工操作易误操作并且回滚时同时实时有数据更新时,可以通过此方案的回滚找到备份文件以及具体的更新规则,实时同步生产数据并将误操作数据回滚。
具体实施方式
59.以下将对本发明的实施例给出详细的说明。尽管本发明将结合一些具体实施方式进行阐述和说明,但需要注意的是本发明并不仅仅只局限于这些实施方式。相反,对本发明进行的修改或者等同替换,均应涵盖在本发明的权利要求范围当中。
60.另外,为了更好的说明本发明,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员将理解,没有这些具体细节,本发明同样可以实施。
61.为了实现上述目的本发明采用以下技术手段:
62.一种多数据库间快速同步及异常回滚合并数据的方法,其特征在于,包括以下步骤:
63.步骤1:对数据库a表结构通过接口查询展示到前台页面,为后续提供导出表的选择;
64.步骤2:根据选择的表名点击导出按钮,得到数据脚本文件并将所有数据脚本文件压缩,得到数据脚本文件压缩包;
65.步骤3:将导出的数据文件点击上传按钮,将数据脚本文件中的数据导入到对应表中;
66.步骤4:如果导入过程中出现异常或者导入的数据异常或者不是预期内容,可选中当前操作或当前操作的下的某张表,点击回滚按钮,回滚表数据;
67.步骤5:可查询操作日志,包括当前操作人操作的基本信息以及当前操作具体操作的哪几张表的明细信息;
68.上述技术方案中,所述步骤1包括以下步骤:
69.步骤1.1:配置一张可导出表的相关信息,相关信息包括基本信息、筛选信息、当更新该张数据表时的条件信息、字段频繁项标志信息;
70.基本信息包括:表名中文名称,英文名称;
71.筛选信息包括:日期、机构、状态,可作为增量数据筛选的字段信息,
72.字段频繁项标志信息:如字段属于频繁项,针对此字段的修改后数据,需要对该字段在回滚操作时,保留当前实时更新数据,可供后续查询表信息并作展示;
73.步骤1.2:将可导出表的相关信息通过接口查询出来在前台展示,可供后续选择该表以及根据相关信息进行配置。
74.上述技术方案中,所述步骤2包括以下步骤:
75.步骤2.1:根据步骤1在页面展示的表的相关信息进行选择,选择一张或多张需要导出的表的相关信息;
76.步骤2.2:根据选中的表数据的相关信息进行配置当前表是导出全量数据还是增量数据,如果增量数据,则需选择增量数据的筛选字段,此处字段信息来自步骤1.1的可导出表的筛选信息,包括对频繁实时更新的字段打上字段频繁项标志信息,此字段在后续回滚操作时作为更新依据;
77.步骤2.3:根据步骤2.2配置所有选中表信息后,点击导出按钮将进行导出数据操作,得到数据脚本文件,并将所有数据脚本文件压缩,得到数据脚本文件压缩包;
78.步骤2.3.1:接口获取当前表相关信息以及全量增量信息后,将当前导出操作记录存入操作日志表,例如操作类型、操作人、操作时间,并将日志id记录;
79.步骤2.3.2:接口获取所有选中表以及对应的配置信息后,将包括表信息,操作日志id信息生成数据文件存入服务器指定的路径中;
80.步骤2.3.3:调用shell脚本获取步骤2.5的数据文件并连接数据库a服务器,在shell脚本中通过命令导出数据脚本文件;
81.步骤2.3.4:将数据脚本文件导出后,根据操作的具体表信息以及文件中的操作日志id信息,将当前导出操作记录存入操作日志明细表;
82.步骤2.3.5:如果导出的增量或全量表查询无数据,则直接返回提示当前导出表无数据,如果导出多个表数据,则无数据的数据文件不会生成,其他有数据的则通过步骤2.3.6进行生成数据脚本文件;
83.步骤2.3.6:根据选择的表直接生成对应表的数据文件,数据脚本文件以表名命名;最后生成的所有数据文件压缩成zip包,zip包以导出时间命名;并将该生成的数据文件,并将所有数据脚本文件并压缩成数据脚本文件压缩包放到服务器固定目录下,并将文件返回前端页面进行保存。
84.上述技术方案中,所述步骤3包括以下步骤:
85.步骤3.1:将步骤2中导出的数据脚本文件压缩包点击导入按钮,准备将数据脚本文件导入数据库b中;
86.步骤3.2:根据导入按钮获取上传的数据脚本文件压缩包,在点击按钮时需要校验数据脚本文件后缀名是否正确,如果不正确则直接提示上传文件异常,请重新上传;
87.步骤3.3:在步骤3.2校验过后,还需判断数据脚本文件压缩包中是否存在数据脚本文件名称重复的文件,如果重复,则直接返回提示存在数据脚本文件重复,请重新上传;
88.步骤3.4:接口获取当前导入表的相关信息、全量增量信息、操作类型、操作人、操作时间后,将当前导入操作记录存入操作日志表,并将操作日志id记录;
89.步骤3.5:在上述步骤校验过后,则需要先通过代码解压后,再通过代码将所有数据脚本文件上传到服务器上,同时根据数据脚本文件解析出对应表名,并根据表名调用查询方法查询步骤1.1中提到的相关信息表,得到上传的表基本信息,更新操作时的条件信息,对应的更新字段信息,以及是否频繁实时更新字段信息,并拿到步骤3.4的操作日志id,将以上所有信息生成数据文件保存到服务器指定路径中;
90.步骤3.6:调用shell脚本连接数据库b服务器并获取所需的步骤3.5中生成的数据文件,通过解析数据文件得到入表基本信息,更新条件,字段信息以及操作日志id,并根据
解析出的内容拼接出merge into语句,如果数据存在则更新,不存在则插入;
91.步骤3.7:同时根据对应的表名创建备份表,以便后续回滚操作时能找到对应的备份表进行数据回滚。
92.步骤3.8:再到对应文件夹下找到步骤3.5上传的数据脚本文件,先根据数据文件创建对应的临时表并将数据脚本文件中的数据插入临时表中;
93.步骤3.9:根据步骤3.7生成的备份表以及步骤3.8的临时表,可以通过minus和intersect方法得到两个表的差集与交集,并生成对应的数据脚本文件,便于后续查询日志时能查询此次操作更新的数据以及插入的数据,以及在异常回滚操作时能进行手工数据核对;
94.步骤3.10:根据步骤3.6执行merge into语句,将需要导入的数据插入到对应表中;
95.步骤3.11:执行完后将当前导入操作的表信息、以及步骤3.6中解析的操作日志id信息,以及步骤3.7中生成的备份表的表名信息,拼接成insert语句并存入操作日志明细表,和操作日志表通过操作日志id关联,同时删除步骤3.8中临时表的信息。
96.上述技术方案中,所述步骤4包括以下步骤:
97.步骤4.1:针对导入操作才会有回滚动作,通过查询操作日志列表,展示信息包括步骤3.4中存储的日志信息,通过操作人或操作时间选择需要回滚的导入操作可批量回滚当前操作执行的所有表数据或者点击该操作的操作日志id查看此次操作的明细日志信息,展示步骤3.11中的导入操作的表信息,备份表名,可选择明细列表中的某张表信息,点击回滚按钮,将进行回滚操作;
98.步骤4.2:根据选择的回滚数据,判断如果执行批量回滚,则根据操作日志id,如果选中回滚明细表的具体某张表的回滚,则根据传入的操作日志明细id查询出选中导入操作日志涉及的所有表信息以及对应的备份表名,此处备份表名供后续回滚操作时找到数据库b中对应的备份表;
99.步骤4.3:在根据选择的操作日志信息查询出对应数据后,将当前回滚操作记录存入操作日志表,例如操作类型,操作人,操作时间,并将操作日志id记录;
100.步骤4.4:将步骤4.2查询出的所有表信息以及对应的备份表后,根据表信息将查询到的信息,备份表名,以及步骤4.3中的操作日志id信息生成数据文件存入服务器指定路径中;
101.表名查询步骤1.1中提到的相关信息表,得到如表名信息,更新操作时的条件信息,对应的更新字段信息,以及是否频繁实时更新字段信息;
102.步骤4.5:调用shell脚本获取步骤4.4中生成的数据文件信息并连接数据库b服务器,在脚本中通过命令回滚操作数据脚本;
103.步骤4.6:通过解析步骤4.5中生成的数据文件,得到表名信息,备份表名,更新条件信息,配置频繁实时更新字段信息,先对即将回滚操作的表数据进行备份操作,并记录当前备份表名,同时根据当前文件上传时给到的备份表名,找到对应的备份表数据文件,同时根据拿到的相关表配置信息包括频繁实时更新字段等拼接对应的merge into语句,如果频繁实时更新字段已存在新的数据则更新,不存在则插入;
104.步骤4.7:将需要回滚的表数据删除后,将备份语句导入表中,同时根据步骤4.6中
拼接好的merge into数据将生产上实时更新或新增的数据插入到表中,同时根据操作的具体表信息以及文件中的操作日志id信息,以及新生成的备份表名等,将当前回滚操作记录存入操作日志明细表;
105.步骤4.8:将数据脚本文件回滚后,根据操作的具体表信息以及文件中的操作日志id信息,将当前导出操作记录存入操作日志明细表;
106.上述技术方案中,所述步骤5包括以下步骤:
107.步骤5.1:查询所有操作日志,包括操作人,操作时间,操作类型包括导入,导出,回滚操作等;
108.步骤5.2:可根据选择的操作日志,查询此次操作所涉及的相关表的信息,即每次操作涉及到的多张表分别为一条操作记录,可查询到当前表操作的数据文件信息,以及对导入操作可生成对应的该表的更新数据文件以及删除数据文件。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1