数据迁移方法、装置、设备以及计算机可读存储介质
技术领域
本发明涉及数据处理技术领域,具体涉及一种数据迁移方法、装置、设备以及计算机可读存储介质。
背景技术
近年来,随着计算机技术和互联网技术的发展,数据库的应用已深入到生活和工作中,各种数据库管理系统、网站等的数据都离不开数据库的支持。数据库中实际存储数据的一个数据节点可以是单机数据库中的一个存储节点,也可以是分布式数据库中的一个单机数据库。
随着业务和数据量的高速增长,当数据库中已有数据节点无法满足业务的存储和性能要求时,需要进行扩容添加新的数据节点,以将老的数据节点上的数据迁移一部分到新加的节点上。当业务短期峰值已过,为了降低成本可以继续缩容操作,释放部分数据节点,这也要求将被释放节点的数据迁移到其他数据节点上。目前,数据迁移通常都是采用停机、由技术人员手动完成的方案。但该方式需要停止数据库业务,以避免增量数据进来,对于业务影响比较大,且需要人工操作完成,数据迁移效率很低。
发明内容
本申请提供了一种数据迁移方法、装置、设备以及计算机可读存储介质,能够在数据迁移中兼顾增量数据,从而实现无停机状态下数据节点之间数据的高效迁移。
第一方面,本申请提供了一种数据迁移方法,所述方法包括:获取迁移任务,所述迁移任务包括所述迁移任务的源数据节点的标识、所述源数据节点中的源数据表的标识、被迁移数据所要满足的迁移条件、以及所述迁移任务的目标数据节点的标识;向所述目标数据节点发送数据表构建指令,所述数据表构建指令用于指示所述目标数据节点创建目标数据表,所述目标数据表为具有与所述源数据表相同的表结构的数据表;向所述源数据节点发送快照指令,所述快照指令用于指示所述源数据节点返回快照;接收所述源数据节点返回的快照;将所述快照中的第一数据全量迁移到所述目标数据表中,所述第一数据为所述源数据节点的快照中属于所述源数据表且符合所述迁移条件的数据;向所述源数据节点发送增量日志获取指令,所述增量日志获取指令中包括增量日志起始位置,所述增量日志获取指令用于指示所述源数据节点返回所述增量日志起始位置之后的日志,所述增量日志起始位置对应的时间戳不晚于所述快照指令的发送时间;接收所述源数据节点返回的增量日志;确定所述增量日志中的属于第二数据的子日志,所述第二数据为所述增量日志中属于所述源数据表且符合所述迁移条件的数据;向所述目标数据节点发送日志幂等回放指令,所述幂等回放指令包括所述子日志,所述幂等回放指令用于指示所述目标数据节点将所述子日志进行幂等回放。
本申请,在数据迁移时,无需停机即可实现,通过增量日志获取位置对应的时间戳与接收数据快照的时间的配合,实现了在增量数据迁移时,无需对待迁移数据进行加锁,因此数据迁移过程中,不会影响数据库业务的正常进行,更好的满足了实际应用需求。
可以理解的是,所述源数据节点指的是需要将数据迁出的数据节点,所述目标数据节点是将将数据迁入的数据节点。所述增量日志起始位置是指获取源数据节点的增量日志时的起始位置点,基于该起始位置获取的增量日志为源数据节点的日志文件中该起始位置之后的日志。
在第一方面的一种实施方式中,所述将所述第一待迁移数据全量迁移到所述目标数据表中,包括:将所述第一数据转换为第一逗号分隔值(Comma-Separated Values,CSV)格式数据;向所述目标数据节点发送所述第一CSV格式数据的第一批量导入指令,所述第一批量导入指令用于指示所述目标数据节点将所述第一CSV格式数据批量导入到所述目标数据表中。
本申请中,通过将待迁移数据转换为CSV纯文本数据,从而能够利用数据库的导入文件命令(load data)实现批量数据的快速导入,大大提高了数据迁移的效率。
在第一方面的一种实施方式中,所述向所述目标数据节点发送日志幂等回放指令,包括:
确定所述子日志中的每条操作记录的操作类型;若所述操作类型为插入,则将所述操作类型为插入的操作记录中的插入数据转换为第二CSV格式数据,并向所述目标数据节点发送所述第二CSV格式数据的第二批量导入指令,所述第二批量导入指令用于指示所述目标数据节点将所述第二CSV格式数据批量导入到所述目标数据表中;若所述操作类型为更新或删除,则将所述操作类型为更新或删除的操作记录转换为第一结构化查询语言sql执行语句,并向所述目标数据节点发送所述第一sql执行语句的第一执行指令,所述第一执行指令用于指示所述目标数据节点在所述目标数据表上运行所述第一sql执行语句。
在第一方面的一种实施方式中,所述向所述目标数据节点发送日志幂等回放指令,包括:将所述子日志中的操作记录转换为第二sql执行语句,并向所述目标数据节点发送所述第二sql执行语句的第二执行指令,所述第二执行指令用于指示所述目标数据节点在所述目标数据表上运行所述第二sql执行语句。
在第一方面的一种实施方式中,所述向所述目标数据节点发送日志幂等回放指令之后,还包括:按照预设时间间隔获取所述目标数据节点执行所述日志幂等回放指令的执行进度信息,所述执行进度信息是与预设的禁止写入条件相对应的信息;
若根据所述当前执行进度信息确定所述目标数据节点的当前幂等回放状态满足所述禁止写入条件,则向所述目标数据节点发送写入禁止指令,所述写入禁止指令用于指示所述目标数据节点开启对所述源数据表的禁止写入操作。
在第一方面的一种实施方式中,所述禁止写入条件包括数据迁移进度大于设定阈值或者当前所述子日志中未回放的操作记录的条数小于设定值;其中,所述数据迁移进度为已迁入数据的记录条数与需要迁移数据的记录条数的比值,所述已迁入数据为所述目标数据表中已迁入的数据,所述需要迁移的数据包括所述第一数据和所述第二数据。
在第一方面的一种实施方式中,所述向所述目标数据节点发送数据表构建指令之前,还包括:根据所述源数据节点的标识和所述源数据表的标识,向所述源数据节点发送所述源数据表的数据库模式定义语言(Data Definition Language,DDL)操作禁止指令,所述DDL操作禁止指令用于指示所述源数据节点禁止所述源数据表的DDL操作;所述向所述目标数据节点发送日志幂等回放指令之后,还包括:接收所述目标数据节点返回的所述日志幂等回放指令的执行完毕信息;根据所述执行完毕信息向所述源数据节点发送所述源数据表的DDL操作解除指令,所述DDL操作接触指令用于指示所述源数据节点解除对所述源数据表的DDL操作的禁止。
对于数据库,DDL操作用来创建或修改数据库中的各种对象,该对象包括数据表,由于DDL操作可能会造成源数据表的表结构发生变化,因此,在数据迁移时,通过禁止对源数据表进行DDL操作,避免了在进行数据迁移时,由于源数据表的结构发生变化,导致数据迁移失败的问题。
在第一方面的一种实施方式中,所述接收所述源数据节点根据所述快照事务指令返回的快照之后,还包括:根据所述源数据表的标识和所述迁移条件确定所述第一数据;向所述源数据节点发送快照回滚指令,所述快照回滚指令用于指示所述源数据节点回滚所述快照指令。
本申请中,由于快照的获取是为查找源数据节点快照中的待迁移数据,并没有修改数据,因此,可以将快照回滚,以节约数据库资源。
在第一方面的一种实施方式中,所述根据所述目标数据节点的标识,向所述目标数据节点发送日志幂等回放指令之后,还包括:接收所述目标数据节点返回的所述日志幂等回放指令的执行完毕信息;判断所述目标数据表中迁入的数据与所述源数据表的被迁移数据是否相同;若所述目标数据表中迁入的数据与所述源数据表的被迁移数据不相同,则向所述目标数据节点发送迁移回滚指令,以使所述目标数据节点根据所述迁移回滚指令将所述目标数据表的状态回滚至创建所述目标数据表之前的状态。
数据库事务(Database Transaction)是作为单个逻辑工作单元执行的一系列操作。回滚是数据库返回到事务开始时的状态。具体地说,就是在事务运行过程中发生了某种故障或者执行出错时,事务不能继续执行,通过将事务中对数据库的所有已完成的更新操作全部撤销,使数据库回滚到事务开始时的状态。
在第一方面的一种实施方式中,若所述目标数据表中迁入的数据与所述源数据表的被迁移数据相同,所述方法还包括:将所述源数据表中的被迁移数据的访问路由切换至所述目标数据表。
在第一方面的一种实施方式中,所述将所述源数据表中的被迁移数据的访问路由切换至所述目标数据表之后,还包括:向所述源数据节点发送所述源数据表的禁止写入解除指令,以使所述源数据节点根据所述禁止写入解除指令解除对所述源数据表的禁止写入操作。
在第一方面的一种实施方式中,所述将所述源数据表中的被迁移数据的访问路由切换至所述目标数据表之后,还包括:向所述源数据节点发送所述源数据表的被迁移数据清除指令,以使所述源数据节点根据所述清除指令清除所述源数据表中的被迁移数据。
在第一方面的一种实施方式中,所述判断所述目标数据表中的数据与所述源数据表的被迁移数据是否相同,包括:分别向所述源数据节点和所述目标数据节点发送迁移数据校验指令;接收所述源数据节点根据所述迁移数据校验指令返回的所述源数据表的被迁移数据的第一校验值,以及所述目标数据节点根据所述迁移数据校验指令返回的所述目标数据表中所迁入数据的第二校验值;若所述第一校验值与所述第二校验值相等,则确定所述目标数据表中迁入的数据与所述源数据表中的被迁移数据相同;若所述第一校验值与所述第二校验值不相等,则确定所述目标数据表中迁入的数据与所述源数据表中的被迁移数据不相同。
在第一方面的一种实施方式中,所述接收所述源数据节点根据所述迁移数据校验指令返回的所述源数据表的被迁移数据的第一校验值,以及所述目标数据节点根据所述迁移数据校验指令返回的所述目标数据表中所迁入数据的第二校验值,包括:接收所述源数据节点根据所述源数据节点中预置的校验算法计算的所述源数据表中被迁移数据的第一校验值;接收所述目标数据节点根据所述目标数据节点中的所述校验算法计算的所述目标数据表中所迁入数据的第二校验值。
第二方面,本申请提供了一种数据迁移装置,所述装置包括:迁移任务获取模块,用于获取迁移任务,所述迁移任务包括所述迁移任务的源数据节点的标识、所述源数据节点中的源数据表的标识、被迁移数据所要满足的迁移条件、以及所述迁移任务的目标数据节点的标识;目标表创建模块,用于向所述目标数据节点发送数据表构建指令,所述数据表构建指令用于指示所述目标数据节点创建目标数据表,所述目标数据表为具有与所述源数据表相同的表结构的数据表;快照获取模块,用于向所述源数据节点发送快照指令,接收所述源数据节点返回的快照,所述快照指令用于指示所述源数据节点返回快照;全量迁移模块,用于将所述快照中的第一数据全量迁移到所述目标数据表中,所述第一数据为所述源数据节点的快照中属于所述源数据表且符合所述迁移条件的数据;增量日志获取模块,用于向所述源数据节点发送增量日志获取指令,接收所述源数据节点返回的增量日志,其中,所述增量日志获取指令中包括增量日志起始位置,所述增量日志获取指令用于指示所述源数据节点返回所述增量日志起始位置之后的日志,所述增量日志起始位置对应的时间戳不晚于所述快照指令的发送时间;增量迁移模块,用于确定所述增量日志中的属于第二数据的子日志,向所述目标数据节点发送日志幂等回放指令,所述幂等回放指令包括所述子日志,所述幂等回放指令用于指示所述目标数据节点将所述子日志进行幂等回放,所述第二数据为所述增量日志中属于所述源数据表且符合所述迁移条件的数据。
结合第三方面,本申请提供了一种数据迁移设备,所述数据迁移设备包括存储器、处理器和通信接口,所述存储器、所述处理器和所述通信接口通过总线相互连接;所述存储器中存储有计算机程序;所述处理器用于执行所述存储器中的所述计算机程序以通过所述通信接口实现如第一方面或第一方面的任一种实施方式中所述的数据迁移方法。
结合第四方面,本申请提供了一种计算机可读存储介质,所述可读存储介质中存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行如第一方面或第一方面的任一种实施方式中所述的数据迁移方法。
结合第五方面,本申请提供了一种计算机程序产品,所述计算机程序包含指令,当该指令在计算机上运行时,使得计算机执行如第一方面或第一方面的任一种实施方式中所述的数据迁移方法。
结合第六方面,本申请提供了一种计算机程序,当该计算机程序在计算机上运行时,使得计算机执行上述各方面所述的方法。
附图说明
图1示出了本发明实施例适用的一种数据库架构的示意图;
图2示出了根据本发明实施例的一种数据迁移方法的流程示意图;
图3示出了根据本发明第一实施例的一种数据迁移装置的框架示意图;
图4示出了根据本发明实施例提供的一种数据迁移设备的框架示意图。
具体实施方式
本发明实施例提供了一种数据迁移方法、装置、设备以及计算机可读存储介质,适用于数据库的数据节点间的数据迁移。具体适用于在数据库需要扩容时,数据库的源数据节点与新增的目标数据节点之间的数据迁移,也可以将源数据节点中的部分数据或全部数据迁移到目标数据节点上。具体还用于在数据库需要缩容时,数据库的不同数据节点之间的数据迁移,将数据库中一个或多个数据节点中的数据迁移到数据库中其它数据节点上。
本发明实施例中的数据库可以是单机数据库,例如,可以为MySQL数据库、PostgreSQL数据库或者其它类型的单机数据库,也可以是包括有多个单机数据库的分布式数据库,分布式数据库中的多个单机数据库的类型可以相同也可以不同。
本发明实施例中,为了描述方便,不论是在数据库扩容,还是数据库缩容的应用场景中,将数据迁出的数据节点统称为源数据节点,将源数据节点中需要进行数据迁移的数据表统称为源数据表,将数据迁入的数据节点统称为目标数据节点,将目标数据节点中需要迁入数据的数据表统称为目标数据表。也就是说,上述扩容时新增的目标数据节点和缩容时数据所要迁移到的数据节点都为目标数据节点。
本发明实施例的数据迁移方法可以由单独的数据迁移设备执行,例如,具体可以由处理器或者服务器执行,相应的,数据迁移装置可以部署于该数据迁移设备中,数据迁移设备能够与数据库的各数据节点通信,完成源数据节点与目标数据节点之间的数据迁移。
本发明实施例的数据迁移方法也可以由应用服务器执行,数据迁移装置也相应的设置于该对应的应用服务器中。应用服务器可以是运行各种应用程序的后台服务器,应用服务器分别与数据库的各数据节点通信,实现对数据节点上数据的读/写等操作,再把相应的读/写结果返回给应用程序的客户端。应用服务器在执行本发明实施例的数据迁移方法时,根据获取到的数据迁移任务,控制实现待迁移数据在源数据节点与目标数据节点间的迁移。
在分布式数据库架构中,数据迁移装置还可以直接部署在分布式数据库中间件服务器的执行引擎中,由分布式数据库中间件服务器的执行引擎执行本发明实施例的数据迁移方法,实现数据迁移工作。
图1示出了本发明实施例适应的一种分布式数据库架构的示意图。如图1中所示,该数据库架构包括应用服务器10、分布式数据库中间件服务器20、源数据节点30、目标数据节点40、管理层客户端50、迁移控制器60和配置中心70。
该数据库架构中,数据迁移方法由分布式数据库中间件服务器20执行,具体的由分布式数据库中间件服务器20的执行引擎21执行,执行引擎21可以具体实现为处理器,作为分布式数据库中间件服务器20的数据迁移执行节点,执行引擎21的数量可以是一个或多个,多个执行引擎21可以集成部署在一台物理设备上,也可以分别部署在不同的物理设备上。
分布式数据库中的每一个数据节点(源数据节点30、目标数据节点40)即为一个单机数据库。分布式数据库中间件服务器20中安装有分布式数据库中间件,用于实现应用服务器10和数据节点的连接。应用服务器10上的应用程序通过分布式数据库中间件服务器20访问数据节点,实现对数据节点上数据的读、写等操作。
管理层客户端50、迁移控制器60和配置中心70均属于管理层设备,即分布式数据库的后台管理中心。管理人员通过管理层客户端50向迁移控制器60发送数据迁移指令。在扩容迁移时,数据迁移指令中一般需要包括新增的目标数据节点40的相关信息,如目标数据节点40的标识(可以是节点标识或其它配置的标识信息)等,在缩容迁移时,数据迁移指令中可以包括目标数据节点40的相关信息,也可以由迁移控制器60在接收到数据迁移指令时,根据预配置的数据迁移规则自行确定目标数据节点40。
可以理解的是,上述管理人员通常指的是数据库的租户管理人员,即通过购买或其它方式被授权使用数据库的用户或公司中的数据库管理人员。
迁移控制器60接收到数据迁移指令后,开始进行数据迁移的初始化工作,根据预配置的数据迁移规则生成数据迁移任务,其中,数据迁移规则一般是根据数据库的相关配置信息(分片算法等)、以及数据库中各数据节点的负载等因素确定的。当然,在实际应用中,也可以应用需要自行设置数据迁移规则,还可以是管理人员在下发数据迁移指令时,指令中直接包括源数据节点30的标识、源数据表31的标识、源数据表31中需要迁移哪些数据(可以是数据在表中的具体位置或者是数据所要满足的迁移条件等)、目标数据节点标识等信息。迁移控制器60所生成的迁移任务的数量是由实际所需要迁移的数据确定的,一个源数据表31到一个目标数据表41的数据迁移对应一次迁移任务。迁移控制器60在完成迁移任务的生成后,将所生成的所有迁移任务发送到配置中心70存储。
执行引擎21可以主动从配置中心70获取待迁移任务后执行数据迁移方法,完成一个源数据表31中的部分或全部数据(根据迁移条件确定)向目标数据表41的迁移。执行引擎21具体可以实现为处理器。在数据迁移过程中,通过增量日志获取起始位置点和快照事务对应位置点的配置,主要可以分为全量迁移和增量迁移两大部分,如图1中所示,直线可以表示为全量迁移过程,曲线可以表示为增量迁移的过程。通过全量迁移和增量迁移的相互配合,使迁移过程无需对源数据表31加锁,从而在数据迁移过程中不会对应用服务器10的业务造成影响。
可以理解的是,图1所示的数据库架构中,各设备的数量仅仅是示意性的,均是根据实际的实现需要进行调整的。在数据迁移时,为了提高迁移效率,多个迁移任务可以分别由多个执行引擎21并行执行的,每个执行引擎21也可以开启多个数据迁移线程,并行执行多个迁移任务。
图2示出了本发明实施例提供的一种数据迁移方法的流程示意图,对应于图1所示的数据库架构,该迁移方法具体可以由图1的分布式数据库中间件服务器20的执行引擎21执行。如图2所示,该迁移方法主要可以包括以下步骤:
步骤S1:获取迁移任务,迁移任务包括源数据节点的标识、源数据节点中需要进行数据迁移的源数据表的标识、进行迁移的数据所要满足的迁移条件、以及迁移的目标数据节点的标识。
本发明实施例中,数据迁移设备例如,图1中所示的执行引擎21可以通过对数据库迁移任务配置中心进行主动监控来获取迁移任务,也可以是接收由生成迁移任务的数据迁移控制服务器(例如图1中所述的迁移控制器60)下发的迁移任务。迁移任务中至少需要包括进行数据迁移的源数据节点的标识、需要迁移的数据在源数据节点中的哪个数据表即源数据表的标识、源数据表中要迁移出哪些数据即迁移的数据所要满足的迁移条件、以及需要迁移的数据所要迁移到的目标数据节点的标识等信息。
其中,上述迁移条件是可以根据实际需要和数据库本身的特点进行自定义,例如,迁移条件可以包括将源数据表中的数据全部迁移至目标数据节点上,或者包括待迁移的数据处于源数据表中的位置(如源数据表中哪些字段的数据或者是哪些分片的数据)、还可以包括数据写入源数据表中的时间(例如某个时刻之后写入的数据)等。
步骤S2:向所述目标数据节点发送数据表构建指令,数据表构建指令用于指示目标数据节点创建目标数据表。
为了确保数据迁移的正确性,在进行数据迁移之前,需要根据源数据表的结构在目标数据节点上进行一些初始化工作,该初始工作包括初始化表结构,即在目标数据节点上创建与源数据表的表结构相同的目标数据表。具体的,首先通过向源数据节点发送源数据表的表结构参数获取指令,该指令用于指示源数据节点返回源数据表的表结构参数,在接收到节点返回的表结构参数后,即可根据该表结构参数生成建表脚本,然后根据该建表脚本向目标数据发送数据表构建指令,该数据表构建指令用于指示目标节点创建目标数据表,目标数据节点接收到该数据表构建指令后,即可通过执行指令中的建表脚本,完成目标数据表的创建。此外,如果建表脚本在目标数据节点上执行失败,由于目标数据节点尚未启用(还未开始进行数据迁移),所以只需要删除目标数据节点上的表即可。在建表失败时,目标数据节点可以重新执行建表脚本,直至目标数据表创建成功,也可以根据预配置信息,进行相应的处理。
本发明一可选实施例中,向目标数据节点发送数据表构建指令之前,还可以包括:
根据源数据节点的标识和源数据表的标识,向源数据节点发送源数据表的数据库模式定义语言DDL操作禁止指令,DDL操作禁止指令用于指示源数据节点禁止源数据表的DDL操作。
由于DDL操作(如建表操作、添加字段操作等)等可能会造成源数据表的表结构发生变化,且如果在发生数据迁移失败时,DDL操作是无法回滚的,因此,为了保证所创建的目标数据表与源数据表的结构的一致性,以及迁移失败时能够使目标数据节点的状态回滚至迁移前的状态,需要在创建目标数据表之前,禁用源数据表的DDL操作。
步骤S3:向源数据节点发送快照指令,接收源数据节点返回的快照。
步骤S4:将快照中的第一数据全量迁移到目标数据表中,第一数据为源数据节点的快照中属于源数据表且符合迁移条件的数据。
其中,上述快照指令用于指示所述源数据节点返回快照。数据库快照是数据节点在某一时间点的视图,提供源数据节点在创建快照时的只读、静态视图。本发明实施例中,通过获取源数据节点的快照,保证了快照获取时间点之后的对源数据节点的数据操作不会对数据节点快照中的数据造成影响。因此,可以对数据节点快照中属于源数据表且满足迁移条件的第一数据即待迁移数据进行全量迁移。
本发明一可选实施例中,将第一待迁移数据全量迁移到目标数据表中,包括:
将第一数据转换为第一CSV格式数据;
向目标数据节点发送第一CSV格式数据的第一批量导入指令,其中,第一批量导入指令用于指示目标数据节点根据第一批量导入指令将第一CSV格式数据批量导入到目标数据表中。
目前,数据库的数据迁移方案中,通常是采用在目标数据节点上执行sql语句来完成,但是采用该方式,每执行一条sql语句只能完成一条数据记录的迁移,效率很低。本发明实施例中,为了提高数据迁移的效率,通过将数据节点快照中满足迁移条件的第一数据转换为CSV格式的纯数据后,即可通过向目标数据节点发送对应的批量导入指令,指示目标数据节点利用目标数据节点的load data机制将所有CSV格式数据批量导入到目标数据表中,能够大大提高数据迁移的效率。
本发明一可选实施例中,接收源数据节点根据快照指令返回的快照之后,还可以包括:
根据源数据表的标识和迁移条件确定第一数据;
向源数据节点发送快照回滚指令,快照回滚指令用于指示源数据节点回滚快照指令。
由于上述快照指令是为了获取到数据节点快照中的第一数据,而并没有对源数据节点中的数据进行任何修改操作,因此,在查询到需要迁移的第一数据后,可以不必提交该快照事务,而选择回滚掉该快照事务,以节省源数据节点资源。
步骤S5:向源数据节点发送增量日志获取指令,接收源数据节点返回的增量日志。
本发明实施例中,增量日志获取指令中包括增量日志起始位置,即日志文件中开始获取增量日志的起始位点。增量日志获取指令用于指示源数据节点返回源数据节点的日志文件中该增量日志起始位置之后的日志。其中,增量日志起始位置对应的时间戳不晚于所述快照指令的发送时间,即增量日志起始位置的获取时间早于发送快照指令的时间。
目前,增量日志的起始位点一般是“日志文件名+偏移量”的形式,也可以是采用全局事务标识(Global Transaction ID,GTID)在日志文件中所对应的位置点。在实际应用中,一般多采用“日志文件名+偏移量”的形式。日志文件记录了所有对数据节点中数据的更改操作,一般包括创建数据库或表(create)、插入操作(insert)、更新操作(update)、删除操作(delete)等操作,每个更改操作都以一条操作记录的形式写入二进制日志文件中,每条操作记录中都包含了当前记录更新的时间戳、该记录在当前二进制日志文件中的位置(即偏移量)、操作对应的数据表标识、操作类型和其他相关信息。每个数据节点通常会有一个或多个日志文件,不同的日志文件可以通过文件扩展名采用不同的数字编号形式加以区分。
在请求获取增量日志时,需要明确地指定需要从中获取日志数据的起始位点,即希望获取日志数据的日志文件的文件名、以及在该文件名对应的日志文件中的偏移量。而GTID是对于一个已提交事务的编号,并且是一个全局唯一的编号。每一个GTID代表一个数据库事务,因此,也可以将GTID在日志文件中所对应的位置点作为增量日志获取起始位置。
在数据迁移时,为了实现增量数据的迁移,需要获取到数据节点的增量日志。在现有的增量数据迁移方案中,为了确保数据的一致性,需要精确的起始位置,因此通常都需要对进行数据迁移的数据节点施加读写锁或者是对数据节点施加元数据(metadata lock,MDL)锁,以避免在开始进行数据迁移时数据发生变化,而加锁则会影响数据库的可操作性能,另外还可能会带来死锁的风险。
本发明实施例中,为了保证数据节点的可操作性能,避免造成死锁的风险,通过增量日志起始位置即从源数据节点获取日志的起始位点,与获取源数据节点快照的操作记录在日志文件中的位置的配合,实现在整个数据迁移过程中,都无需对数据节点加锁。具体的,快照指令是在获取到日志记录位置之后发送,保证了增量日志的起始位置的时间戳不晚于快照的获取时间戳,即只需要保证起始位置位于快照事务所对应的位置之前即可,通过该方式,在保证了能够获取到全部的源数据表中的待迁移数据同时,还能够在后续通过对增量日志进行幂等回放,保证源数据表所要迁移的数据和目标数据表中迁入数据的一致性。
在实际应用中,可以根据实际应用需求采用不同的方式来获取所需的增量日志起始位置,只要增量日志起始位置对应的时间戳不晚于快照指令的发送时间即可。例如,在一个可选实施中,可以是在数据迁移过程中,通过在向源数据节点发送快照指令之前,向源数据节点发送日志复制位置获取指令(该日志记录位置获取指令用于指示源数据节点返回其日志文件的日志复制位置),以获取源数据节点返回的日志复制位置,该日志复制位置即为增量日志获取指令中的增量日志起始位置。在另一个可选实施例中,也可以是在发送快照指令之前的其它过程中,例如,可以在获知源数据节点的标识之后,即可向源数据节点发送日志复制位置获取指令,来获取增量日志起始位置。
可以理解的是,日志复制位置获取指令指的是用于获取数据节点的日志文件中当前(数据节点接收到指令时)日志位置(最新写入日志中的操作记录的位置)的指令。对于不同的对于不同类型的数据节点,日志复制位置获取指令的形式可能是不同的,例如,在一个示例中,日志复制位置获取指令可以是show master status命令,通过该命令可以查看master数据库当前正在使用的二进制日志及当前执行二进制日志位置,该当前执行的日志位置即为增量日志起始位置。
步骤S6:确定增量日志中的属于第二数据的子日志,第二数据为增量日志中属于源数据表且符合迁移条件的数据。
步骤S7:向目标数据节点发送日志幂等回放指令,幂等回放指令包括子日志,幂等回放指令用于指示目标数据节点将子日志进行幂等回放。
本发明实施例中,向源数据节点发送上述增量日志获取指令后,即可接收源数据节点返回的源数据节点日志文件中上述增量日志起始位置之后的日志,即对应于增量日志起始位置的增量日志,从而可以根据增量日志完成增量数据中属于源数据表且满足迁移条件的第二数据的迁移。由于增量日志起始位置所对应的时间戳不晚于上述快照所对应的时间,因此,基于该起始位置所对应增量数据中的第二数据和上述快照所对应的第一数据,保证了获取到的需要迁移的数据的完整性,避免了待迁移数据的缺失。
此外,由于增量日志对应的增量日志起始位置不晚于快照指令的发送时间,以该起始位置开始获取到的增量日志中,还可能包括了已迁移到目标数据表中的部分第一数据的操作记录,也就是说,第一数据和第二数据中可能会存在重复的数据。例如,在获取增量日志起始位置的时间与获取快照的时间之间的时段,有对源数据表的插入操作,即源数据表中在该时段插入了新数据,而该插入数据如果符合迁移条件时,则该插入数据就会是第一数据和第二数据中的重复数据。因此,为了避免多余出来的部分数据造成数据迁移出现错误,本发明实施例中,目标数据节点在目标数据表中进行上述子日志的回放时,需要采用幂等回放的方式,以保证迁移数据的一致性。
本发明实施例中,所谓幂等,是指操作可以重复执行,任意多次执行所产生的影响均与一次执行的影响相同。回放是指目标数据节点将子日志中对应的操作记录在目标数据表中重新执行一遍,以达到跟源数据表中数据一致的目的。因此,幂等回放指的即是在将子日志中对应的操作记录在目标数据表上回放时,每个执行操作都需要具有幂等性。在根据子日志进行回放时,只有保证子日志中的每个操作记录都具有幂等性,才能够避免数据出错,这是因为在日志回放过程中,如果出现系统断电或其它问题,导致一次回放失败,则需要重新回放,如果操作记录不满足幂等性,则会造成数据出错。
本发明实施例,为了保证幂等回放的实现,在根据增量日志获取增量数据时,需要得到每条操作记录所对应的更新前和更新后的数据。本发明实施例中,可以直接根据增量日志得到每条操作记录所对应的更新前后的数据,在实际应用中,可以通过设置增量日志的格式来实现。例如,对于MySQL类型的数据节点,可以是row格式的binlog日志,row格式同时包含了更新前后的数据。在进行子日志的回放时,根据更新前的数据和更新后的数据、以及操作类型,保证了回放能够幂等执行。
本发明一可选实施例中,向目标数据节点发送日志幂等回放指令,包括:
确定子日志中的每条操作记录的操作类型;
若操作类型为插入,则将操作类型为插入的操作记录中的插入数据转换为第二CSV格式数据,并向目标数据节点发送第二CSV格式数据的第二批量导入指令;
若操作类型为更新或删除,则将操作类型为更新或删除的操作记录转换为第一结构化查询语言sql执行语句,并向目标数据节点发送第一sql执行语句的第一执行指令。
其中,第二批量导入指令用于指示目标数据节点根据第二批量导入指令将第二CSV格式数据批量导入到目标数据表中。第二执行指令用于指示目标数据节点根据第二执行指令在目标数据表上所述第二sql执行语句。
本发明实施例中,根据上述子日志中所记录的操作记录的操作类型的不同,可以选择不同的数据迁移方式,以提高数据迁移的效率。在数据库中,数据操作类型一般包括insert、update、delete三种。对于操作类型为insert的操作记录,由于是在数据表中增加新的数据即新增数据,所以可以直接采用批量导入的方式,在将所有新增数据转换成CSV格式的纯文本数据后,通过向目标数据节点发送第二批量导入指令,以指示目标数据节点通过数据库的loaddata机制将第二CSV格式数据一次性快速导入到目标数据表中,实现新增数据的同步。
表1示出了根据本发明实施例中将insert数据转换成CSV格式数据进行批量迁移,与现有技术中通过执行sql语句进行插入操作类型的数据迁移时,所用时长的对比结果。
数据量 |
insert |
Load data |
50万 |
69秒 |
10秒 |
表1
由表1可以看出,本发明实施例的新增数据的迁移方式与现有通过执行insert语句进行新增数据迁移的方式相比,同样是50万条数据记录,所需的迁移时长只需要现有迁移所需时长的七分之一左右,能够大大提高迁移效率。
对于update或delete类型的操作,由于是对已迁移到目标数据表中数据的修改操作,因此,需要将子日志中的操作记录转换为相应的sql执行语句后,通过向目标数据节点发送第一执行指令,以指示目标数据节点将这些第一sql执行语句在目标数据表上运行,以实现对目标数据表中已迁入数据的更新或删除。例如,对于update操作,通过转换成sql语句进行回放,转换方式为“update table set数据=更新后数据where数据=更新前数据”。对于delete操作,转换成sql语句的方式可以是“delete table where数据=更新前数据”。
本发明一可选实例中,向目标数据节点发送日志幂等回放指令,包括:
将子日志中的操作记录转换为第二sql执行语句,并向目标数据节点发送第二sql执行语句的第二执行指令,第二执行指令用于指示目标数据节点根据第二执行指令在目标数据表上运行第二sql执行语句。
即可以采用直接将子日志中的所有操作记录分别转换为对应的sql执行语句后,向目标数据节点发送对应的执行指令,以指示目标数据节点将转换后的sql执行语句在目标数据表中全部执行,完成源数据表和目标数据表中数据的同步。
可以理解的是,若上述操作类型为插入,目标数据节点在目标数据表中进行子日志的幂等回放时,若插入数据与目标数据表中已迁入数据为重复数据,目标数据节点可以通过对需要对插入的新增数据中的重复数据进行替换(replace)或忽略(ignore)操作,以保证子日志幂等回放成功,避免重复插入记录,造成数据迁移出错。
本发明一可选实施例中,向目标数据节点发送日志幂等回放指令之后,还包括:
按照预设时间间隔获取目标数据节点执行日志幂等回放指令的执行进度信息,执行进度信息是与预设的禁止写入条件相对应的信息;
若根据当前执行进度信息确定目标数据节点的当前幂等回放状态满足禁止写入条件,则向目标数据节点发送写入禁止指令,写入禁止指令用于指示目标数据节点开启对源数据表的禁止写入操作。
本发明实施例中,在数据迁移过程中,由于数据库业务也在持续进行,源数据表中会一直有新的增量数据进来,子日志的回放也一直在持续进行,因此,需要根据设置禁止写入条件,在当前回放状态满足该禁止写入条件时,对源数据表开启禁止写入的操作,以完成待迁移数据向目标数据表中的全部转移。
本发明一可选实施例中,禁止写入条件可以包括数据迁移进度大于设定阈值或者当前子日志中未回放的操作记录的条数小于设定值。
其中,数据迁移进度即迁移进度百分比,为当前目标数据表中已迁入数据的数据记录条数与当前源数据表中需要迁移的数据中的数据记录条数的比值,需要迁移的数据包括第一数据和第二数据。
其中,上述设定值可以根据需要设置和调整,例如,可以设置为90%或其他阈值,在迁移进入达到该阈值时,则禁止对源数据表再进行写入操作。
可以理解的是,在需要对数据库进行扩容或缩容时,迁移任务通常都是多个的。本发明实施例中,上述数据迁移进度可以是分别对每一个迁移任务而言的,也可以是对数据库中的所有迁移任务而言的。
在禁止对源数据表进行写入操作后,就不会在有增量数据写入到源数据表中,此时子日志中的操作记录也不会再变化,通过将未回放的子日志在目标数据表中回放完成或,即完成了全部待迁移数据的迁移。
需要说明的是,即使开启了对源数据表的写入操作的禁止动作,在禁止时正在执行的事务仍需要继续执行,直到事务提交或回滚,以避免日志中的操作记录与实际所完成的操作不一致,造成数据出错。
本发明一可选实施例中,根据目标数据节点的标识,向目标数据节点发送日志幂等回放指令之后,还包括:
接收目标数据节点返回的日志幂等回放指令的执行完毕信息;
判断目标数据表中迁入的数据与源数据表的被迁移数据是否相同;
若目标数据表中迁入的数据与源数据表的被迁移数据不相同,则向目标数据节点发送迁移回滚指令,以使目标数据节点根据迁移回滚指令将目标数据表的状态回滚至创建目标数据表之前的状态。
为了保证源数据表中被迁移数据和目标数据中迁入的数据的一致性,在完成迁移后,需要对迁移结果进行验证,通过判断目标数据表中已迁入数据和源数据表中的被迁移数据是否相同,来判断迁移是否成功。如果目标数据表中已迁入数据和源数据表中的被迁移数据不相同,则表明迁移失败,需要进行回滚,将目标数据表的状态回滚至创建目标数据表之前的状态,即删除目标数据表中的数据,并删除目标数据表。
可以理解的是,在应用中,也可以通过配置迁移失败时的处理规则,在发生迁移失败时,根据该处理规则进行相应的处理。例如,可以在迁移失败之后,对导致迁移失败的事务进行回滚操作,直至该事务执行成功,在对同一事务进行回滚操作的次数超过设定次数时,判定迁移失败,再或者,还可以在迁移失败之后,对整个迁移过程进行回滚操作,并在回滚之前判断回滚次数是否大于设定次数,如果不大于,则将目标数据表的状态回滚至迁入数据(全量数据迁入)之前的状态,也就是建表之后的状态,重复执行步骤S3至步骤S6,直至迁移成功或者回滚次数大于设定次数。
本发明一可选实施例中,判断目标数据表中的数据与源数据表的被迁移数据是否相同,包括:
分别向源数据节点和目标数据节点发送迁移数据校验指令;
接收源数据节点根据迁移数据校验指令返回的源数据表的被迁移数据的第一校验值,以及目标数据节点根据迁移数据校验指令返回的目标数据表中所迁入数据的第二校验值;
若第一校验值与第二校验值相等,则确定目标数据表中迁入的数据与源数据表中的被迁移数据相同;
若第一校验值与第二校验值不相等,则确定目标数据表中迁入的数据与源数据表中的被迁移数据不相同。
本发明实施例中,为了提高判断效率,可以采用分别获取目标数据表中已迁入数据和源数据表中被迁移数据的校验值,通过比对两者的校验值来确定数据是否相同。
可以理解的是,在实际应用中,对迁入数据和被迁移数据的校验,也可以采用其他方式。另外,计算数据校验值的具体方式可以根据需要进行选择,但计算第一校验值和计算第二校验值的方式应是相同的方式。
本发明一可选实施例中,接收源数据节点根据迁移数据校验指令返回的源数据表的被迁移数据的第一校验值,以及目标数据节点根据迁移数据校验指令返回的目标数据表中所迁入数据的第二校验值,包括:
接收源数据节点根据源数据节点中预置的校验算法计算的源数据表中被迁移数据的第一校验值;
接收目标数据节点根据目标数据节点中的校验算法计算的目标数据表中所迁入数据的第二校验值。
本发明实施例中,由于数据库中的数据节点本身一般都具有校验值计算能力,因此,可以利用节点自身的计算能力,由目标数据节点自行计算第一校验值,由源数据节点自行计算第二校验值,通过从目标数据节点和源数据节点分别获取第一校验值和第二校验值,来判断数据迁移是否成功,从而节约了执行迁移的设备的资源消耗。
其中,上述第一校验算法可以选用源数据节点和目标数据节点本身所支持的校验算法即可,例如,可以是但不限于循环冗余校验(Cyclic Redundancy Check,CRC)算法或消息摘要(Message Digest Algorithm,MD5)算法等。
可以理解的是,上述第一校验值可以是直接对全部已迁入数据/被迁移数据一次性计算得到,也可以是分别计算已迁入数据/被迁移数据的每一条数据记录的子校验值后,再对所有记录的子校验值进行处理得到,例如,对目标数据表中已迁入的每条记录即每行数据分别计算校验和(CheckSum),再将所有行的CheckSum异或运算,或者其它运算,将计算得到最终的CheckSum作为第一校验值。
本发明一可选实施例中,若目标数据表中迁入的数据与源数据表的被迁移数据相同,该迁移方法还包括:
将源数据表中的被迁移数据的访问路由切换至目标数据表。
本发明实施例中,在完成数据迁移且迁移结果校验通过后,即可将源数据表中的被迁移数据的访问路由切换至目标数据表上,以使应用程序能够根据切换后的路由访问到已迁移至目标数据表中的数据。
本发明一可选实施例中,将源数据表中的被迁移数据的访问路由切换至目标数据表之后,还包括:向源数据节点发送源数据表的禁止写入解除指令,该禁止写入指令用于指示源数据节点根据禁止写入解除指令解除对源数据表的禁止写入操作。
在完成路由切换之后,即可恢复源数据表的写入操作,即解除对源数据表中的禁止写入操作,以使应用程序能够继续对源数据表中的数据进行写操作。
本发明一可选实施例中,将源数据表中的被迁移数据的访问路由切换至目标数据表之后,还包括:向源数据节点发送源数据表的被迁移数据清除指令,以使源数据节点根据清除指令清除源数据表中的被迁移数据。
在完成路由切换之后,由于需要迁移的数据以及数据的访问路由都已转移到目标数据表上,因此,此时可以清理源数据表上的老数据即被迁移到目标数据表中的数据,以释放源数据表中的存储资源。在清除过程中,如果发生异常,则只需要重试即可。
可以理解的是,如果是将源数据表中的所有数据都迁移至了目标数据表,则可以向源数据节点发送源数据表的删除指令,以指示源数据节点直接将源数据表删除。
本发明实施例中,向目标数据节点发送日志幂等回放指令之后,还包括:
接收目标数据节点返回的日志幂等回放指令的执行完毕信息;
根据执行完毕信息向源数据节点发送源数据表的DDL操作解除指令,DDL操作接触指令用于指示源数据节点解除对源数据表的DDL操作的禁止。
由于在建立目标数据表之后,为了避免源数据表的结构发生变化导致数据迁移失败,禁止了对源数据表进行DDL操作,因此,在完成数据的迁移且迁移成功后,需要解除对源数据表的DDL操作的禁止,以恢复源数据表的DDL操作功能。
本发明实施例提供的数据迁移方法,在数据库无需停机且对数据库中的数据记录进行加锁的状态下,即可实现数据节点间的数据迁移,该方法适用于数据库的扩容或缩容的应用场景中。通过本发明实施例的数据迁移方法,保证有效保证迁移前后数据的一致性,且能够提高数据的迁移效率。
图3示出了本发明实施例中提供的一种数据迁移装置100的框架示意图,该数据迁移装置100可以具体实现为服务器或其它设备。如图3所示,该数据迁移装置100可以包括迁移任务获取模块110、目标表创建模块120、快照获取模块130、全量迁移模块140、增量日志获取模块150和增量迁移模块160。
迁移任务获取模块110,用于获取迁移任务,迁移任务包括迁移任务的源数据节点的标识、源数据节点中的源数据表的标识、被迁移数据所要满足的迁移条件、以及迁移任务的目标数据节点的标识。
目标表创建模块120,用于向目标数据节点发送数据表构建指令,数据表构建指令用于指示目标数据节点创建目标数据表,目标数据表为具有与源数据表相同的表结构的数据表。
快照获取模块130,用于向源数据节点发送快照指令,接收源数据节点返回的快照,快照指令用于指示源数据节点返回快照。
全量迁移模块140,用于将快照中的第一数据全量迁移到目标数据表中,第一数据为源数据节点的快照中属于源数据表且符合迁移条件的数据。
增量日志获取模块150,用于向源数据节点发送增量日志获取指令,接收源数据节点返回的增量日志,其中,增量日志获取指令中包括增量日志起始位置,增量日志获取指令用于指示源数据节点返回增量日志起始位置之后的日志,增量日志起始位置对应的时间戳不晚于快照指令的发送时间。
增量迁移模块160,用于确定增量日志中的属于第二数据的子日志,向目标数据节点发送日志幂等回放指令,幂等回放指令包括子日志,幂等回放指令用于指示目标数据节点将子日志进行幂等回放,第二数据为增量日志中属于源数据表且符合迁移条件的数据。
可以理解的是,本发明实施例的数据迁移装置100可对应于根据本发明实施例的数据迁移方法的执行主体,并且数据迁移装置100的各个模块的上述操作和/或功能分别为了实现2中所示的调节方法的相应流程,为了简洁,在此不再赘述。
本发明一可选实例中,全量迁移模块140具体用于:将第一数据转换为第一逗号分隔符CSV格式数据;向目标数据节点发送第一CSV格式数据的第一批量导入指令,第一批量导入指令用于指示目标数据节点将第一CSV格式数据批量导入到目标数据表中。
本发明一可选实例中,增量迁移模块160具体用于:
确定子日志中的每条操作记录的操作类型;
若操作类型为插入,则将操作类型为插入的操作记录中的插入数据转换为第二CSV格式数据,并向目标数据节点发送第二CSV格式数据的第二批量导入指令,第二批量导入指令用于指示目标数据节点将第二CSV格式数据批量导入到目标数据表中;
若操作类型为更新或删除,则将操作类型为更新或删除的操作记录转换为第一结构化查询语言sql执行语句,并向目标数据节点发送第一sql执行语句的第一执行指令,第一执行指令用于指示目标数据节点在目标数据表上运行第一sql执行语句。
本发明一可选实例中,增量迁移模块160具体用于:
将子日志中的操作记录转换为第二sql执行语句,并向目标数据节点发送第二sql执行语句的第二执行指令,第二执行指令用于指示目标数据节点在目标数据表上运行第二sql执行语句。
本发明一可选实例中,数据迁移装置100还包括写入操作控制模块。
写入操作控制模块,用于在向目标数据节点发送日志幂等回放指令之后,按照预设时间间隔获取目标数据节点执行日志幂等回放指令的执行进度信息,若根据当前执行进度信息确定目标数据节点的当前幂等回放状态满足禁止写入条件,则向目标数据节点发送写入禁止指令,执行进度信息是与预设的禁止写入条件相对应的信息,写入禁止指令用于指示目标数据节点开启对源数据表的禁止写入操作。
本发明一可选实例中,禁止写入条件包括数据迁移进度大于设定阈值或者当前子日志中未回放的操作记录的条数小于设定值;其中,数据迁移进度为已迁入数据的记录条数与需要迁移数据的记录条数的比值,已迁入数据为目标数据表中已迁入的数据,需要迁移的数据包括第一数据和第二数据。
本发明一可选实例中,该数据迁移装置100还包括DDL操作控制模块。
DDL操作控制模块,用于在向目标数据节点发送数据表构建指令之前,根据源数据节点的标识和源数据表的标识,向源数据节点发送源数据表的数据库模式定义语言DDL操作禁止指令,DDL操作禁止指令用于指示源数据节点禁止源数据表的DDL操作;以及用于在向目标数据节点发送日志幂等回放指令之后,接收目标数据节点返回的日志幂等回放指令的执行完毕信息,根据执行完毕信息向源数据节点发送源数据表的DDL操作解除指令,DDL操作接触指令用于指示源数据节点解除对源数据表的DDL操作的禁止。
本发明一可选实例中,全量迁移模块140,具体用于在接收源数据节点根据快照事务指令返回的快照之后,根据源数据表的标识和迁移条件确定第一数据。
全量迁移模块140,还用于在根据源数据表的标识和迁移条件确定第一数据之后,向源数据节点发送快照回滚指令,快照回滚指令用于指示源数据节点回滚快照指令。
本发明一可选实例中,数据迁移装置100还可以包括迁移校验模块。
迁移校验模块,用于在根据目标数据节点的标识,向目标数据节点发送日志幂等回放指令之后,接收目标数据节点返回的日志幂等回放指令的执行完毕信息,判断目标数据表中迁入的数据与源数据表的被迁移数据是否相同,若目标数据表中迁入的数据与源数据表的被迁移数据不相同,则向目标数据节点发送迁移回滚指令,以使目标数据节点根据迁移回滚指令将目标数据表的状态回滚至创建目标数据表之前的状态。
本发明一可选实例中,迁移校验模块具体用于:
分别向源数据节点和目标数据节点发送迁移数据校验指令;
接收源数据节点根据迁移数据校验指令返回的源数据表的被迁移数据的第一校验值,以及目标数据节点根据迁移数据校验指令返回的目标数据表中所迁入数据的第二校验值;
若第一校验值与第二校验值相等,则确定目标数据表中迁入的数据与源数据表中的被迁移数据相同;
若第一校验值与第二校验值不相等,则确定目标数据表中迁入的数据与源数据表中的被迁移数据不相同。
本发明一可选实例中,迁移校验模块在接收源数据节点根据迁移数据校验指令返回的源数据表的被迁移数据的第一校验值,以及目标数据节点根据迁移数据校验指令返回的目标数据表中所迁入数据的第二校验值时,具体用于:
接收源数据节点根据源数据节点中预置的校验算法计算的源数据表中被迁移数据的第一校验值;
接收目标数据节点根据目标数据节点中的校验算法计算的目标数据表中所迁入数据的第二校验值。
本发明一可选实例中,数据迁移装置100还可以包括路由切换模块。
路由切换模块,用于在目标数据表中迁入的数据与源数据表的被迁移数据相同时,将源数据表中的被迁移数据的访问路由切换至目标数据表。
本发明一可选实例中,上述写入操作控制模块还用于:在将源数据表中的被迁移数据的访问路由切换至目标数据表之后,向源数据节点发送源数据表的禁止写入解除指令,禁止写入解除指令用于指示源数据节点根据禁止写入解除指令解除对源数据表的禁止写入操作。
本发明一可选实例中,数据迁移装置100还可以包括数据清除模块。
数据清除模块,用于在将源数据表中的被迁移数据的访问路由切换至目标数据表之后,向源数据节点发送源数据表的被迁移数据清除指令,以使源数据节点根据清除指令清除源数据表中的被迁移数据。
可以理解的是,根据本发明各实施例的数据迁移装置100,可分别对应于根据本发明各实施例的数据迁移方法中的执行主体,并且数据迁移装置100中的各个模块的实现的操作和/或功能分别为了实现本发明各实施例的数据迁移方法的相应流程,数据迁移装置100中各模块的具体操作和或功能实现可参见本发明上述各实施例的调节方法中相对应的步骤,为了简洁,在此不再赘述。
图4示出了根据本发明一实施例的数据迁移设备300的示意性框图。如图4所示,数据迁移设备300包括处理器301、存储器302、通信接口303和总线304,总线304用于连接处理器301、存储器302和通信接口303,使处理器301、存储器302和通信接口303通过总线304进行相互通信。存储器302用于存储可执行的计算机程序,处理器301通过读取存储器302中存储的计算机程序并执行该计算机程序以通过通信接口303实现本发明上述任一实施例中的数据迁移方法。
本发明实施例中,通信接口303可以与外部设备通信,用于接收处理器301发送的指令,将指令发送至外部设备,并接收外部设备处理器301执行上述计算机程序代码时所需的各种数据,将接收到的数据发送给处理器301。
其中,上述外部设备具体可以为源数据节点和/或目的数据节点,通信接口303收发的指令可以是上述数据表构建指令、快照指令、增量日志获取指令、幂等回放指令等等,通信接口303接收到数据具体为源数据节点和/或目的数据节点返回的数据,处理器301通过通信接口303发送来的数据执行存储器302中的计算机程序代码,实现了本发明实施例的数据迁移方法。
可以理解的是,用于实现数据迁移设备与外部设备通信的设备,可以是上述通信接口303,也可以是收发器,通过该收发器来执行上述通信接口303的功能。上述存储器302的具体实现形式可以根据实际应用需要选择,不受限定,如可以是片上存储器,也可以是片外存储器,即存储器302与处理器301可以集成设置,也可以是单独的两部分。
本发明实施例还提供了一种计算机可读存储介质,可读存储介质中存储有计算机指令,当计算机指令在计算机上运行时,使得计算机执行如本发明任一实施例中的数据迁移方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。