CN117807054A - 数据库迁移方法、装置、设备和介质 - Google Patents

数据库迁移方法、装置、设备和介质 Download PDF

Info

Publication number
CN117807054A
CN117807054A CN202311865693.6A CN202311865693A CN117807054A CN 117807054 A CN117807054 A CN 117807054A CN 202311865693 A CN202311865693 A CN 202311865693A CN 117807054 A CN117807054 A CN 117807054A
Authority
CN
China
Prior art keywords
synchronization
database
data
incremental
tables
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.)
Pending
Application number
CN202311865693.6A
Other languages
English (en)
Inventor
刘宾
刘征彦
杨玉新
王世佳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Industrial and Commercial Bank of China Ltd ICBC
Original Assignee
Industrial and Commercial Bank of China Ltd ICBC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Industrial and Commercial Bank of China Ltd ICBC filed Critical Industrial and Commercial Bank of China Ltd ICBC
Priority to CN202311865693.6A priority Critical patent/CN117807054A/zh
Publication of CN117807054A publication Critical patent/CN117807054A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/214Database migration support
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3065Monitoring arrangements determined by the means or processing involved in reporting the monitored data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Computing Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开提供了一种数据库迁移方法,可以应用于信息安全、数据库技术领域。该方法用于将业务系统的数据存储单元从Oracle数据库迁移到MySQL数据库,包括:获取需要全量同步的表和需要增量同步的表的信息,全量数据同步时将需要全量同步的表中的每个表作为一个任务,启动一个全量同步数据迁移线程来同步每个表中的存量数据;当需要从MySQL数据库到Oracle数据库增量同步时,基于对MySQL数据库的二进制日志文件binlog日志的监控来进行增量数据同步;当需要从Oracle数据库到MySQL数据库的增量同步时,基于需要增量同步的表中每个表对应的物化视图日志表来进行增量数据同步。本公开还提供了一种数据库迁移装置、设备、存储介质和程序产品。

Description

数据库迁移方法、装置、设备和介质
技术领域
本公开涉及信息安全、数据库技术领域,更具体地涉及一种数据库迁移方法、装置、设备、介质和程序产品。
背景技术
许多企业的业务系统搭建之初使用的数据存储单元是Oracle数据库。然而在当前数据安全、信息安全等问题愈发突出的背景下,Oracle数据库为商业数据库,由于代码不开源等原因,很有可能存在代码后门,对业务系统的稳定运行存在未知的隐患,尤其是对银行的业务系统而言。对此,部分企业开始将一些业务系统所使用的数据存储单元从Oracle数据库替换为MySQL数据库。
然而企业的业务系统每天需要处理大量的交易数据,在将Oracle数据库替换为MySQL数据库的过程中,如何减少对业务系统的运行的影响是非常重要的,尤其是当业务系统处理的是实时性的联机业务时,需要尽量避免数据库的迁移对客户使用业务系统的影响。
发明内容
鉴于上述问题,本公开实施例提供了一种数据库迁移方法、装置、设备、介质和程序产品,可以高效稳定的迁移数据库,在客户无感知的情况下完成业务系统的数据存储单元的迁移替换。
本公开实施例的第一方面,提供了一种数据库迁移方法,用于将业务系统的数据存储单元从Oracle数据库迁移到MySQL数据库。其中,所述方法包括:获取需要全量同步的表和需要增量同步的表的信息,其中,所述需要增量同步的表为所述需要全量同步的表中的至少部分表;将所述需要全量同步的表中的每个表作为一个任务,启动一个全量同步数据迁移线程,通过运行每个所述全量同步数据迁移线程来将每个表中的存量数据从所述Oracle数据库同步到所述MySQL数据库;当需要从所述MySQL数据库中将所述需要增量同步的表中的增量数据同步到所述Oracle数据库时,基于对所述MySQL数据库的二进制日志文件binlog日志的监控来进行增量数据同步;以及当需要从所述Oracle数据库中将所述需要增量同步的表中的增量数据同步到所述MySQL数据库时,基于所述需要增量同步的表中每个表对应的物化视图日志表来进行增量数据同步。
根据本公开的实施例,所述当需要从所述Oracle数据库中将所述需要增量同步的表中的增量数据同步到所述MySQL数据库时,基于所述需要增量同步的表中每个表对应的物化视图日志表来进行增量数据同步包括:通过运行物化视图日志表创建线程,为所述需要增量同步的表中的每个表创建所述物化视图日志表;利用生产者进程读取所述物化视图日志表的信息并写入消息队列;以及利用与所述生产者进程对应的消费者进程,从所述消息队列中读取消息并在所述MySQL数据库执行读取到的消息中的操作语句。
根据本公开的实施例,所述为所述需要增量同步的表中的每个表创建所述物化视图日志表包括:获取所述需要增量同步的表中每个表的索引类型;当一个表的索引类型包括主键类型时,选择所述主键类型的索引创建所述物化视图日志表;以及当一个表的索引类型不包括主键类型时,如果该表的索引类型包括唯一键类型,则选择唯一键类型的索引来创建所述物化视图日志表;否则选择普通索引类型的索引来创建所述物化视图日志表。
根据本公开的实施例,所述当需要从所述Oracle数据库中将所述需要增量同步的表中的增量数据同步到所述MySQL数据库时,基于所述需要增量同步的表中每个表对应的物化视图日志表来进行增量数据同步还包括:获取所述需要全量同步的表中每个表的存量数据的同步进度;获取所述需要增量同步的表中每个表的物化视图日志表的创建进度;当所述需要增量同步的表中任意的第一表的所述同步进度为同步完成,且所述第一表的所述物化视图日志表的创建进度为创建完成之后,从所述Oracle数据库中将所述第一表中的增量数据同步到所述MySQL数据库。
根据本公开的实施例,所述当需要从所述MySQL数据库中将所述需要增量同步的表中的增量数据同步到所述Oracle数据库时,基于对所述MySQL数据库的二进制日志文件binlog日志的监控来进行增量数据同步包括:基于所述需要增量同步的表中每个表的表名,对所述需要增量同步的表中的每个表创建一个唯一主题topic;在分布式消息平台中为所创建的每个topic分配存储空间;当监控到所述binlog日志的变化时,读取所述binlog日志中发生变化的信息,其中,所述binlog日志中发生变化的每个信息包括发生变化的表的表名和SQL语句;发送所述SQL语句到在所述分布式消息平台中与所述发生变化的表的表名对应的目标topic的存储空间下,其中,在所述目标topic的存储空间中以队列的数据结构存储所述SQL语句;当监控到所述分布式消息平台中任意topic的存储空间中的数据变化时,从所述任意topic的存储空间中的队列中读取消息,并在所述Oracle数据库中执行读取到的消息中的SQL语句。
根据本公开的实施例,所述将所述需要全量同步的表中的每个表作为一个任务,启动一个全量同步数据迁移线程,通过运行每个所述全量同步数据迁移线程来将每个表中的存量数据从所述Oracle数据库同步到MySQL数据库包括:根据所述需要全量同步的表中每个表中的存量数据的结束位置信息,配置每个表的结束位置点,得到第一标记点;当每个所述全量同步数据迁移线程完成任务后,记录迁移到所述MySQL数据库中的数据的结束位置点,得到第二标记点;以及当所述第一标记点与所述第二标记点中的数据的字段和值相同时,确定所述全量同步数据迁移线程对应的表中的存量数据同步完成。
根据本公开的实施例,所述获取需要全量同步的表和需要增量同步的表的信息包括:获取同步总览表,其中,所述同步总览表中记录了所述需要全量同步的表的表名,并通过标记从所述需要全量同步的表中区分出所述需要增量同步的表;以及从所述同步总览表中读取所述需要全量同步的表和所述需要增量同步的表的表名。
根据本公开的实施例,其中,所述方法还包括:基于用户对所述业务系统中的客户的选择操作,确定目标客户;当所述需要全量同步的表中所有表的存量数据均从所述Oracle数据库同步到所述MySQL数据库之后,将所述目标客户的业务所使用的数据库从所述Oracle数据库首次切换到所述MySQL数据库;以及在所述首次切换之后重复执行如下操作,直到所述目标客户的业务使用所述MySQL数据库的运行状态满足稳定运行条件,包括:在所述目标客户的业务使用所述MySQL数据库正常运行期间,从所述MySQL数据库中将所述需要增量同步的表中的增量数据同步到所述Oracle数据库;当所述目标客户的业务在使用所述MySQL数据库的过程中出现故障时,将所述目标客户的业务所使用的数据库切换回所述Oracle数据库;当故障排除后,从所述Oracle数据库中将切换回所述Oracle数据库后所述需要增量同步的表中的增量数据同步到所述MySQL数据库;以及重新将所述目标客户的业务所使用的数据库切换到所述MySQL数据库。
根据本公开的实施例,所述基于用户对所述业务系统中的客户的选择操作,确定目标客户还包括:当所述目标客户的业务使用所述MySQL数据库的运行状态满足所述稳定运行条件后,接收用户选择的新的目标客户,以更新所述目标客户。
本公开实施例的第二方面,提供了一种数据库迁移装置。所述装置用于将业务系统的数据存储单元从Oracle数据库迁移到MySQL数据库。其中,所述装置包括获取模块、全量同步模块。第一增量同步模块和第二增量同步模块。获取模块,用于获取需要全量同步的表和需要增量同步的表的信息,其中,所述需要增量同步的表为所述需要全量同步的表中的至少部分表。全量同步模块,用于将所述需要全量同步的表中的每个表作为一个任务,启动一个全量同步数据迁移线程,通过运行每个所述全量同步数据迁移线程来将每个表中的存量数据从所述Oracle数据库同步到所述MySQL数据库。第一增量同步模块,用于当需要从所述MySQL数据库中将所述需要增量同步的表中的增量数据同步到所述Oracle数据库时,基于对所述MySQL数据库的二进制日志文件binlog日志的监控来进行增量数据同步。第二增量同步模块,用于当需要从所述Oracle数据库中将所述需要增量同步的表中的增量数据同步到所述MySQL数据库时,基于所述需要增量同步的表中每个表对应的物化视图日志表来进行增量数据同步。
根据本公开的实施例,其中,所述装置还包括目标客户选择模块和灰度切流模块。所述目标客户选择模块用于基于用户对所述业务系统中的客户的选择操作,确定目标客户。所述灰度切流模块用于当全量同步模块将所述需要全量同步的表中所有表的存量数据均从所述Oracle数据库同步到所述MySQL数据库之后,将所述目标客户的业务所使用的数据库从所述Oracle数据库首次切换到所述MySQL数据库,并在所述首次切换之后重复执行如下操作,直到所述目标客户的业务使用所述MySQL数据库的运行状态满足稳定运行条件,包括:在所述目标客户的业务使用所述MySQL数据库正常运行期间,调用所述第一增量同步模块从所述MySQL数据库中将所述需要增量同步的表中的增量数据同步到所述Oracle数据库;当所述目标客户的业务在使用所述MySQL数据库的过程中出现故障时,将所述目标客户的业务所使用的数据库切换回所述Oracle数据库;当故障排除后,调用所述第二增量同步模块从所述Oracle数据库中将切换回所述Oracle数据库后所述需要增量同步的表中的增量数据同步到所述MySQL数据库,然后重新将所述目标客户的业务所使用的数据库切换到所述MySQL数据库。
本公开实施例的第三方面,提供了一种电子设备。该电子设备包括:一个或多个处理器和存储器。所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行上述方法。
本公开实施例的第四方面,提供了一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行上述方法。
本公开实施例的第五方面,还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述方法。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述内容以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本公开实施例的数据库迁移方法、装置、设备、介质和程序产品的系统架构图;
图2示意性示出了根据本公开实施例的数据库迁移方法的流程图;
图3示意性示出了本公开另一实施例的数据库迁移方法的流程图;
图4示意性示出了应用本公开实施例的数据库迁移方法的一个银企转账系统的架构图;
图5示意性示出了图4所示的银企转账系统从Oracle数据库存储单元到MySQL数据库存储单元的全量数据同步流程;
图6示意性示出了图4所示的银企转账系统从Oracle数据库存储单元到MySQL数据库存储单元的增量数据同步流程;
图7示意性示出了图4所示的银企转账系统从MySQL数据库存储单元到Oracle数据库存储单元的增量数据同步流程;
图8示意性示出了根据本公开实施例的数据库迁移装置的结构框图;以及
图9示意性示出了适于实现根据本公开实施例的数据库同步方法的电子设备的方框图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。
图1示意性示出了根据本公开实施例的数据库迁移方法、装置、设备、介质和程序产品的系统架构图。
如图1所示,该系统架构100可以包括数据库迁移装置101、Oracle数据库102、MySQL数据库103和业务系统104。其中,业务系统104分别与Oracle数据库102和MySQL数据库103相连。
数据库迁移装置101分别与Oracle数据库102和MySQL数据库103相连接,用于将业务系统104的数据存储单元从Oracle数据库102逐步切换到MySQL数据库103。
业务系统104例如可以是负责银行与大宗商品交易公司转账交易服务的银企转账系统。其中,银企转账系统在双方互联网系统互联的基础上,为大宗商品交易公司提供自助式资金转账服务,实现资金的实时划转。
数据库迁移装置101可以执行本公开实施例的数据库迁移方法,在将业务系统104的数据存储单元从Oracle数据库102逐步切换到MySQL数据库103的过程中,实现高效稳定、客户无感知的迁移替换。数据库迁移装置101可以运行在云平台上,如PAAS云台(Platformas a service,平台即服务)。例如,可以在PAAS运行平台上并行的运行多个容器,每个容器中运行一个数据库迁移装置101,这样可以实现Oracle数据库102和MySQL数据库103之间的数据并行迁移,提高数据同步效率。
根据本公开的一些实施例,在将业务系统104的数据存储单元从Oracle数据库102逐步切换到MySQL数据库103的过程中,可以是从客户维度逐步切换。例如可以先选择一个目标客户,让其运行使用MySQL数据库103并观察运行效果,如出现故障则及时切换回Oracle数据库102;如果运行正常且满足稳定性运行条件再控制新的目标客户的业务运行也使用MySQL数据库103。这样,可以实现从业务系统104的数据存储单元的逐步、稳定的切换。
以下将基于图1描述的系统架构100,对本公开实施例的数据库迁移方法和装置分别进行详细描述。应注意,下述方法中各个操作的序号仅作为该操作的表示以便描述,而不应被看作表示该各个操作的执行顺序。除非明确指出,否则该方法不需要完全按照所示顺序来执行。
图2示意性示出了根据本公开实施例的数据库迁移方法的流程图。
如图2所示,根据该实施例的数据库迁移方法可以包括操作S210~操作S240。
首先在操作S210,获取需要全量同步的表和需要增量同步的表的信息。其中,需要增量同步的表为需要全量同步的表中的至少部分表。
当将业务系统104的数据存储单元从Oracle数据库102最终变更到MySQL数据库103时,需要将Oracle数据库102中用于存储业务系统104的数据的所有表都迁移。因此,在一个实施例中,可以在操作S210中可以查找并统计Oracle数据库102中用于存储业务系统104的数据的所有表的信息,这样即得到了需要全量同步的表的信息。然后,如果存在用于区分一个表是否需要增量同步的信息时,则可以从需要全量同步的表中再筛选出需要增量同步的表的信息。例如,有些基础信息表,如记录客户的编号、身份等信息的表,一次登记后就不再变换,可以仅进行全量同步而不考虑增量同步的事情,这样在数据增量同步的过程中可以减少需要监控的表的数量,减少计算机消耗。当然如果不存在用于区分一个表是否需要增量同步的信息时,可以视需要增量同步的表与需要全量同步的表相同。
在一个实施例中,可以从Oracle数据库102中查找出用于存储业务系统104的数据的所有表的ID、表名等信息,然后将查找到的所有数据表的信息都统计到一张表中(本文中命名为“同步总览表”)。这样,在操作S210中可以直接读取同步总览表来获取需要全量同步的表和需要增量同步的表的信息。
同步总览表的表结构可以如下表1所示。
表1,同步总览表的表结构
字段 字段名 数据类型 主键
ID 数据ID varchar(128)
Table_name 表名 varchar(128)
Operate_type 操作类型 int(128)
Status 同步状态 int(128)
业务系统104的数据存储单元的迁移本质上是不同类型表的同步。表1所示的同步总览表主要存储了数据库同步过程中需要数据同步的表名。
可以在同步总览表中统计数据表信息时,根据每个表中是否需要增量同步而施加不同的标记,从而可以根据同步总览表中的标记来区分需要增量同步的表。例如,表1中通过字段Operate_type表示表的操作类型。Operate_type为0时,表示对应的表只进行全量同步Operate_type为1时,代表这个表既进行全量同步又进行增量同步。
然后在操作S220,将需要全量同步的表中的每个表作为一个任务,启动一个全量同步数据迁移线程,通过运行每个全量同步数据迁移线程来将每个表中的存量数据从Oracle数据库102同步到MySQL数据库103。
当数据库迁移装置运行在PAAS云平台时,可以在PAAS云平台启动多个容器,向每个容器分配需要全量同步的表中一定数量的表,然后每个容器中根据被分配到的任务数量,启动对应数量的全量同步数据迁移线程,将每个任务所处理的数据表中的存量数据从Oracle同步到MySQL。
接下来在操作S230,当需要从MySQL数据库103中将需要增量同步的表中的增量数据同步到Oracle数据库102时,基于对MySQL数据库103的二进制日志文件binlog日志的监控来进行增量数据同步。binlog日志,即Binary Log二进制日志文件,用于记录MySQL数据库103中所有对数据和表结构的更改操作
例如,当需要全量同步的表中全部表的存量数据均从Oracle数据库102同步到MySQL数据库103后,可以将当前指定的目标客户的业务运行所使用的数据存储单元从Oracle数据库102切换到MySQL数据库103。然后在目标客户的业务使用MySQL数据库103运行正常但尚未达到稳定运行条件(例如,持续正常运行时长超过阈值时长,或者持续正常交易量达到阈值数量)的情况下,就需要从MySQL数据库103中将需要增量同步的表中的增量数据同步到Oracle数据库102。这样当目标客户的业务使用MySQL数据库103运行出现故障时,可以平滑稳定地切换回Oracle数据库102。
在从MySQL数据库103到Oracle数据库102的增量数据同步时,基于对MySQL数据库103的二进制日志文件binlog日志的监控来进行增量数据同步。MySQL数据库103中的binlog日志用于记录MySQL数据库103中所有对数据和表结构的更改操作。可以监控binlog日志的变化信息,当监控到变化时读取变化信息中的操作语句,然后在Oracle数据库102中执行该操作语句。
在一个实施例中,当需要从MySQL数据库103到Oracle数据库102的增量数据同步时,首先基于需要增量同步的表的表名,对需要增量同步的表中的每个表创建一个唯一主题topic,并在分布式消息平台中为所创建的每个topic分配存储空间。然后当监控到binlog日志的变化时,读取binlog日志中发生变化的信息,其中,binlog日志中发生变化的每个信息包括发生变化的表的表名和SQL语句。接着发送SQL语句到在分布式消息平台中与发生变化的表的表名对应的目标topic的存储空间下,其中,在目标topic的存储空间中以队列的数据结构存储SQL语句。同时对分布式消息平台中每个topic的存储空间进行监控,其中,当监控到分布式消息平台中任意topic的存储空间中的数据变化时,从任意topic的存储空间中的队列中读取消息,并在Oracle数据库102中执行读取到的消息中的SQL语句。
通过在分布式消息平台中为每个topic分配存储空间,并将binlog日志的变化消息写到每个topic的存储空间中,这样可以通过从分布式消息平台中读取SQL语句来实现从MySQL数据库103到Oracle数据库的增量数据同步。以此方式,一方面通过分布式平台快速将binlog日志中发生变化的消息保存下来,便于对binlog日志中发生变化的信息的及时响应处理;另一方面从分布式平台中读取消息中的SQL语句并执行的过程,与MySQL数据库103无关,减少了增量数据同步过程对MySQL数据库103的性能影响,极大地减少了增量数据同步对目标客户的业务使用带来影响。
相应地,在操作S240,当需要从Oracle数据库102中将需要增量同步的表中的增量数据同步到MySQL数据库103时,基于需要增量同步的表中每个表对应的物化视图日志表来进行增量数据同步。
具体地,当目标客户的业务使用MySQL数据库103运行出现故障而将目标客户的业务切换回Oracle数据库102后,如果故障修复,后续还需要将目标客户的业务切换到MySQL数据库103继续运行观察。在目标客户的业务切换回Oracle数据库102后,到再次切换会MySQL数据库103之前,Oracle数据库102中的这些需要增量同步的表中的增量数据,就需要先同步到MySQL数据库103。
在从Oracle数据库102向MySQL数据库103进行增量数据同步时,可以借助于Oracle数据库102的物化视图日志表特性进行数据的迁移同步。其中,物化视图日志表中记录了一个表的插入、更新和删除的操作语句。可以在目标客户的业务切换回Oracle数据库102时,对需要增量同步的表中每个表创建一个物化视图日志表。然后在需要进行增量数据同步时,从物化视图日志表中读取操作语句,然后在MySQL数据库103中执行该操作语句。
在一个实施例中,可以运行物化视图日志表创建线程,通过物化视图日志表创建线程为需要增量同步的表中每个表创建物化视图日志表。然后还可以运行成对的生产者进程和消费者进程,其中利用生产者进程读取物化视图日志表的信息并写入消息队列,利用与消费者进程,从消息队列中读取消息并在MySQL数据库103执行读取到的消息中的操作语句。这样,借助于Oracle数据库102的物化视图日志表特性快速记录需要增量同步的表中每个表中的数据增删改操作语句。与此同时,在进行数据同步的时候,通过生产者进程将物化视图日志表中的信息转换为队列中的消息,并通过消费者进程消费消息来执行操作语句,这个过程与Oracle数据库102无关,从而有效可以数据同步过程对Oracle数据库102的性能影响,极大地减少了增量数据同步对业务系统104的运行使用带来影响。
当数据库迁移装置运行在PAAS云平台时,可以在PAAS云平台启动多个容器,然后把需要增量同步的表分配到多个容器中,同时在每个容器中运行物化视图日志表创建线程和一对生产者进程和消费者进程。通过多个容器的并行运行,提高增量数据的同步效率。
可见,本公开实施例将业务系统104的数据存储单元从Oracle数据库102迁移到MySQL数据库103的过程,划分为全量数据同步(操作S210)、从Oracle数据库102到MySQL数据库103的增量同步(操作S220)和从MySQL数据库103到Oracle数据库102的增量同步(操作S230)三个环节,并在该三个环节中根据每个环节的特性针对性地选择相应的同步方式,提高了每个环节的数据同步稳定性和效率,减少了数据库迁移对业务系统104的影响。
图3示意性示出了本公开另一实施例的数据库迁移方法的流程图。
如图3所示,根据该实施例的数据库迁移方法可以包括操作S301~操作S309。
首先在操作S301,基于用户对业务系统104中的客户的选择操作,确定目标客户。
接下来在操作S302,当需要全量同步的表中所有表的存量数据同步完成后,将目标客户的业务所使用的数据库从Oracle数据库102首次切换到MySQL数据库103。其中,从Oracle数据库102到MySQL数据库103进行全量数据同步的具体执行过程参考前述操作S220。
此后可以轮询执行操作S303~操作S308,直到在操作S304中判断目标客户的业务使用MySQL数据库103的运行状态满足稳定运行条件。具体说明如下。
在操作S303,判断目标客户的业务使用MySQL数据库103的运行是否正常。如果正常,则执行操作S304,如果不正常,则执行操作S306。
在操作S304,判断目标客户的业务使用MySQL数据库103的运行状态是否满足稳定运行条件(例如,持续正常运行时长超过阈值时长,或者持续正常交易量达到阈值数量)。如果是,则执行操作S309,并跳出循环。如果否,则执行操作S305。
在操作S305,从MySQL数据库103中将需要增量同步的表中的增量数据同步到Oracle数据库102。具体的数据同步过程可以参考前文介绍的操作S230。
在操作S306,当目标客户的业务使用MySQL数据库103运行不正常时,将目标客户的业务所使用的数据库切换回Oracle数据库102。
在操作S307,当故障排除后,从Oracle数据库102中将需要增量同步的表中的增量数据同步到MySQL数据库103。具体的数据同步过程可以参考前文介绍的操作S240。
在操作S308,重新将目标客户的业务所使用的数据库切换到MySQL数据库103。
接下来返回操作S303,进行新一轮轮询。其中,在任意一次轮询中,当操作S303中判断目标客户的业务使用MySQL数据库103的运行正常,且操作S304中判断目标客户的业务使用MySQL数据库103的运行状态满足稳定运行条件,则在操作S309中确定目标客户的业务成功迁移到MySQL数据库103,并终止轮询。
根据本公开的实施例,当确定目标客户的业务成功迁移到MySQL数据库103后,如果接收到用户选择的新的目标客户,则可以再次触发操作S301~操作S309针对更新后的目标客户进行数据库的切换。以此方式,本公开实施例可以让一家客户的业务先存储到MySQL数据库103当中去,并持续运行一段时间,当该客户的业务运行正常且满足稳定运行条件后,再进行第二家客户的数据存储切流。通过这样的方式,可以对MySQL数据库103进行充分的验证,当有问题存在时,可以通过快速对将业务系统104的数据存储单元从MySQL数据库103切换到Oracle数据库102,极大提高数据库迁移过程中业务系统104的稳定性、安全性。
图4示意性示出了应用本公开实施例的数据库迁移方法的一个银企转账系统400的架构图。
如图4所示,该银企转账系统可以包括企业交易发起单元、网络转发层、分布式注册服务平台、银企接入层、银企交易处理层、目标客户检测单元、Oracle交易处理单元、Oracle数据库存储单元402、MySQL交易处理单元、MySQL数据库存储单元403和数据同步单元401。
其中,Oracle数据库存储单元402可以包括一个或多个Oracle数据库。MySQL数据库存储单元403可以包括一个或多个Oracle数据库。数据同步单元401中可以设置有数据库迁移装置101,可以执行参考上文图2和图3的方法,在Oracle数据库存储单元和MySQL数据库存储单元之间进行数据同步,实现银企转账系统400的数据存储单元逐步从Oracle数据库存储单元402切换到MySQL交易存储单元403。
在企业交易发起单元,企业发起向银行发起转账交易。网络转发层收到机构发来的交易报文后,在分布式注册服务平台查找银企转账系统的银企接入层,并发送交易报文至该银企接入层进行处理
银企接入层收到交易报文后会读取目标客户检测单元中信息,根据该交易报文所涉及的客户是否为当前所涉及的目标客户,对交易报文进行打标签处理。然后这笔交易信息传输给银企交易处理层。
银企交易处理层则会根据交易报文的信息,将这笔交易提供给进行处理并,根据交易报文上所打的标签将信息提供给Oracle交易存储单元或MySQL交易存储单元。其中,Oracle交易存储单元可以将接收到信息存储到Oracle数据库存储单元402,MySQL交易存储单元可以将接收到的信息存储到MySQL数据库存储单元403中。
具体地,企业交易发起单元可以运行在企业的终端机器上。在企业交易发起单元中,企业可以发起与银行之间各种类型的交易,每种交易只有一种交易类型代码,为唯一的映射关系。企业人员在企业交易发起单元发起转账交易,需要在交互界面输入收款方账户、转账方账户、交易代码、转账金额、收款方账户名、转账方账户名等信息。这些信息会被企业交易发起单元处理成交易报文。
网络转发层的工作如下:步骤1:网络转发层收到应用发送来的交易报文,首先对交易报文进行解析,判断交易报文是发给哪个系统的,如银企转账系统。步骤2:网络转发层首先在分布式注册平台上搜索银企转账系统是否存在注册信息。如果存在,网络转发层会进一步搜索接收该交易报文的服务接口。然后网络转发层会将交易报文转发到该接口。步骤3:如果不存在,则网络转发层则向企业交易发起单元发送银企转账系统未注册的信息,请联系管理员的信息。
银企接入层可以以容器的形式运行在PAAS云平台,同时以API接口的形式在分布式注册平台注册,为银企转账系统提供对外的服务接口。其工作步骤如下:步骤1:银企接入层在接收到网络转发层转发的交易报文后,提取交易报文中的企业信息和交易信息,将这两方面信息进行处理(例如,拼接成Json格式),然后发送到目标客户检测单元,判断该交易中所涉及的客户(和/或交易类型)是否属于数据库切流测试范围。步骤2:目标客户检测单元会根据银企接入层发送的Json信息做出范围判断,向银企接入层返回1或者0的信息。步骤3:如果目标客户检测单元返回的信息为1,银企接入层则会对网络转发层发送来的交易报文进行修改,添加字段Tag:MySQL,代表这条交易的信息要存储到MySQL数据库。步骤4:如果目标客户检测单元返回的信息为0,银企接入层则会对交易报文进行修改,添加字段Tag:Oracle,代表这条交易的信息要存储到Oracle数据库。步骤5:银企接入层修改完交易报文后,则会将交易报文发送到银企交易处理层。
目标客户检测单元:在将Oracle数据库存储单元402替换成MySQL数据库存储单元403的过程中,不能直接将全部的客户和全部的交易类型都使用MySQL数据库进行存储。如果全部直接使用MySQL数据库进行存储,并没有对MySQL数据库进行测试,存在极大的风险性。因此在银企转账系统中设定了一个目标客户检测单元。其运行步骤如下:目标客户检测单元接收到银企接入层发送的信息(例如,Json字符串)后,可以首先根据消息中的客户信息确定是否是当前设定的目标客户,当是目标客户时,还可以进一步判断该笔交易是否包含预设的交易类型。如果是目标客户且为预设的交易类型,便会生成报文标签为1的信息到银企接入层。如果不是目标客户或者不属于预设的交易类型,便会生成报文标签为0的信息到银企接入层。通过目标客户检测单元的交互界面可以实现目标客户的新增、修改以及交易类型的新增或修改,从而实现银企转账系统存储交易的逐步切流。
银企交易处理层连接着MySQL交易处理单元和Oracle交易处理单元。其运行步骤如下。步骤1:银企交易处理层接收到交易报文后,对交易报文中的tag字段进行解析。步骤2:当tag字段为MySQL时,交易报文便被发送到MySQL交易处理单元。步骤3:当tag字段为Oracle时,转账交易报文便被发送到Oracle交易处理单元。
Oracle交易处理单元运行PAAS云平台,其工作原理如下:
Oracle交易处理单元根据交易报文的信息,处理Oracle数据存储单元中的账户表。具体地,Oracle交易处理单元可以根据交易报文中发起交易的客户的名称或ID等信息,在Oracle数据库存储单元402中找到记录该客户的账户信息的账户表,然后可以根据交易报文中的转账金额将该客户的账户表中的储蓄存款的金额扣减相应金额。
Oracle交易处理单元可以根据交易报文中的收款方的客户名称或账号等信息,在Oracle数据库存储单元402中定位到记录收款方的账户信息的账户表,将其储蓄存款的金额增加相应金额。Oracle交易处理单元执行完交易的同时会将这笔交易记录存储Oracle数据库存储单元402的到交易日志表中。
MySQL交易处理单元也可以运行PAAS云平台,其工作原理如下:MySQL交易处理单元根据交易报文的信息,处理MySQL数据存储单元中的账户表。具体地,MySQL交易处理单元,根据交易报文中发起交易的客户的名称或ID在MySQL数据库存储单元403中找到记录该收款方的账户信息的账户表,将其储蓄存款扣减交易报文中指定的转账金额。然后MySQL交易处理单元根据交易报文中的收款方的名称或ID等定位到MySQL数据存储单元中的记录收款方的账户信息的账户表,将其储蓄存款的金额增加交易报文中指定的收款金额。MySQL交易处理单元执行完交易的同时会将这笔交易记录存储MySQL数据库存储单元403的到交易日志表中。
数据同步单元401分别与MySQL数据库存储单元403和Oracle数据库存储单元402相连,可以执行本公开实施例的数据库迁移方法,实现将银企转账系统的数据存储单元逐步从Oracle数据库存储单元402迁移到MySQL数据库存储单元403。相应地,该数据同步单元401中可以设置有本公开实施例的数据库迁移装置、电子设备、存储介质或程序产品。
在一个实施例中,数据同步单元401可以配置有同步方向状态参数m_status,用来控制数据同步的状态和方向。m_status的值可以有五个值(例如0、1、2、3和4),每个值代表一个数据同步的状态和方向。例如,当m_status为0时,MySQL数据库存储单元403与Oracle数据库存储单元402不进行数据同步。当m_status为1时,Oracle数据库存储单元402向MySQL数据库存储单元403进行全量数据同步,即将需要全量同步的表中的存量数据从Oracle数据库存储单元402同步到MySQL数据库存储单元403。当m_status为2时,Oracle数据库存储单元402向MySQL数据库存储单元403进行增量数据同步,即从Oracle数据库存储单元402将需要增量同步的表中的增量数据同步到MySQL数据库存储单元403。当m_status为3时,MySQL数据库存储单元403向Oracle数据库存储单元402进行增量数据同步,即从MySQL数据库存储单元403中将需要增量同步的表中的增量数据同步到Oracle数据库存储单元402。当m_status为4时,MySQL数据库存储单元403与Oracle的数据库存储单元402同时进行增量数据同步。m_status的取值的设置可以是人工操作,也可以是通过事件触发。其中,在银企转账系统中,当选定目标客户后,在将目标客户的业务运行从Oracle数据库存储单元402切换到MySQL数据库存储单元403之前,需要先将目标客户的业务运行需要使用的所有表中的存量数据同步到MySQL数据库存储单元403,此时需要设置m_status为1。当全量数据同步完成后,目标客户的业务切换到MySQL数据库存储单元403运行正常但运行状态还未达到稳定运行条件的期间,需要设置m_status值为3,将目标客户运行时在MySQL数据库存储单元403中产生的增量数据同步到Oracle数据库存储单元402,以便如果目标客户的业务使用MySQL数据库存储单元403出现故障时,可以在对业务无影响、用户无感知的情况下回切到Oracle数据库存储单元402。而当将目标客户的业务切换回Oracle数据库存储单元402之后上述故障修复的情况下,可以设置m_status取值为2,将切换回Oracle数据库存储单元402之后目标客户运行时在Oracle数据库存储单元402中产生的增量数据同步到MySQL数据库存储单元403,以便可以再次将目标客户的业务切换到MySQL数据库存储单元403。当m_status为4时,MySQL数据库存储单元403与Oracle的数据库存储单元同时进行增量业务同步,例如当需要增量同步的表中部分表记录的是非目标客户的信息(例如目标客户向非目标客户转账,会涉及到非目标客户的账户表),而非目标客户的业务除了与目标客户相关的数据外均存储到了Oracle数据库存储单元402中,因此也需要设置m_status取值为4,即在目标客户的业务使用MySQL数据库存储单元403运行正常的情况下,将需要增量同步的表中,涉及到非目标客户的表中的数据进行双向同步。
在一个实施例中,数据同步单元401可以运行在PAAS平台上。例如在PAAS平台上同步运行多个数据同步单元401,并行的进行MySQL数据库存储单元403和Oracle数据库存储单元402之间的数据同步,提高数据同步效率。以下将通过图5~图7对数据同步单元401执行本公开实施例的数据库迁移方法的具体实施例进行示例性说明。
图5示意性示出了图4所示的银企转账系统从Oracle数据库存储单元402到MySQL数据库存储单元403的全量数据同步流程。
如图5所示,银企转账系统从Oracle数据库存储单元402切换到MySQL数据库存储单元403过程中,全量数据同步流程包括步骤S501~步骤S508。
步骤S501:在进行数据同步前首先通过策略安装平台将MySQL_db策略安装到银企转账系统。
步骤S502,针对MySQL数据库存储单元403,创建迁移过程中起指示作用的各种表,如表1所示的同步总览表。此外,还可以包括如表2所示的索引信息统计表和如表3所示的初始标记表。
如表2所示,索引信息表中存储了Oracle数据库存储单元402中存储的每张表的索引类型、索引名以及索引对应的列。
如表3所示,初始标记表中存储了每张表索引对应的列以及每张表全量同步的数据总量。
表2,索引信息表的表结构
表3初始标记表的表结构
步骤S503,数据同步单元401设置m_status为1,启动全量数据同步任务。
在步骤S504,执行全量数据同步任务,包括:启动全量同步数据迁移进程读取同步总览表(表1),确定需要全量同步的表。然后全量同步数据迁移进程会读取初始标记表(表3),根据需要全量同步的表的表名,查找到每张表,进而确定每张表当前存量数据的结束位置点,作为第一标记点并存入表3的Position_id中。
步骤S505,需要全量同步的表中每个表可以看作一个任务,可以将所有任务均匀分配到多个数据同步单元401上,其中,PAAS云平台启动了多个运行数据同步单元401的容器)。
步骤S506,每个数据同步单元401根据被分配到的任务数量,启动对应数量的全量同步数据迁移线程处理任务,将数据从Oracle数据库存储单元402同步到MySQL数据库存储单元403。
步骤S507,当一个全量同步数据迁移线程完成任务后,会记录记录迁移到MySQL数据库的表的表名以及数据的结束位置点,作为第二标记点,存储到如下表4所示的本地标记表中的Location_id中。
表4,本地标记表的表结构
字段 字段名 数据类型 主键
ID 数据ID varchar(128)
Table_name 表名 varchar(128)
Location_id 标记点 varchar(128)
步骤S508,当表4的本地标记表的与表3的初始标记表中所有表名相同,且相同表名对应的第一标记点和第二标记点(即,Location_id与Position_id)中的字段和数值也完全相同,确定全量数据已同步完毕。
图6示意性示出了图4所示的银企转账系统从Oracle数据库存储单元402到MySQL数据库存储单元403的增量数据同步流程。
如图6所示,银企转账系统400从Oracle数据库存储单元402到MySQL数据库存储单元403的增量数据同步流程可以包括步骤S601~步骤S606。其中,在全量数据同步完成之后,当数据同步单元401设置m_status为2或4时,需要Oracle数据库存储单元402到MySQL数据库存储单元403进行增量数据同步。Oracle数据库存储单元402到MySQL数据库存储单元403的增量数据同步,需要借助Oracle数据库物化视图日志表特性进行数据的迁移同步,其中物化视图日志表保存着Oracle数据库存储单元402中一张表的增删改的操作语句。
步骤S601,启动增量任务进程。增量任务进程会读取同步总览表(表1)中对应表名的Operate_type值。如果Operate_type为0,则不会对这张表进行增量同步。如果Operate_type为1,则确定需要对这张表进行增量同步。
步骤S602,数据同步单元401运行在PAAS平台中,可以在PAAS平台中多个容器上同步运行多个数据同步单元401。每个数据同步单元401运行物化视图日志表创建线程,为每个需要增量同步的表创建物化视图日志。该线程会首先读取表同步总览表(表1)中Operate_type字段为1的对应表名。然后根据表名在索引信息表(表2)寻找该表对应的索引类型。每张表会可能会存在主键类型(Primary Key,PK)、唯一键类型(Unique key,UK)、普通索引类型(Normal)三种索引类型。创建物化视图日志表时,优先选择PK类型的索引创建物化视图日志表,其次是UK,再次是Normal。
步骤S603,增量任务进程会读取任务进度表,确定需要增量同步的表中每个表的存量数据是否同步完成,以及物化视图日志表是否创建完成。当存量数据同步完成以及物化视图日志表创建完成后才开始进行增量数据同步。任务进度表的表结构如下表5所示。
表5,任务进度表的表结构
如表5上述,任务进度表中Task_type包含check、all、inc三类值。check代表物化图日志表创建检查、all代表全量数据同步检查、inc代表增量同步检查。Task_status包含finished和processin两个值。增量任务进程读取表5中每个表名对应的check字段下的Task_status字段,如果Task_status为processing,说明物化图日志表没有创建完毕,不能进行增量同步数据。增量任务进程读取每个表名对应的all字段下的Task_status字段,如果此时Task_status为processing,说明该表还在进行全量数据同步,不能进行增量同步数据。只有一个表的all和check这两个字段下的Task_status字段均为finished时,判断该表已完成物化视图日志表的创建以及全量数据同步,才可以进行增量数据的同步。
步骤S604,创建完成的不同的物化视图日志表被均匀分到PAAS云平台中的多个数据同步单元401上。
步骤S605,每个数据同步单元401中运行两个进程:生产者进程和消费者进程。
步骤S606,生产者进程会读取物化视图日志表将其信息写入到一个队列中,消费者进程可以以1为单位消费队列中的信息并执行到MySQL数据库存储单元403中,完成一条数据从Oracle数据库存储单元402到MySQL数据库存储单元403的增量同步。
图7示意性示出了图4所示的银企转账系统从MySQL数据库存储单元403到Oracle数据库存储单元402的增量数据同步流程。
如图7所示,银企转账系统400从MySQL数据库存储单元403到Oracle数据库存储单元402的增量数据同步流程可以包括步骤S701~步骤S704。其中,在全量数据同步完成之后,当数据同步单元401设置m_status为3或4时,需要从MySQL数据库存储单元403到Oracle数据库存储单元402进行增量数据同步。从MySQL数据库存储单元403到Oracle数据库存储单元402进行增量数据同步,可以基于数据复制平台(Data replication platform,DRP)以及分布式消息平台(Distributed Message Queueing System,DMQS)。
步骤S701,在数据复制平台DRP添加MySQL数据库存储单元403的IP、端口、实例名、表名信息。
步骤S702,DRP会为每个表创建一个唯一topic主题,并将topic信息发送到DMQS平台。
步骤S703,DRP会时时监控MySQL数据库存储单元403中每个MySQL数据库的binlog日志变化。当binlog日志变化时,DRP读取变化的信息,根据信息中的表名,将信息中包含的SQL语句发送到DMQS平台对应topic下的存储空间,该存储空间的数据结构是队列。
步骤S704,数据同步单元401的增量任务进程会时刻监控DMQS上所有topic下的存储空间。当存储空间中存在数据时,增量任务进程便会消耗其中的SQL语句数据,在Oracle数据库进行执行。这样完成一条数据从MySQL到Oracle数据库的迁移。其中,多个topic的存储空间会被均匀分配到PAAS云平台中的多个数据同步单元401。每个数据同步单元401会根据分到的topic的存储空间,启动对应数量的线程以实现数据的快速迁移。
可见,银企转账系统400中可以通过数据同步单元401,并行运行Oracle数据库存储单元402和MySQL数据库存储单元403,实现将Oracle数据库存储单元402逐步稳定地切换到MySQL数据库存储单元403,有效保证了在数据库迁移的过程中整个银企转账系统400系统的交易稳定性。
图8示意性示出了根据本公开一实施例的数据库迁移装置101的结构框图。
如图8所示,根据本公开一实施例,数据库迁移装置101可以包括获取模块810、全量同步模块820、第一增量同步模块830和第二增量同步模块840。根据本公开的另一些实施例,数据库迁移装置101还可以进一步包括目标客户选择模块850和灰度切流模块860。
获取模块810,用于获取需要全量同步的表和需要增量同步的表的信息,其中,需要增量同步的表为需要全量同步的表中的至少部分表。在一个实施例中,获取模块810可以执行前文介绍的操作S210。
全量同步模块820,用于将需要全量同步的表中的每个表作为一个任务,启动一个全量同步数据迁移线程,通过运行每个全量同步数据迁移线程来将每个表中的存量数据从Oracle数据库同步到MySQL数据库。在一个实施例中,全量同步模块820可以执行前文介绍的操作S220。
第一增量同步模块830,用于当需要从MySQL数据库中将需要增量同步的表中的增量数据同步到Oracle数据库时,基于对MySQL数据库的二进制日志文件binlog日志的监控来进行增量数据同步。在一个实施例中,第一增量同步模块830可以执行前文介绍的操作S230。
第二增量同步模块840,用于当需要从Oracle数据库中将需要增量同步的表中的增量数据同步到MySQL数据库时,基于需要增量同步的表中每个表对应的物化视图日志表来进行增量数据同步。在一个实施例中,第二增量同步模块840可以执行前文介绍的操作S240。
目标客户选择模块850,用于基于用户对业务系统中的客户的选择操作,确定目标客户。在一个实施例中,目标客户选择模块850可以执行前文介绍的操作S301。
灰度切流模块860用于:当全量同步模块820将需要全量同步的表中所有表的存量数据均从Oracle数据库同步到MySQL数据库之后,将目标客户的业务所使用的数据库从Oracle数据库首次切换到MySQL数据库,并在首次切换之后重复执行如下操作,直到目标客户的业务使用MySQL数据库的运行状态满足稳定运行条件,包括:在目标客户的业务使用MySQL数据库正常运行期间,调用第一增量同步模块830从MySQL数据库中将需要增量同步的表中的增量数据同步到Oracle数据库;当目标客户的业务在使用MySQL数据库的过程中出现故障时,将目标客户的业务所使用的数据库切换回Oracle数据库;当故障排除后,调用第二增量同步模块840从Oracle数据库中将切换回Oracle数据库后需要增量同步的表中的增量数据同步到MySQL数据库,然后重新将目标客户的业务所使用的数据库切换到MySQL数据库。在一个实施例中,灰度切流模块860可以执行前文介绍的操作S302~操作S309。
根据本公开的实施例,获取模块810、全量同步模块820、第一增量同步模块830、第二增量同步模块840、目标客户选择模块850和灰度切流模块860中的任意多个模块可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,获取模块810、全量同步模块820、第一增量同步模块830、第二增量同步模块840、目标客户选择模块850和灰度切流模块860中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,获取模块810、全量同步模块820、第一增量同步模块830、第二增量同步模块840、目标客户选择模块850和灰度切流模块860中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
图9示意性示出了适于实现根据本公开实施例的数据库同步方法的电子设备的方框图。电子设备900可以是数据库迁移装置101的另一实施例。
如图9所示,根据本公开实施例的电子设备900包括处理器901,其可以根据存储在只读存储器(ROM)902中的程序或者从存储部分908加载到随机访问存储器(RAM)903中的程序而执行各种适当的动作和处理。处理器901例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC))等等。处理器901还可以包括用于缓存用途的板载存储器。处理器901可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 903中,存储有电子设备900操作所需的各种程序和数据。处理器901、ROM902以及RAM 903通过总线904彼此相连。处理器901通过执行ROM 902和/或RAM 903中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除ROM 902和RAM 903以外的一个或多个存储器中。处理器901也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
根据本公开的实施例,电子设备900还可以包括输入/输出(I/O)接口905,输入/输出(I/O)接口905也连接至总线904。电子设备900还可以包括连接至I/O接口905的以下部件中的一项或多项:包括键盘、鼠标等的输入部分906;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分907;包括硬盘等的存储部分908;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分909。通信部分909经由诸如因特网的网络执行通信处理。驱动器910也根据需要连接至I/O接口905。可拆卸介质911,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器910上,以便于从其上读出的计算机程序根据需要被安装入存储部分908。
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM 902和/或RAM 903和/或ROM 902和RAM 903以外的一个或多个存储器。
本公开的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。当计算机程序产品在计算机系统中运行时,该程序代码用于使计算机系统实现本公开实施例所提供的数据库迁移方法。
在该计算机程序被处理器901执行时执行本公开实施例的系统/装置中限定的上述功能。根据本公开的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。
在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分909被下载和安装,和/或从可拆卸介质911被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
在这样的实施例中,该计算机程序可以通过通信部分909从网络上被下载和安装,和/或从可拆卸介质911被安装。在该计算机程序被处理器901执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
根据本公开的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如Java,C++,python,“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。

Claims (12)

1.一种数据库迁移方法,用于将业务系统的数据存储单元从Oracle数据库迁移到MySQL数据库,其中,所述方法包括:
获取需要全量同步的表和需要增量同步的表的信息,其中,所述需要增量同步的表为所述需要全量同步的表中的至少部分表;
将所述需要全量同步的表中的每个表作为一个任务,启动一个全量同步数据迁移线程,通过运行每个所述全量同步数据迁移线程来将每个表中的存量数据从所述Oracle数据库同步到所述MySQL数据库;
当需要从所述MySQL数据库中将所述需要增量同步的表中的增量数据同步到所述Oracle数据库时,基于对所述MySQL数据库的二进制日志文件binlog日志的监控来进行增量数据同步;以及
当需要从所述Orac1e数据库中将所述需要增量同步的表中的增量数据同步到所述MySQL数据库时,基于所述需要增量同步的表中每个表对应的物化视图日志表来进行增量数据同步。
2.根据权利要求1所述的方法,其中,所述当需要从所述Oracle数据库中将所述需要增量同步的表中的增量数据同步到所述MySQL数据库时,基于所述需要增量同步的表中每个表对应的物化视图日志表来进行增量数据同步包括:
通过运行物化视图日志表创建线程,为所述需要增量同步的表中的每个表创建所述物化视图日志表;
利用生产者进程读取所述物化视图日志表的信息并写入消息队列;以及
利用与所述生产者进程对应的消费者进程,从所述消息队列中读取消息并在所述MySQL数据库执行读取到的消息中的操作语句。
3.根据权利要求2所述的方法,其中,所述为所述需要增量同步的表中的每个表创建所述物化视图日志表包括:
获取所述需要增量同步的表中每个表的索引类型;
当一个表的索引类型包括主键类型时,选择所述主键类型的索引创建所述物化视图日志表;以及
当一个表的索引类型不包括主键类型时,如果该表的索引类型包括唯一键类型,则选择唯一键类型的索引来创建所述物化视图日志表;否则选择普通索引类型的索引来创建所述物化视图日志表。
4.根据权利要求2所述的方法,其中,所述当需要从所述Oracle数据库中将所述需要增量同步的表中的增量数据同步到所述MySQL数据库时,基于所述需要增量同步的表中每个表对应的物化视图日志表来进行增量数据同步还包括:
获取所述需要全量同步的表中每个表的存量数据的同步进度;
获取所述需要增量同步的表中每个表的物化视图日志表的创建进度;
当所述需要增量同步的表中任意的第一表的所述同步进度为同步完成,且所述第一表的所述物化视图日志表的创建进度为创建完成之后,从所述Oracle数据库中将所述第一表中的增量数据同步到所述MySQL数据库。
5.根据权利要求1所述的方法,其中,所述当需要从所述MySQL数据库中将所述需要增量同步的表中的增量数据同步到所述Oracle数据库时,基于对所述MySQL数据库的二进制日志文件binlog日志的监控来进行增量数据同步包括:
基于所述需要增量同步的表中每个表的表名,对所述需要增量同步的表中的每个表创建一个唯一主题topic;
在分布式消息平台中为所创建的每个topic分配存储空间;
当监控到所述binlog日志的变化时,读取所述binlog日志中发生变化的信息,其中,所述binlog日志中发生变化的每个信息包括发生变化的表的表名和SQL语句;
发送所述SQL语句到在所述分布式消息平台中与所述发生变化的表的表名对应的目标topic的存储空间下,其中,在所述目标topic的存储空间中以队列的数据结构存储所述SQL语句;以及
当监控到所述分布式消息平台中任意topic的存储空间中的数据变化时,从所述任意topic的存储空间中的队列中读取消息,并在所述Oracle数据库中执行读取到的消息中的SQL语句。
6.根据权利要求1所述的方法,其中,所述将所述需要全量同步的表中的每个表作为一个任务,启动一个全量同步数据迁移线程,通过运行每个所述全量同步数据迁移线程来将每个表中的存量数据从所述Oracle数据库同步到所述MySQL数据库包括:
根据所述需要全量同步的表中每个表中的存量数据的结束位置信息,配置每个表的结束位置点,得到第一标记点;
当每个所述全量同步数据迁移线程完成任务后,记录迁移到所述MySQL数据库中的数据的结束位置点,得到第二标记点;以及
当所述第一标记点与所述第二标记点中的数据的字段和值相同时,确定所述全量同步数据迁移线程对应的表中的存量数据同步完成。
7.根据权利要求1~6任意一项所述的方法,其中,所述获取需要全量同步的表和需要增量同步的表的信息包括:
获取同步总览表,其中,所述同步总览表中记录了所述需要全量同步的表的表名,并通过标记从所述需要全量同步的表中区分出所述需要增量同步的表;以及
从所述同步总览表中读取所述需要全量同步的表和所述需要增量同步的表的表名。
8.根据权利要求7所述的方法,其中,所述方法还包括:
基于用户对所述业务系统中的客户的选择操作,确定目标客户;
当所述需要全量同步的表中所有表的存量数据均从所述Oracle数据库同步到所述MySQL数据库之后,将所述目标客户的业务所使用的数据库从所述Oracle数据库首次切换到所述MySQL数据库;
在所述首次切换之后重复执行如下操作,直到所述目标客户的业务使用所述MySQL数据库的运行状态满足稳定运行条件,包括:
在所述目标客户的业务使用所述MySQL数据库正常运行期间,从所述MySQL数据库中将所述需要增量同步的表中的增量数据同步到所述Oracle数据库;
当所述目标客户的业务在使用所述MySQL数据库的过程中出现故障时,将所述目标客户的业务所使用的数据库切换回所述Oracle数据库;
当故障排除后,从所述Oracle数据库中将切换回所述Oracle数据库后所述需要增量同步的表中的增量数据同步到所述MySQL数据库;以及
重新将所述目标客户的业务所使用的数据库切换到所述MySQL数据库。
9.根据权利要求8所述的方法,其中,所述基于用户对所述业务系统中的客户的选择操作,确定目标客户还包括:
当所述目标客户的业务使用所述MySQL数据库的运行状态满足所述稳定运行条件后,接收用户选择的新的目标客户,以更新所述目标客户。
10.一种数据库迁移装置,用于将业务系统的数据存储单元从Oracle数据库迁移到MySQL数据库,其中,所述装置包括:
获取模块,用于获取需要全量同步的表和需要增量同步的表的信息,其中,所述需要增量同步的表为所述需要全量同步的表中的至少部分表;
全量同步模块,用于将所述需要全量同步的表中的每个表作为一个任务,启动一个全量同步数据迁移线程,通过运行每个所述全量同步数据迁移线程来将每个表中的存量数据从所述Oracle数据库同步到所述MySQL数据库;
第一增量同步模块,用于当需要从所述MySQL数据库中将所述需要增量同步的表中的增量数据同步到所述Oracle数据库时,基于对所述MySQL数据库的二进制日志文件binlog日志的监控来进行增量数据同步;以及
第二增量同步模块,用于当需要从所述Oracle数据库中将所述需要增量同步的表中的增量数据同步到所述MySQL数据库时,基于所述需要增量同步的表中每个表对应的物化视图日志表来进行增量数据同步。
11.一种电子设备,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,
其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行权利要求1~9中任一项所述的方法。
12.一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行权利要求1~9中任一项所述的方法。
CN202311865693.6A 2023-12-29 2023-12-29 数据库迁移方法、装置、设备和介质 Pending CN117807054A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311865693.6A CN117807054A (zh) 2023-12-29 2023-12-29 数据库迁移方法、装置、设备和介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311865693.6A CN117807054A (zh) 2023-12-29 2023-12-29 数据库迁移方法、装置、设备和介质

Publications (1)

Publication Number Publication Date
CN117807054A true CN117807054A (zh) 2024-04-02

Family

ID=90423241

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311865693.6A Pending CN117807054A (zh) 2023-12-29 2023-12-29 数据库迁移方法、装置、设备和介质

Country Status (1)

Country Link
CN (1) CN117807054A (zh)

Similar Documents

Publication Publication Date Title
US20210049165A1 (en) Search and retrieval of structured information cards
US9336259B1 (en) Method and apparatus for historical analysis analytics
US11487745B2 (en) Workflow dependency management system
US20120054345A1 (en) Modular cloud computing system
US8280917B1 (en) Batching content management operations to facilitate efficient database interactions
CN110188103A (zh) 数据对账方法、装置、设备和存储介质
CN110555150B (zh) 一种数据监控方法、装置、设备和存储介质
US10169461B2 (en) Analysis of data utilization
US20070168975A1 (en) Debugger and test tool
US12019646B2 (en) Information system with temporal data
CN111078980A (zh) 基于征信大数据的管理方法、装置、设备及存储介质
US20160162825A1 (en) Monitoring the impact of information quality on business application components through an impact map to data sources
US9401846B2 (en) Information handling system configuration identification tool and method
CN111753019A (zh) 一种应用于数据仓库的数据分区方法和装置
CN113792038A (zh) 用于存储数据的方法和装置
US9530112B2 (en) Common conditions for past projects as evidence for success causes
CN111159355A (zh) 客户投诉单处理方法及装置
CN117807054A (zh) 数据库迁移方法、装置、设备和介质
CN110688295A (zh) 数据测试方法和装置
CN114064678A (zh) 事件数据处理方法、装置及终端设备
US20210064389A1 (en) Software component configuration alignment
CN113626379A (zh) 研发数据管理方法、装置、设备及介质
CN113762702A (zh) 工作流部署方法、装置、计算机系统和可读存储介质
US20160253380A1 (en) Database query optimization
CN105243479A (zh) 一种风险判断方法和数据处理系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination