一种数据迁移方法及相关设备与流程
未命名
09-18
阅读:181
评论:0

1.本技术实施例涉及数据处理领域,尤其涉及一种数据迁移方法及相关设备。
背景技术:
2.当对数据库服务器硬件、操作系统、数据库本身升级时,需要将数据库进行迁移,而数据库作为大多数应用的中心结点,其迁移影响范围巨大。
3.现有方案多在目标服务器上建立一个源数据库的从库,然后将目标服务器的ip地址直接切换为源服务器的ip地址,因为目标服务器上没有已有连接会话的上下文信息,所以必然会导致客户端的连接断开,抛出异常并导致服务中断,而且没有对于事务是否完整执行的检测,可能会中断执行中的事务,从而而导致数据的不一致。由此,当前的先停止所有应用程序,再更改配置后重启的技术方案,工作量大,且会导致服务的中断。
技术实现要素:
4.本技术实施例提供了一种数据迁移方法及相关设备,用于减少数据迁移的工作量,并提高数据迁移至数据库时系统的可靠性。
5.本技术实施例第一方面提供了一种数据迁移方法,应用于第一服务器,所述第一服务器分别与第二服务器及客户端通讯连接,所述方法包括:
6.获取所述第一服务器中第一数据库的快照数据,并将所述快照数据传输至所述第二服务器的第二数据库;其中,所述快照数据用于所述第二服务器与所述第一服务器维持数据同步状态;
7.记录所述客户端完成所有事务的事务完成时间点,获取与所述事务完成时间点存在关联的会话连接数据;
8.将所述会话连接数据传输至所述第二服务器,并断开所述第一服务器与所述客户端的通讯连接,以使得所述第二服务器根据所述快照数据及所述会话连接数据建立与所述客户端的通讯连接。
9.可选地,所述获取所述第一服务器中第一数据库的快照数据,并将所述快照数据传输至所述第二服务器的第二数据库,包括:
10.获取所述第一数据库的快照数据,将所述快照数据导出至所述第二数据库,并记录所述第一服务器导出所述快照数据的快照时间点;
11.将所述快照时间点设置为所述第一服务器与所述第二服务器的增量同步数据的时间点,以当所述第一服务器获取增量数据时,所述第二服务器同步获取所述增量数据;其中,所述增量数据为所述第一服务器于所述快照时间点之后获取到的数据。
12.可选地,所述记录所述客户端完成所有事务的事务完成时间点,获取与所述事务完成时间点存在关联的会话连接数据,包括:
13.获取所有所述客户端与所述第一服务器的通讯连接及所有事务,并监控所述所有事务的完成时间点;其中,所述所有事务包括第一事务及第二事务,所述第一事务为所述所
有事务中所述客户端第一个执行的事务,所述第二事务为所述所有事务中所述客户端最后一个执行的事务;
14.当所述第一事务完成时,将与所述第一事务对应的通讯连接暂停,并启动定时器,以设置预设等待时间;
15.当所述第二事务完成时,且完成所述第二事务的事务完成时间小于所述预设等待时间,记录所述事务完成时间点,并将所有所述客户端与所述第一服务器的通讯连接暂停;
16.根据所述事务完成时间点保存所有所述客户端与所述第一服务器进行通讯连接的所述会话连接数据。
17.可选地,所述方法还包括:
18.当所述事务完成时间大于所述预设等待时间时,恢复所有所述客户端与所述第一服务器的通讯连接;
19.设置预设延迟时长,并执行所述当所述第一事务完成时,将与所述第一事务对应的通讯连接暂停,并启动定时器,以设置预设等待时间的步骤,直至所述事务完成时间小于所述预设等待时间。
20.可选地,所述断开所述第一服务器与所述客户端的通讯连接,包括:
21.根据网际协议ip地址删除指令将所述第一服务器的ip地址删除,并将所述第一服务器的ip地址设置于所述第二服务器,以使得所述第二服务器建立与所述客户端的通讯连接。
22.本技术实施例第二方面提供了一种数据迁移方法,应用于第二服务器,所述第二服务器与第一服务器通讯连接,所述方法包括:
23.接收所述第一服务器中的第一数据库发送的快照数据;其中,所述快照数据用于所述第二服务器与所述第一服务器维持数据同步状态;
24.接收所述第一服务器发送的会话连接数据;
25.根据所述会话连接数据建立与所述客户端的通讯连接。
26.可选地,所述接收所述第一服务器中的第一数据库发送的快照数据,包括:
27.接收所述第一数据库导出的快照数据;
28.当所述第一服务器于快照时间点后获取增量数据时,接收所述第一数据库传输的增量数据;其中,所述快照时间点为所述第一服务器导出所述快照数据的时间点,所述增量数据为所述第一服务器于所述快照时间点之后获取到的数据。
29.可选地,所述接收所述第一服务器发送的会话连接数据,包括:
30.接收所述第一服务器与所述客户端于事务完成时间点进行通讯连接时生成的所述会话连接数据;其中,所述事务完成时间点为所述客户端完成所有事务时的完成时间点;
31.所述根据所述会话连接数据建立与所述客户端的通讯连接包括:
32.根据所述会话连接数据建立与所述第一服务器相同的通讯地址及通讯端口;
33.根据所述通讯地址及所述通讯端口建立与所述客户端的通讯连接,以使得所述客户端基于所述事务完成时间点向所述第二服务器传输所述事务完成时间点后的通讯数据。
34.本技术实施例第三方面提供了一种数据迁移系统,应用于第一服务器,包括:
35.获取单元,用于获取所述第一服务器中第一数据库的快照数据,并将所述快照数据传输至所述第二服务器的第二数据库;
36.记录单元,用于记录所述客户端完成所有事务的事务完成时间点,获取与所述事务完成时间点存在关联的会话连接数据;
37.传输及断开单元,用于将所述会话连接数据传输至所述第二服务器,并断开所述第一服务器与所述客户端的通讯连接,以使得所述第二服务器根据所述快照数据及所述会话连接数据建立与所述客户端的通讯连接。
38.本技术实施例第三方面提供的用于执行第一方面所述的数据迁移方法。
39.本技术实施例第四方面提供了一种数据迁移系统,应用于第二服务器,包括:
40.接收单元,用于接收所述第一服务器中的第一数据库发送的快照数据;
41.所述接收单元,还用于接收所述第一服务器发送的会话连接数据,其中,所述会话连接数据包括所述客户端完成所有事务的事务完成时间点;
42.所述建立单元,用于根据所述会话连接数据及所述快照数据建立与所述客户端的通讯连接,并通过所述事务完成时间点建立与所述客户端的通讯传输。
43.本技术实施例第四方面提供的用于执行第二方面所述的数据迁移方法。
44.本技术实施例第五方面提供了一种数据迁移装置,包括:
45.中央处理器,存储器,输入输出接口,有线或无线网络接口以及电源;
46.所述存储器为短暂存储存储器或持久存储存储器;
47.所述中央处理器配置为与所述存储器通信,并执行所述存储器中的指令操作以执行第一方面或第二方面所述的数据迁移方法。
48.本技术实施例第六方面提供了一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括指令,当所述指令在计算机上运行时,使得计算机执行第一方面或第二方面所述的数据迁移方法。
49.从以上技术方案可以看出,本技术实施例具有以下优点:通过本技术实施例公开的一种数据迁移方法,先获取第一服务器中第一数据库的快照数据,并将快照数据传输至第二服务器的第二数据库;再记录客户端完成所有事务的事务完成时间点,获取与事务完成时间点存在关联的会话连接数据;最后,将会话连接数据传输至第二服务器,并断开第一服务器与客户端的通讯连接,以使得第二服务器根据会话连接数据建立与客户端的通讯连接。从而,第一服务器可以将之前与客户端通讯的数据完整地传输至第二服务器,而且,客户端与第一服务器之间的通讯也能切换到第二服务器。同时,此种数据迁移方法,程序流程透明,能尽可能地减少迁移的工作量及提高系统的可靠性。
附图说明
50.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
51.图1为本技术实施例公开的一种数据迁移系统的架构示意图;
52.图2为本技术实施例公开的一种应用于第一服务器的数据迁移方法的流程示意图;
53.图3为本技术实施例公开的一种应用于第二服务器的数据迁移方法的流程示意图;
54.图4为本技术实施例公开的一种数据迁移方法的交互示意图;
55.图5为本技术实施例公开的一种迁移程序的部署示意图;
56.图6为本技术实施例公开的一种客户端执行事务的事务时间示意图;
57.图7为本技术实施例公开的一种内核协议栈的结构示意图;
58.图8为本技术实施例公开的一种业务协议栈的连接示意图;
59.图9为本技术实施例公开的一种应用于第一服务器的数据迁移系统的结构示意图;
60.图10为本技术实施例公开的一种应用于第二服务器的数据迁移系统的结构示意图;
61.图11为本技术实施例公开的一种数据迁移装置的结构示意图。
具体实施方式
62.本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
63.需要说明的是,在本技术中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本技术要求的保护范围之内。
64.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
65.请参阅图1,图1为本技术实施例公开的一种数据迁移系统的架构示意图。包括第一服务器101、第二服务器102及客户端103。
66.其中,在初始的通讯连接(图1中的通讯1)中,第一服务器101分别与第二服务器102及客户端103连接,第二服务器102未与客户端103连接。在后续的通讯连接(图1中的通讯2)中,第二服务器102与客户端103连接,第一服务器101未与客户端103连接。
67.再有,上述中的第一服务器101或第二服务器102可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云数据库、云服务、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn、以及大数据和人工智能平台等基础云计算服务的云服务器。客户端103可以是智能手机、平板电脑、笔记本电脑、台式计算机、掌上电脑、移动互联网设备(mobileinternetdevice,mid)、可
穿戴设备(例如智能手表、智能手环等)、智能电脑、智能车载等智能终端。其中,第一服务器101或第二服务器102均可与客户端103建立通信连接。其中,上述通信连接不限定连接方式,可以通过有线通信方式进行直接或间接地连接,也可以通过无线通信方式进行直接或间接地连接等,具体可根据实际应用场景确定,本技术在此不做限制。需要说明的是,本技术实施例中,并不限定客户端103的数量。
68.应该理解,当客户端103运行时,可以分别与上述图1所示的第一服务器101或第二服务器102进行数据交互,使得第一服务器101或第二服务器102可以接收来自于每个客户端103的业务数据(比如用户通过客户端103传的ugc视频)。其中,该客户端103可以为社交应用、即时通信应用、直播应用、游戏应用、短视频应用、视频应用、音乐应用、k歌应用、购物应用、小说应用、支付应用等具有显示文字、图像、音频以及视频等数据信息功能的客户端103,具体可根据实际应用场景需求确定,在此不做限制。其中,该客户端103可以为独立的客户端,也可以为集成在某客户端(例如即时通信客户端、社交客户端等)中的嵌入式子客户端,具体可根据实际应用场景确定,在此不做限定。
69.结合上述描述还需要说明的是,为方便后续理解,第一服务器101为源服务器,该源服务器中包括源数据库。第二服务器102为目标服务器,该目标服务器中包括目标数据库。后续将对此进行详细赘述。
70.请参阅图2,图2为本技术实施例公开的一种应用于第一服务器的数据迁移方法的流程示意图。包括步骤201-步骤203。
71.201、获取第一服务器中第一数据库的快照数据,并将快照数据传输至第二服务器的第二数据库。
72.在本实施例中,系统会在第一服务器和第二服务器上分别部署一个迁移程序,其中,该迁移程序可以完成整个迁移工作。具体的,迁移程序可以将第一服务器中第一数据库的所有数据进行导出,然后将所有数据传输至第二服务器的第二数据库。
73.在其中一个具体的实施例中,迁移程序可以首先把第一数据库的所有数据导出为sql语句,然后将sql语句数据传输至第二服务器,并导入第二数据库。同时,从第一数据库导出时可使用快照方式,从而可以得到一个快照点(即上述中描述的快照时间点)作为后续增量的起点,且该快照方式不会对第一数据库进行加锁,不会影响第一数据库的性能。其中,通过快照方式导出的数据,可以理解上述中所描述的快照数据。
74.基于上述实施例,在另外一个具体的实施例中,第一服务器也可以通过快照方式将快照时间点传输至第二数据库。需要理解的是,快照时间点,本质上是一个用来记录数据库状态的标识。导出的快照数据,就是当前整个库在这个时间点的数据,快照时间点在不同数据库可能有不同实现,在本技术技术方案中主要描述mysql,mysql在导出时是用binlog文件名及文件偏移位置来记录快照时间点的。
75.基于上述描述,第一数据库及第二数据库便可以保持快照数据的同步。
76.202、记录客户端完成所有事务的事务完成时间点,获取与事务完成时间点存在关联的会话连接数据。
77.当第一服务器与第二服务器之间完成了快照数据的同步,虽然当前的第一数据库与第二数据库的数据几乎一样,但是此时不能直接将数据库切换至第二数据库。一是因为目标与源数据库仍然存在微小的差别,二是因为客户端可能在执行一个事务,而打断事务
的执行可能导致数据丢失或者数据不一致,三是网络连接的协议栈缓冲区中可能会缓冲一些数据,这些数据位于客户端与服务端之间,不能忽略它们、四是直接切换会导致客户端的连接重置,所以必须找到一个合适的时机,暂停这些连接的通信并保存下上下文信息。
78.具体的,第一服务器可以获取到所有客户端与该第一服务器的通讯连接,为方便理解和描述,以下仅以其中一个客户端与第一服务器、第二服务器的交互过程进行描述。其中,第一服务器可以记录客户端完成所有事务的事务完成时间点,并以此获取到在该事务完成时间点存在关联的会话连接数据。其中,事务可以理解为客户端在一端时间内所需执行的程序。在本实施例中,该事务指代的是数据库领域的事务,就是一个原子操作,事务里面可能包含多条语句,这些语句要么全部成功,要么全部失败(或者叫不执行),为方便理解和描述,后续不再对此进行赘述。
79.在其中一个具体的实施例中,当第一服务器发现客户端完成所有事务后,便可以将该客户端与第一服务器的连接状态设置为暂停状态,并丢弃这个连接后续接收的数据,同时记录当前连接状态为暂停状态的时间点,即事务完成时间点。然后根据该事务完成时间点获取到连接的上下文信息。其中,该上下文信息可以理解为会话连接数据,即完成所有事务时与通讯连接相关的数据。
80.基于上述实施例,在另外一个具体的实施例中,客户端执行的事务可能存在多个,对应的,事务完成时间点可以理解为客户端在执行的所有事务中的最后一个时的时间点,为方便理解和描述,后续将对此进行详细描述。
81.203、将会话连接数据传输至第二服务器,并断开第一服务器与客户端的通讯连接,以使得第二服务器根据会话连接数据建立与客户端的通讯连接。
82.第一服务器获取到会话连接数据后,便可以将会话连接数据传输到第二服务器。同时,第一服务器便可以断开与客户端的通讯连接。对应的,第二服务器便可以根据该会话连接数据建立与客户端的通讯连接,其中,具体的建立方式可参阅图3中的描述。
83.在其中一个具体的实施例中,第一服务器可以将上下文信息传输至第二服务器,从而使得第二服务器根据该上下文信息与客户端完成用于连接创建的握手。具体将于图3和图4进行描述。
84.通过本实施例公开的一种数据迁移方法,先获取第一服务器中第一数据库的快照数据,并将快照数据传输至第二服务器的第二数据库;再记录客户端完成所有事务的事务完成时间点,获取与事务完成时间点存在关联的会话连接数据;最后,将会话连接数据传输至第二服务器,并断开第一服务器与客户端的通讯连接,以使得第二服务器根据会话连接数据建立与客户端的通讯连接。从而,第一服务器可以将之前与客户端通讯的数据完整地传输至第二服务器,而且,客户端与第一服务器之间的通讯也能切换到第二服务器。同时,此种数据迁移方法,程序流程透明,能尽可能地减少迁移的工作量及提高系统的可靠性。
85.请参阅图3,图3为本技术实施例公开的一种应用于第二服务器的数据迁移方法的流程示意图。包括步骤301-步骤303。
86.301、接收第一服务器中的第一数据库发送的快照数据。
87.不难理解的是,本实施例中主要描述的是于第二服务器执行数据迁移方法的流程,其流程与图2对应,具体此处不做赘述。
88.对应的,第二服务器可以接收第一服务器中由第一数据库导出的快照数据。当第
二服务器接收到该快照数据后,便可以将该快照数据存入第二数据库。其中的快照数据可参阅图2中对于快照数据的描述,具体此处不做赘述。
89.302、接收第一服务器发送的会话连接数据。
90.对应的,第二服务器可以接收第一服务器传输的会话连接数据。其中的会话连接数据可参阅图2中对于会话连接数据的描述,具体此处不做赘述。
91.303、根据会话连接数据建立与客户端的通讯连接。
92.当第二服务器接收到会话连接数据及快照数据后,便可以遍历会话连接数据。从而再通过会话连接数据及第一服务器在事务完成时间点获取到的会话连接数据,恢复对应的通讯连接,从而建立与客户端的通讯连接,以形成与客户端的通讯传输。不难理解的是,该事务完成时间点为客户端完成所有事务时的完成时间点。
93.在其中一个具体的实施例中,第二服务器通过遍历会话连接数据,便可以取出第一服务器与客户端进行通讯连接时的上下文信息,同时,第二服务器还可以获取到第一服务器的ip地址,从而根据该ip地址或其他的上下文信息构建出用来恢复服务器与客户端的通讯连接。由此,第二服务器可以拥有和第一服务器一样的ip地址和上下文信息,从而第二服务器将自身的ip地址设置为第一服务器的地址,由此构建与客户端的通信连接,以使得客户端与第二服务器进行通讯传输。
94.通过本实施例公开的一种数据迁移方法,第二服务器可以和第一服务器具备一样的通讯地址或通信方式,从而与客户端建立与第一服务器相同的通讯连接,再有,由于暂停通信、恢复上下文、切换地址这一系列操作时间很短,数据库和客户端并不会感知到任何影响,从而尽可能的减少数据迁移的损失。
95.为方便对上述图2及图3所述的实施例进行详细描述,请参阅图4,图4为本技术实施例公开的一种数据迁移方法的交互示意图。包括步骤401-步骤409。需要提前说明的是,本实施例中,主要描述的是第一服务器、第二服务器及客户端的交互流程。为方便理解和描述,后续不再对此进行赘述。
96.401、第一服务器获取第一数据库的快照数据,并记录第一服务器导出快照数据的快照时间点。
97.需要提前说明的是,请参阅图5,图5为本技术实施例公开的一种迁移程序的部署示意图。如图5所示,系统会在源服务器的源数据库(第一服务器)及目标服务器(第二服务器)的目标服务器上部署一个迁移程序,该迁移程序完成整个迁移工作,该程序部分功能位于操作系统用户态,如从源库全量导出数据、将快照数据导入目标数据库,开启主从增量同步,有些功能则必须位于操作系统内核态执行,如捕获、暂停客户端连接的通信流量,因为这些工作需要在操作系统中安装钩子函数,在linux下使用netfilter框架。源数据库与目标数据库上的迁移程序会进行通信,以传输数据库数据及一些连接会话的上下文信息,以及协议一些操作的时间点。
98.首先,第一服务器可以先获取当前第一数据库中的所有数据,在将上述数据导出至第二服务器时,会记录导出该数据时的时间点。不难理解的是,该部分数据即为上述中所描述的快照数据,对应的时间点即为快照时间点。
99.在其中一个具体的实施例中,迁移程序首先把源数据库(第一数据库)的所有数据导出为sql语句,将sql语句数据传输至目标服务器(第二服务器)并导入目标数据库(第二
数据库)。从源数据库导出时使用快照方式,这样会得到一个快照点作为后续增量的起点,且快照方式不会对源数据库加锁,不会影响源数据库的性能,mysql使用mysqldump命令加
‑‑
master-data=2
‑‑
single-transaction参数。其中,快照时间点可参阅图2中步骤201对于该部分的描述,具体此处不做赘述。
100.基于上述实施例,不难理解的是,此时第一服务器所获取到的数据可以理解为快照数据。
101.402、第一服务器将快照时间点设置为第一服务器与第二服务器的增量同步数据的时间点。
102.基于步骤401,若后续第一服务器仍接收到客户端传输的数据,由此,第一服务器可以将快照时间点设置为第一服务器与第二服务器的同步数据的时间点。
103.在其中一个具体的实施例中,基于步骤401,源服务器(第一服务器)可以开启源数据库到目标数据库的主从同步,从而当第一服务器获取到增量数据(即快照时间点后获取的数据)后,第二服务器可以同步获取该增量数据。具体的,mysql使用命令changemaster_host='x',master_port=x,master_user='x',master_password='x',master_log_file='x',master_log_pos=x来设置主从同步信息,命令中将master_log_file、master_log_pos设置为全量导出当时记录的binlog日志文件快照点信息,这样很快目标数据库拥有了几乎和源数据库一样的数据。
104.403、第一服务器获取所有客户端的通讯连接及所有事务,并监控所有事务的完成时间点。
105.为方便理解和描述,后续对于源服务器、目标服务器、源数据库及目标数据库的描述分别以第一服务器、第二服务器、第一数据库及第二数据库进行详细描述。
106.当第一服务器与第二服务器完成了快照数据及增量数据的主从同步,虽然第一数据库及第二数据库几乎一样,但此时不能直接将第一数据库切换至第二数据库,一是因为第二数据库与第一数据库仍然存在微小的差别,二是因为客户端可能在执行一个事务,而打断事务的执行可能导致数据丢失或者数据不一致,三是网络连接的协议栈缓冲区中可能会缓冲一些数据,这些数据位于客户端与服务端之间,不能忽略它们、四是直接切换会导致客户端的连接重置,所以必须找到一个合适的时机,暂停这些连接的通信并保存下上下文信息。其中,对于事务的理解可参阅图2中步骤202的描述。具体此处不做赘述。
107.由此,请参阅图7,图7为本技术实施例公开的一种内核协议栈的结构示意图。其中,本实施例中的数据迁移系统需要监控及修改网络流量,用户态程序只能获取本进程连接的数据,要操作其它进程的通信数据,需要在内核协议栈中安装钩子函数,所以本系统中部分模块位于操作系统内核中,在linux中利用netfilter子系统完成,它可以捕获任何连接的数据,甚至对它们进行修改,捕获数据是为了检测到事务完成的时间点。
108.具体的,第一服务器可以获取所有客户端的通讯连接及所有事务,并监控所有事务的完成时间点。
109.在其中一个具体的实施例中,第一服务器可以从第一数据库获取所有客户端的连接,记为db_conn,及正在执行的事务,记为db_tx。在内核netfilter子系统中安装钩子函数截获数据库连接的通信流量,按照mysql通信协议解析,并实时更新db_conn及db_tx,同时监控所有事务完成情况。
110.具体的,可以监控所有事务的完成时间点。不难理解的是,由于事务可以存在多个,由此后续以第一事务及第二事务描述所有事务的逻辑性。对应的,还可能存在第三事务或第四事务等,具体此处不进行限制。其中,第一事务为所有事务中客户端第一个执行的事务,第二事务为所有事务中述客户端最后一个执行的事务。对应的,第三事务或第四事务等,即为在第一事务和第二事务中所执行的事务。
111.404、当第一事务完成时,第一服务器将与第一事务对应的通讯连接暂停,并启动定时器,以设置预设等待时间。
112.基于步骤403,当第一事务完成时,第一服务器可以将第一事务对应的连接状态断开,并丢弃这个连接后续接收的数据,同时启动定时器,设置预设等待时间,以规定并监控在预设等待时间内事务的完成情况。
113.在其中一个具体的实施例中,当第一服务器解析发现第一个事务完成时,记录这个连接的状态为暂停状态,丢弃这个连接后续接收的数据,同时启动一个定时器timer用户来记录最大等待时间。
114.不难理解的是,在另外一个具体的实施例中,可以理解为第一服务器断开与第一事务对应的客户端的通讯连接。
115.405、当事务完成时间大于预设等待时间时,第一服务器恢复所有客户端通讯连接,并设置预设延迟时长。
116.基于步骤404,第一服务器继续解析数据,等待其他事务完成。
117.在其中一个实施例中,当其他事务在规定的预设等待时间内仍未完成所有事务,即所有事务完成时的事务完成时间大于预设等待时间时,第一服务器恢复客户端所有的通讯连接,并设置预设延长时间。换言之,即完成第一事务到第二事务的时间为事务完成时间。
118.在其中一个具体的实施例中,第一服务器继续解析数据,如果定时器timer先到期,则将所有连接的暂停状态取消并继续接收数据一段时间t。其中,t即为上述中的预设延长时间。在另外一个具体的实施例中,t的时间需要设置的尽可能小,具体此处不进行限制。
119.当设置预设延长时间后,继续执行步骤404。直至超过预设延长时间,或者是满足406的判定条件。
120.406、当第二事务完成时,且完成第二事务的事务完成时间小于预设等待时间时,第一服务器记录事务完成时间点,并将所有客户端与第一服务器的通讯连接暂停。
121.基于步骤404,当第二事务完成时,且完成第二事务的事务完成时间小于该预设等待时间时,则将所在连接设置为暂停状态,丢弃后续接收的数据。
122.在其中一个具体的实施例中,在第一服务器继续解析数据时,等待其它事务完成事件,如事务完成事件先到达,则将所在连接设置为暂停状态,丢弃后续接收的数据。
123.为方便理解,请参阅图6,图6为本技术实施例公开的一种客户端执行事务的事务时间示意图。图6为各个连接执行事务的情况,迁移程序需要找到一个时间点,让所有事务都执行完,但如在不干预的情况下,这种时间点有可能不存在,因为各个连接上的事务可能刚好交叉执行,所以需要在某个连接事务完成时,暂停这个连接上继续接收数据一段时间,阻塞等待所有事务完成,但等待操作是以阻塞客户端操作为代价的,所以等待会设置一个最大时间,如超过最大等待时间,则将所有连接的数据放行一段时间,再进行下一次等待,
直到某一次在最大等待时间内完成所有事务。关于暂停连接上数据接收的实现方法,因为tcp通信协议采用确认序列号的方式保证数据的可靠送达,所以只需要在内核钩子函数中不对后续接收到的数据确认即可,客户端会在后续补发这些数据。还需要说明的是,微观来看,可以通过短暂阻塞与客户端的通信,利用这小段时间,将数据库状态迁移到新机器,但整个迁移时间很短,而且实施时也会选择业务流量小的时间点(比如凌晨)来切换,所以对业务不会有可见的影响。
124.407、第一服务器根据事务完成时间点保存所有客户端与第一服务器进行通讯连接的会话连接数据。
125.当第二事务完成时,第一服务器根据事务完成时间点保存所有客户端与第一服务器进行通讯连接时的会话连接数据。
126.在其中一个具体的实施例中,当所有连接的事务都已提交时,保存当前所有连接的mysql会话上下文数据db_conn,包含会话变量、用户变量、当前库名、预处理语句。同时记录下所有tcp连接的上下文信息tcp_conn,包含源ip、源端口、目标ip、目标端口、收发缓冲区数据、序列号、tcp选项、滑动窗口信息。不难理解的是,上述中所描述的数据即为会话连接数据。为方便理解和描述,后续不再对此进行赘述。
127.408、第二服务器根据ip地址删除指令将第一服务器的ip地址删除,并将第一服务器的网际协议ip地址设置于第二服务器。
128.第二服务器的迁移程序将第一服务器mysql会话上下文db_conn及tcp连接上下文tcp_conn信息于第二服务器上进行恢复。当相关的上下文信息恢复完成后,便可以使用ipaddrdel命令将第一服务器的ip删除,使用ipaddradd命令将其设置到第二服务器上。
129.在其中一个具体的实施例中,第二服务器可以通过遍历tcp_conn,对每一个tcp连接,调用内核函数do_tcp_setsockopt来恢复连接信息,使用选项tcp_repair_queue来恢复缓冲区数据,使用选项tcp_queue_seq来恢复序列号,使用tcp_repair_options来恢复tcp选项,使用选项tcp_repair_window来恢复滑动窗口信息。
130.409、第二服务器根据会话连接数据建立与第一服务器相同的通讯地址及通讯端口,并根据通讯地址及通讯端口建立与客户端的通讯连接,并通过事务完成时间点与客户端建立通讯传输。
131.在第二服务器上,第二服务器可以根据上述步骤获取到的会话连接数据及快照数据建立与第一服务器相同的通讯地址及通讯端口,并根据该通讯地址及通讯端口伪造通信包,从而模拟客户端与第二服务器建立通讯连接。
132.在其中一个具体的实施例中,第二服务器通过遍历tcp_conn,取出客户端的ip、客户端的端口。并以此伪造从客户端的ip端口到第二服务器的ip端口的通信连接。由此,对于端口的数据包,设置该数据包的目标mac地址为本机mac地址,通过原始套接的方式直接发送到第二服务器的网卡。以此方法构建并发送数据包,完成用于连接创建的三次握手。需要说明的是,“目标mac地址”是指在构造数据包时,数据包的填充内容(或者选项内容)存在选择mac地址的内容,在其中填写会选择为“本地mac地址”后,便可以将后续迁移的mac地址确定为第二服务器的地址,即本机指的是迁移时的第二服务器。同时,第二服务器还通过遍历db_conn,构造出用来恢复数据库会话上下文的sql语句的数据包,执行语句setx=a来恢复会话变量,执行语句set@x=a来恢复用户变量,执行usedb来恢复当前数据库,执行
preparestmt fromxxx来恢复预处理语句,使用原始套接字伪装成客户端发送这些数据包完成会话恢复。
133.不难理解的是,以上仅为其中一种第二服务器与客户端建立通讯连接的方式。在另外一个具体的实施例中,请参阅图8图8为本技术实施例公开的一种业务协议栈的连接示意图。具体而言,待所有第一数据库与客户端的连接通信暂停下来,迁移程序会将mysql及tcp连接上下文信从第一服务器传输到第二服务器,第二服务器上的迁移程序将会通过直接发送底层数据包的方式伪装成所有客户端连接到第二服务器,让第二服务器上的mysql数据库连接恢复,随后再通过构造mysql业务协议包重建各个连接上会话的上下文信息,包括会话变量,用户变量、当前数据库名,预处理语句。最后恢复tcp连接信息。
134.由此,上下文信息恢复完成后,第二服务器拥有和第一服务器一样的mysql会话及tcp连接上下文,此时使用ipaddrdel命令将第一服务器的ip删除,使用ipaddradd命令将其设置到第二服务器上,服务器间会通过地址解析协议(arp,addressresolutionprotocol)协议重新绑定ip地址与mac地址间的对应关系,所有的数据包会从第一服务器切换到第二服务器上,由于此前第一服务器并未对暂停点之后的数据包确认,而因tcp/ip协议的可靠传输特性,客户端会重新发送后续数据包,所以通信会从之前暂停点继续进行。暂停通信、恢复上下文、切换地址这一系列操作时间很短,第二数据库及客户端并不会感知到任何影响。
135.通过上述描述,不难知道的是,本系统首先从迁移源数据库以快照形式导出快照数据,并记录下快照点如果导入目标数据库,随后再开启源数据库到目标数据库的主从同步,并设置其从上述快照点开始同步,很快它们的数据能几乎一致,同时在源数据库的内核的协议栈上安装钩子函数,截获数据库客户端到服务端的所有通信流量,目的是找到一个合适的时间点暂停客户端与服务端的通信,在这个时间点上所有的事务都必须已经完成,此时就可以收集tcp连接及数据库会话的上下文信息,随后在目标数据库上以伪装客户端的方式恢复这些连接,这样,目标数据库有了和源数据库相同的连接上下文信息,只须将目标服务器的ip地址更改为源服务器的ip地址,所有的客户端请求的都会切换到目标服务器上,完成对数据库的迁移。
136.本技术实施例主要提出一种对应用透明的数据库迁移方法,核心思路为:在操作系统内核中安装钩子函数,其截获所有的网络流量,分析客户端与数据库服务端间的通信,等待到合适时机暂停客户端与服务端之间的通信,并将此时各tcp连接的上下文信息及数据库的会话上下文信息保存下来,随后在目标服务器恢复,这样源服务器与目标服务器就拥有了相同的执行上下文信息,然后再将源服务器ip地址绑定到目标服务器,这样,客户端与数据库之间的通信就会切换到目标服务器,从而使整个迁移过程对数据库客户端透明,客户端无须任何配置修改或者重启操作,保证了应用系统服务的连续性,减少了迁移的工作量,规避了迁移可能导致的操作风险。
137.应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这
些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
138.若方案涉及敏感信息(如用户信息、企业信息),则应当说明针对敏感信息的收集、使用和处理需要遵守相关国家和地区的法律法规和标准,且需要在相应主体(如用户或企业等)许可或同意的情况下进行。
139.请参阅图9,图9为本技术实施例公开的一种应用于第一服务器的数据迁移系统的结构示意图。
140.获取单元901,用于获取第一服务器中第一数据库的快照数据,并将快照数据传输至第二服务器的第二数据库;
141.记录单元902,用于记录客户端完成所有事务的事务完成时间点,获取与事务完成时间点存在关联的会话连接数据;其中,所述快照数据用于所述第二服务器与所述第一服务器维持数据同步状态;
142.传输及断开单元903,用于将会话连接数据传输至第二服务器,并断开第一服务器与客户端的通讯连接,以使得第二服务器根据会话连接数据建立与客户端的通讯连接。
143.示例性地,数据迁移系统还包括:设置单元904;
144.获取单元901,具体用于获取第一数据库的快照数据,将快照数据导出至第二数据库,并记录第一服务器导出快照数据的快照时间点;
145.设置单元904,用于将快照时间点设置为第一服务器与第二服务器的增量同步数据的时间点,以当第一服务器获取增量数据时,第二服务器同步获取增量数据;其中,增量数据为第一服务器于快照时间点之后获取到的数据。
146.示例性地,数据迁移系统包括:执行单元905及保存单元906;
147.获取单元901,具体用于获取所有客户端与第一服务器的通讯连接及所有事务,并监控所有事务的完成时间点;其中,所有事务包括第二事务及第一事务,第一事务为所有事务中客户端第一个执行的事务,第二事务为所有事务中客户端最后一个执行的事务;
148.执行单元905,用于当第一事务完成时,将与第一事务对应的通讯连接暂停,并启动定时器,以设置预设等待时间;
149.记录单元904,具体用于当第二事务完成时,且完成第二事务的事务完成时间小于预设等待时间,记录事务完成时间点,并将所有客户端与第一服务器的通讯连接暂停;
150.保存单元906,用于根据事务完成时间点保存所有客户端与第一服务器进行通讯连接的会话连接数据。
151.示例性地,数据迁移系统还包括:恢复单元907;
152.恢复单元907,用于当事务完成时间大于预设等待时间时,恢复所有客户端与第一服务器的通讯连接;
153.设置单元904,还用于用于设置预设延迟时长,并执行当第一事务完成时,将与第一事务对应的通讯连接暂停,并启动定时器,以设置预设等待时间的步骤,直至事务完成时间小于预设等待时间。
154.示例性地,数据迁移系统包括:
155.设置单元904,具体用于根据网际协议ip地址删除指令将第一服务器的ip地址删除,并将第一服务器的ip地址设置于第二服务器,以使得第二服务器建立与客户端的通讯
连接。
156.请参阅图10,图10为本技术实施例公开的一种应用于第二服务器的数据迁移系统的结构示意图。
157.接收单元1001,用于接收第一服务器中的第一数据库发送的快照数据;其中,所述快照数据用于所述第二服务器与所述第一服务器维持数据同步状态;
158.接收单元1001,还用于接收第一服务器发送的会话连接数据;
159.建立单元1002,用于根据会话连接数据建立与客户端的通讯连接。
160.示例性地,数据迁移系统包括:
161.接收单元1001,具体用于接收第一数据库导出的快照数据;
162.接收单元1001,还用于当第一服务器于快照时间点后获取增量数据时,接收第一数据库传输的增量数据;其中,快照时间点为第一服务器导出快照数据的时间点,增量数据为第一服务器于快照时间点之后获取到的数据。
163.示例性地,数据迁移系统包括:
164.接受单元1001,具体用于接收第一服务器与客户端于事务完成时间点进行通讯连接时生成的会话连接数据;其中,事务完成时间点为客户端完成所有事务时的完成时间点;
165.数据迁移系统包括:
166.建立单元1002,具体用于根据会话连接数据建立与第一服务器相同的通讯地址及通讯端口;
167.建立单元1002,还用于根据通讯地址及通讯端口建立与客户端的通讯连接,以使得客户端基于事务完成时间点向第二服务器传输事务完成时间点后的通讯数据。
168.下面请参阅图11,本技术实施例公开的一种数据迁移装置的结构示意图包括:
169.中央处理器1101,存储器1105,输入输出接口1104,有线或无线网络接口1103以及电源1102;
170.存储器1105为短暂存储存储器或持久存储存储器;
171.中央处理器1101配置为与存储器1105通信,并执行存储器1105中的指令操作以执行前述图2至图4中任一项所示实施例中的方法。
172.本技术实施例还提供一种芯片系统,其特征在于,芯片系统包括至少一个处理器和通信接口,通信接口和至少一个处理器通过线路互联,至少一个处理器用于运行计算机程序或指令,以执行前述图2至图4中任一项所示实施例中的方法。
173.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
174.在本技术所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
175.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个
网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
176.另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
177.所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。
技术特征:
1.一种数据迁移方法,其特征在于,应用于第一服务器,所述第一服务器分别与第二服务器及客户端通讯连接,所述方法包括:获取所述第一服务器中第一数据库的快照数据,并将所述快照数据传输至所述第二服务器的第二数据库;其中,所述快照数据用于所述第二服务器与所述第一服务器维持数据同步状态;记录所述客户端完成所有事务的事务完成时间点,获取与所述事务完成时间点存在关联的所述客户端的会话连接数据;将所述会话连接数据传输至所述第二服务器,并断开所述第一服务器与所述客户端的通讯连接,以使得所述第二服务器根据所述会话连接数据建立与所述客户端的通讯连接。2.根据权利要求1所述的数据迁移方法,其特征在于,所述获取所述第一服务器中第一数据库的快照数据,并将所述快照数据传输至所述第二服务器的第二数据库,包括:获取所述第一数据库的快照数据,将所述快照数据导出至所述第二数据库,并记录所述第一服务器导出所述快照数据的快照时间点;将所述快照时间点设置为所述第一服务器与所述第二服务器的增量同步数据的时间点,以当所述第一服务器获取增量数据时,所述第二服务器同步获取所述增量数据;其中,所述增量数据为所述第一服务器于所述快照时间点之后获取到的数据。3.根据权利要求1所述的数据迁移方法,其特征在于,所述记录所述客户端完成所有事务的事务完成时间点,获取与所述事务完成时间点存在关联的会话连接数据,包括:获取所有所述客户端与所述第一服务器的通讯连接及所有事务,并监控所述所有事务的完成时间点;其中,所述所有事务包括第一事务及第二事务,所述第一事务为所述所有事务中所述客户端第一个执行的事务,所述第二事务为所述所有事务中所述客户端最后一个执行的事务;当所述第一事务完成时,将与所述第一事务对应的通讯连接暂停,并启动定时器,以设置预设等待时间;当所述第二事务完成时,且完成所述第二事务的事务完成时间小于所述预设等待时间,记录所述事务完成时间点,并将所有所述客户端与所述第一服务器的通讯连接暂停;根据所述事务完成时间点保存所有所述客户端与所述第一服务器进行通讯连接的所述会话连接数据。4.根据权利要求3所述的数据迁移方法,其特征在于,所述方法还包括:当所述事务完成时间大于所述预设等待时间时,恢复所有所述客户端与所述第一服务器的通讯连接;设置预设延迟时长,并执行所述当所述第一事务完成时,将与所述第一事务对应的通讯连接暂停,并启动定时器,以设置预设等待时间的步骤,直至所述事务完成时间小于所述预设等待时间。5.根据权利要求1所述的数据迁移方法,其特征在于,所述断开所述第一服务器与所述客户端的通讯连接,包括:根据网际协议ip地址删除指令将所述第一服务器的ip地址删除,并将所述第一服务器的ip地址设置于所述第二服务器,以使得所述第二服务器建立与所述客户端的通讯连接。6.一种数据迁移方法,其特征在于,应用于第二服务器,所述第二服务器与第一服务器
通讯连接,所述方法包括:接收所述第一服务器中的第一数据库发送的快照数据;其中,所述快照数据用于所述第二服务器与所述第一服务器维持数据同步状态;接收所述第一服务器发送的会话连接数据;根据所述会话连接数据建立与所述客户端的通讯连接。7.根据权利要求6所述的数据迁移方法,其特征在于,所述接收所述第一服务器中的第一数据库发送的快照数据,包括:接收所述第一数据库导出的快照数据;当所述第一服务器于快照时间点后获取增量数据时,接收所述第一数据库传输的增量数据;其中,所述快照时间点为所述第一服务器导出所述快照数据的时间点,所述增量数据为所述第一服务器于所述快照时间点之后获取到的数据。8.根据权利要求6所述的数据迁移方法,其特征在于,所述接收所述第一服务器发送的会话连接数据,包括:接收所述第一服务器与所述客户端于事务完成时间点进行通讯连接时生成的所述会话连接数据;其中,所述事务完成时间点为所述客户端完成所有事务时的完成时间点;所述根据所述会话连接数据建立与所述客户端的通讯连接包括:根据所述会话连接数据建立与所述第一服务器相同的通讯地址及通讯端口;根据所述通讯地址及所述通讯端口建立与所述客户端的通讯连接,以使得所述客户端基于所述事务完成时间点向所述第二服务器传输所述事务完成时间点后的通讯数据。9.一种数据迁移系统,其特征在于,应用于第一服务器,所述系统包括:获取单元,用于获取所述第一服务器中第一数据库的快照数据,并将所述快照数据传输至所述第二服务器的第二数据库;其中,所述快照数据用于所述第二服务器与所述第一服务器维持数据同步状态;记录单元,用于记录所述客户端完成所有事务的事务完成时间点,获取与所述事务完成时间点存在关联的会话连接数据;传输及断开单元,用于将所述会话连接数据传输至所述第二服务器,并断开所述第一服务器与所述客户端的通讯连接,以使得所述第二服务器根据所述会话连接数据建立与所述客户端的通讯连接。10.一种数据迁移系统,其特征在于,应用于第一服务器,所述系统包括:接收单元,用于接收所述第一服务器中的第一数据库发送的快照数据;其中,所述快照数据用于所述第二服务器与所述第一服务器维持数据同步状态;所述接收单元,还用于接收所述第一服务器发送的会话连接数据;所述建立单元,用于根据所述会话连接数据建立与所述客户端的通讯连接。
技术总结
本申请实施例提供了一种数据迁移方法及相关设备,用于减少数据迁移的工作量,并提高数据迁移至数据库时系统的可靠性。本申请实施例方法包括:获取所述第一服务器中第一数据库的快照数据,并将所述快照数据传输至所述第二服务器的第二数据库;其中,所述快照数据用于所述第二服务器与所述第一服务器维持数据同步状态;记录所述客户端完成所有事务的事务完成时间点,获取与所述事务完成时间点存在关联的所述客户端的会话连接数据;将所述会话连接数据传输至所述第二服务器,并断开所述第一服务器与所述客户端的通讯连接,以使得所述第二服务器根据所述会话连接数据建立与所述客户端的通讯连接。端的通讯连接。端的通讯连接。
技术研发人员:王仁勇 刘金香 孙德旺 彭令陶 李勇 商齐 汤丁 毛瑞彬 杨建明
受保护的技术使用者:深圳证券信息有限公司
技术研发日:2023.07.05
技术公布日:2023/9/14
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/