CN116303346B - 数据库迁移方法以及系统 - Google Patents
数据库迁移方法以及系统Info
- Publication number
- CN116303346B CN116303346B CN202310127731.1A CN202310127731A CN116303346B CN 116303346 B CN116303346 B CN 116303346B CN 202310127731 A CN202310127731 A CN 202310127731A CN 116303346 B CN116303346 B CN 116303346B
- Authority
- CN
- China
- Prior art keywords
- database node
- transaction
- database
- write
- snapshot
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/214—Database migration support
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书实施例提供数据库迁移方法以及系统,其中所述数据库迁移方法包括:源数据库节点挂起正在执行的事务,进行快照操作,得到数据库快照页;完成快照操作后,源数据库节点利用数据库快照页,基于写时复制模式恢复执行事务;将快照操作之后接收的事务路由到目的数据库节点;目的数据库节点利用数据库快照页基于写时复制模式执行接收的事务;源数据库节点将修改内容发送给目的数据库节点,使目的数据库节点利用修改内容进行逻辑回放,修改内容是源数据库节点在快照操作后执行的写操作对应的修改内容;源数据库节点在确定目的数据库节点的逻辑回放成功完成的情况下,提交修改内容对应的事务。
Description
技术领域
本说明书实施例涉及计算机技术领域,特别涉及数据库迁移方法。
背景技术
基于共享存储的数据库,数据库数据分布在共享存储区。其中,一个或多个数据库实例运行在计算节点上提供读写服务,提供读写服务的数据库实例称为RW节点,同时,与RW节点共享存储区的多个只读数据库实例,称为RO节点,用于提供一致性只读查询服务。
为了提高弹性,公有云需要扩缩容,比如在服务高峰期,将计算需求较大的RW节点迁移到新加的或者空闲的物理机上。但是,目前的数据库迁移方案会导致数据库服务存在一定的中断时间,而且资源开销较大。有鉴于此,如何进行数据库迁移能够避免数据库服务的中断,减少资源开销,成为当前亟需解决的问题。
发明内容
有鉴于此,本说明书实施例提供了数据库迁移方法。本说明书一个或者多个实施例同时涉及数据库迁移系统,计算设备,计算机可读存储介质以及计算机程序,以解决现有技术中存在的技术缺陷。
根据本说明书实施例的第一方面,提供了一种数据库迁移方法,包括:源数据库节点挂起正在执行的事务,进行快照操作,得到数据库快照页;完成所述快照操作后,所述源数据库节点利用所述数据库快照页,基于写时复制模式恢复执行事务;将所述快照操作之后接收的事务路由到目的数据库节点,所述目的数据库节点与所述源数据库节点是基于共享存储区保存数据库数据的数据库实例;所述目的数据库节点利用所述数据库快照页基于写时复制模式执行接收的事务;所述源数据库节点将修改内容发送给所述目的数据库节点,使所述目的数据库节点利用所述修改内容进行逻辑回放,所述修改内容是所述源数据库节点在快照操作后执行的写操作对应的修改内容;所述源数据库节点在确定所述目的数据库节点的所述逻辑回放成功完成的情况下,提交所述修改内容对应的事务。
根据本说明书实施例的第二方面,提供了一种数据库迁移方法,应用于源数据库节点,包括:挂起正在执行的事务,进行快照操作,得到数据库快照页;完成所述快照操作后,利用所述数据库快照页基于写时复制模式恢复执行事务,所述快照操作,用于使所述快照操作之后接收的事务路由到目的数据库节点;其中,所述数据库快照页,还用于使目的数据库节点接收事务后,利用所述数据库快照页基于写时复制模式执行接收的事务,所述目的数据库节点与所述源数据库节点是基于共享存储区保存数据库数据的数据库实例;将所述快照操作后执行的写操作的修改内容发送给所述目的数据库节点,使所述目的数据库节点利用所述修改内容进行逻辑回放;在确定所述目的数据库节点的逻辑回放成功完成的情况下,提交所述修改内容对应的事务。
根据本说明书实施例的第三方面,提供了一种数据库迁移方法,应用于目的数据库节点,包括:接收事务,所述事务,是源数据库节点进行快照操作,得到数据库快照页后,路由到所述目的数据库节点的事务,所述目的数据库节点与所述源数据库节点是基于共享存储区保存数据库数据的数据库实例;利用所述数据库快照页基于写时复制模式执行接收的事务,所述数据库快照页,还用于使所述源数据库节点利用所述数据库快照页,基于写时复制模式恢复执行事务;获取所述源数据库节点在所述快照操作后执行的写操作对应的修改内容;利用所述修改内容进行逻辑回放,使所述源数据库节点在确定所述目的数据库节点的所述逻辑回放成功完成的情况下,提交所述修改内容对应的事务。
根据本说明书实施例的第四方面,提供了一种数据库迁移系统,包括:如本说明书任意实施例所述数据库迁移方法实现的源数据库节点,以及,如本说明书任意实施例所述数据库迁移方法实现的目的数据库节点。
根据本说明书实施例的第五方面,提供了一种计算设备,包括:存储器和处理器;所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现本说明书任意实施例所述数据库迁移系统中的源数据库节点和/或者目的数据库节点。
根据本说明书实施例的第六方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现本说明书任意实施例所述数据库迁移方法的步骤。
根据本说明书实施例的第七方面,提供了一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述数据库迁移方法的步骤。
本说明书一个实施例实现了数据库迁移方法,当数据库服务需要从源数据库节点迁移到目的数据库节点时,源数据库节点会挂起正在执行的事务,进行快照操作,得到数据库快照页,完成所述快照操作后,不仅源数据库节点能够恢复执行事务,事务基于写时复制模式执行,而且快照操作后接收到的事务,能够路由到目的数据库节点,使目的数据库节点基于写时复制模式执行事务,这样,使得源数据库节点和目的数据库节点各自执行快照前后的事务,无需中断数据库服务,而且,源数据库节点将所述快照操作后执行的写操作的修改内容发送给所述目的数据库节点,使所述目的数据库节点利用所述修改内容进行逻辑回放,不仅保证目的数据库节点得到了全局一致性的数据库数据,而且迁移所带来的数据传输量小,资源开销小,进而源数据库节点在目的数据库节点的逻辑回放成功完成的情况下提交运行其上的事务,完成数据库服务的迁移,实现了一种迁移过程中无需中断数据库服务,且资源开销小的数据库迁移方法。
附图说明
图1是本说明书一个实施例提供的数据库迁移方法的云原生数据库应用场景示意图;
图2是本说明书一个实施例提供的数据库迁移方法的流程图;
图3是本说明书一个实施例提供的写时复制模式的写操作示意图;
图4是本说明书一个实施例提供的数据库迁移过程中的日志处理流图;
图5是本说明书一个实施例提供的基于共享存储空间的在线迁移架构;
图6是本说明书一个实施例提供的数据库迁移方法的信令交互示意图;
图7是本说明书一个实施例提供的应用于源数据库节点的数据库迁移方法的流程图;
图8是本说明书一个实施例提供的配置于源数据库节点的数据库迁移装置的结构图;
图9是本说明书一个实施例提供的应用于目的数据库节点的数据库迁移方法的流程图;
图10是本说明书一个实施例提供的配置于目的数据库节点的数据库迁移装置的结构图;
图11是本说明书一个实施例提供的数据库迁移系统的结构示意图;
图12是本说明书一个实施例提供的一种计算设备的结构框图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
首先,对本说明书一个或多个实施例涉及的名词术语进行解释。
Tup le(元组),一个Tup le表示数据库表中的一行记录。
数据库页,数据库按页面进行存储,存储表的Tup le以及索引项。
Heap(堆),是区别于栈区、全局数据区和代码区的另一种内存区域。堆允许程序在运行时动态地按需申请内存空间。
数据库文件,数据库通过文件系统创建文件来存储表的heap和索引数据,并按页进行组织和管理。
Buffer poo l(缓存池),用于数据库将硬盘中的数据库页读取到内存缓存池中进行加速访问,在内存资源紧张时,缓存池采用一定的淘汰算法进行页面替换。
Checkpoint(检查点),是一个激活后会触发刷脏操作的事件。刷脏操作是指,数据库写进程将缓存池中的脏数据写出到数据文件。当数据库实例定期或用户主动发起checkpoint事件时,数据库实例将缓存池中的脏数据全部写回持久化存储,并相应创建checkpoint点。
MVCC(Mu lt i-vers ion Concurrency Contro l,多版本事务并发控制机制),关系型数据库领域通常用MVCC技术来实现事务ACI D中的隔离。ACI D表示atomic ity(原子性)、cons i stency(一致性)、i so l at ion(隔离性)、durabi l ity(持久性)。
快照隔离:数据库通常基于MVCC提供事务快照隔离,即一个事务只能看到在它开始前提交的其它事务的修改。为了支持快照隔离,每个事务开始时会分配一个开始时间戳,在事务提交的时候分配一个提交时间戳。一个事务T1可以看到另外一个提交事务T2的修改,当且仅当T1的开始时间戳晚于T2的提交时间戳。
数据库日志(WAL):数据库采用预写日志机制来保证持久化和故障恢复。预先日志机制,是指修改并不直接写入到数据库文件中,而是写入到数据库日志中,如果事务失败,数据库日志中的记录会被忽略,撤销修改,如果事务成功,将在随后的某个时间被写回到数据库文件中,提交修改。
数据库节点:指的是数据库实例,运行数据库代码,并提供数据库服务。
计算节点:指的是数据库实例运行所在的物理机或虚拟机。一个计算节点可以运行一个或多个数据库实例。
在云计算领域,为了提高弹性,一种方法是通过虚拟机迁移来扩缩容,比如在服务高峰期,将计算需求较大的RW节点所在虚拟机迁移到新加的或者空闲的物理机上。虚拟机迁移的方法对RW节点透明,能够提升RW节点的计算能力,但是会导致数据库服务存在一定的中断时间。同时,虚拟机迁移会带来显著的资源开销。另一种做法是在迁移命令发生时,代理服务器保持事务连接并暂停路由事务的语句执行对象到源RW节点,等待源RW节点上正在运行的语句执行对象执行结束,然后源RW节点完成所有脏数据的刷脏操作,最后代理服务器连接到新启动的目的RW节点,重载事务执行参数环境,路由新的语句执行对象到目的RW节点,从而实现数据库迁移。但是该方法仍然存在显著的停机时间,具体表现为:(1)停机等待正在执行的语句执行对象结束,对于长语句的语句执行对象(例如复杂查询),停机时间很长;(2)在目的RW节点接管之前,需要等待源RW节点完成所有刷脏操作,停机时间与脏页集合大小和刷脏的IO执行时间成正比,造成较长的停机时间。
有鉴于此,本说明书中提供了数据库迁移方法,本说明书同时涉及数据库迁移装置,数据库迁移系统,计算设备,以及计算机可读存储介质,在下面的实施例中逐一进行详细说明。
参见图1,图1示出本说明书一个实施例提供的数据库迁移方法的云原生数据库应用场景示意图。如图1所示,基于云设施实现的存储计算分离架构的云原生数据库,包括存储层和计算层,支持多租户弹性扩缩容,如增加和减少计算节点,在线迁移数据库服务,支持数据库软件升级和运维等。存储层可以为分布式共享存储,支持存储弹性可扩展,用于存储数据库数据。计算层可以包括一个或多个计算节点,一个计算节点上可以运行一个或多个数据库实例。其中,至少一个数据库实例为图1所示的源数据库节点,至少另一个数据库实例为图1所示的目的数据库节点。源数据库节点用于提供读写服务。源数据库节点和目的数据库节点的数据库数据分布在一个共享存储上。目的数据库节点是基于和源数据库节点相同的数据库目录启动的数据库实例。另外,还可以创建多个只读数据库节点。只读数据库节点提供一致性只读查询服务。
基于图1所示的云原生数据库场景,在数据库服务需要从源数据库节点迁移到目的数据库节点时,源数据库节点挂起正在执行的事务,进行快照操作,得到数据库快照页。代理服务器将所述快照操作之后接收的事务路由到所述目的数据库节点。完成所述快照操作后,所述源数据库节点恢复执行事务,其中,所述源数据库节点利用所述数据库快照页,基于写时复制模式恢复执行事务。所述目的数据库节点执行接收的事务,其中,所述目的数据库节点利用所述数据库快照页基于写时复制模式执行接收的事务。基于此,在快照操作结束后,源数据库节点和目的数据库节点形成双重执行的模式。为了使目的数据库节点得到全局一致的数据库数据,所述源数据库节点将所述快照操作后执行的写操作的修改内容发送给所述目的数据库节点,使所述目的数据库节点利用所述修改内容进行逻辑回放。所述源数据库节点还在快照操作后执行刷脏操作,所述刷脏操作使所述源数据库节点缓存中的脏数据下刷到所述共享存储区。所述源数据库节点在确定所述目的数据库节点对所述修改内容的逻辑回放成功完成的情况下,提交所述修改内容对应的事务。
需要说明的是,本说明书实施例提供的数据库迁移方法不限上述应用场景,可以基于各种类型的数据库实施,比如具有共享存储,支持MVCC和逻辑复制的数据库。
通过上述应用场景可见,源数据库节点在共享存储区上创建数据库快照页,基于写时复制模式,源数据库节点和目的数据库节点能够在迁移过程中双侧各自执行快照前后的事务,无需中断数据库服务,消除了迁移过程中服务中断和停机影响,而且,源数据库节点将快照操作后执行的写操作的修改内容发送给所述目的数据库节点,使目的数据库节点利用所述修改内容进行逻辑回放,源数据库节点执行刷脏操作使所述数据库快照页的脏数据以及所述第一写时复制文件的脏数据下刷到所述共享存储区,保证目的数据库节点得到了全局一致性的数据库数据,进而源数据库节点在目的数据库节点的逻辑回放成功完成的情况下提交运行其上的事务,完成数据库服务的迁移,实现了迁移过程中无需中断数据库服务的数据库迁移方法。
参见图2,图2示出了根据本说明书一个实施例提供的一种数据库迁移方法的流程图,具体包括以下步骤。
步骤202:源数据库节点挂起正在执行的事务,进行快照操作,得到数据库快照页。
所述挂起,是指操作系统将事务的进程暂停执行。
所述快照操作,是指获得数据库在某一时间点的只读视图的操作。
所述数据库快照页,是数据库在某一时间点的只读视图。
所述事务,是指数据库中用于访问并可能操作各种数据项的一个数据库操作序列。一个事务的操作要么全部执行,要么全部不执行。
源数据库进行快照操作,得到源数据库的一致性快照,也即数据库快照页,其中包含了在快照点时刻所有的数据库页,包括共享存储区中的数据库页,以及位于本地缓存池中但尚未写入共享存储区的脏页。数据库页包括heap表文件和索引文件页面等。对于每个数据库快照页,目的数据库节点可以通过高速网络从源数据库节点中读取过来。
例如,在确定数据库服务需要从源数据库节点迁移到目的数据库节点时,可以选择一个时刻进行一致性快照。假设源数据库节点在该时刻准备执行快照操作时,正在执行事务A和事务B,则暂停执行事务A和事务B,再进行快照操作。
为了进一步避免数据库服务中断,可以在源数据库节点执行快照操作之前先将目的数据库节点创建好,这样快照操作之后接收的路由事务能够尽快地路由到目的数据库节点,无需等待。在目的数据库节点创建成功后,源数据库节点再进行一致性快照操作。需要说明的是,一些应用场景中,数据库系统中只允许有一个读写节点,在这种情况下,代理服务器切换事务到目的数据库节点之前,目的数据库节点只能按照只读数据库节点启动,当代理服务器切换事务到目的数据库节点之后不再有新的事务请求到源数据库节点,此时,目的数据库节点设置为具备读写功能的读写节点。
例如,代理服务器确定需要将数据库服务从源数据库节点迁移到目的数据库节点的情况下,为源数据库节点在目的机器上基于共享存储创建目的数据库节点。基于共享存储创建目的数据库节点的过程可以包括:在目的机器基于源数据库节点相同的数据库目录启动一个数据库实例作为目的数据库节点。目的数据库节点启动后,可以暂时不接受任何的SQL处理,处于空闲状态。源数据库节点在执行快照操作前,先暂停数据库所有事务的执行,也可以理解为暂停用于执行事务的进程或线程,然后将缓存在内存中的数据库日志记录持久化到共享存储区,进行快照操作并标记整个数据库已经进行了快照,然后再恢复源数据库节点的事务的执行。
为了保证快照时刻数据库状态是一致的,即基于该数据库快照可以进行正确的读写,源数据库节点的事务的暂停,需要等待正在执行的原子修改操作完成,如对B树索引的修改操作是原子修改操作。具体地,本说明书一个或更多实施例中,所述方法在所述源数据库节点挂起正在执行的事务之前,还可以包括:
所述源数据库节点判断是否存在正在执行的原子修改操作;
如果存在正在执行的原子修改操作,等待所述原子修改操作完成,进入所述源数据库节点挂起正在执行的事务的步骤;
如果不存在正在执行的原子修改操作,进入所述源数据库节点挂起正在执行的事务的步骤。
例如,可以将以下三种操作定义为原子修改操:
(1)一个完整的tup le的插入/删除/更新的操作(包括对应的索引修改);
(2)正在执行的事务提交/回滚的操作;
(3)本地缓存Buffer Poo l的淘汰/刷脏操作。
再例如,本说明书一个或更多实施例中,可以在数据库代码中插入检查快照请求的逻辑来挂起事务,如函数check_snapshot_request(check_snapshot_request是检查快照请求函数的示例性函数名称,实际应用中函数名称可能多种多样)包含检查快照请求的逻辑。在该实施方式中,可以由源数据库节点的数据库内核执行插入该函数的步骤。具体地,数据库内核判断是否存在正在执行的原子修改操作,如果存在,则将该函数插在原子修改操作结束后的位置。当事务执行到check_snapshot_request函数时,事务被挂起。当源数据库节点的所有事务都挂起时,开始进行快照请求并设置快照点。
另外,为了避免等待大量刷脏IO,快照操作可以避免在源数据库节点做checkpoint的时刻进行。
步骤204:完成所述快照操作后,所述源数据库节点利用所述数据库快照页,基于写时复制模式恢复执行事务。
所述写时复制(Copy-on-wr ite,简称COW)模式,是一种计算机程序设计领域的优化策略,核心思想是:如果有多个调用者同时请求相同资源,会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,才会真正复制一份专用副本给该调用者,而其他调用者所见到的最初的资源仍然保持不变,这过程对其他的调用者都是透明的。写时复制模式的优点是如果调用者没有修改该资源,就不会有副本被创建,因此多个调用者只是读取操作时可以共享同一份资源。根据本说明书实施例提供的方法,所述源数据库节点和所述目的数据库节点,可以对同一数据库快照页进行读操作。写操作时,会复制该写操作相关的数据库快照页到写时复制文件(也可以称为COW文件),在写时复制文件中执行写操作。
例如,完成所述快照操作后,所述源数据库节点基于写时复制模式,通过复制相关的所述数据库快照页在第一写时复制文件中执行写操作。
在完成快照操作后,新到来的事务路由到目的数据库节点,已经路由到源数据库节点的老事务继续运行在源数据库节点。新到来的事务,是指快照操作开始后新到来的事务,包括快照操作开始到快照操作结束过程中和快照操作结束后到来的事务。一个事务可以由多个SQL组成。老事务在暂停又恢复执行后,老事务后续的SQL将继续保持路由到源数据库节点执行。
步骤206:将所述快照操作之后接收的事务路由到目的数据库节点,所述目的数据库节点与所述源数据库节点是基于共享存储区保存数据库数据的数据库实例。
本说明书一个或更多实施例中,代理服务器的路由策略,可以用于使路由到目的数据库节点的事务的提交时间戳大于路由到源数据库节点的老事务的开始时间戳,从而在快照隔离下目的数据库节点的新事务的修改对源数据库节点的老事务不可见。
在完成快照操作后,源数据库节点和目的数据库节点同时执行各自事务的读写。
步骤208:所述目的数据库节点利用所述数据库快照页基于写时复制模式执行接收的事务。
例如,所述目的数据库节点基于写时复制模式,通过复制相关的所述数据库快照页在第二写时复制文件中执行写操作。
由于在完成快照操作后,源数据库节点和目的数据库节点各自执行快照前后接收的事务,因此,完成快照操作后,源数据库节点和目的数据库节点实际上为同时读写。为了避免同时读写发生冲突,源数据库节点和目的数据库节点采用写时复制模式进行写操作。
接下来,对所述源数据库节点和所述目的数据库节点同时执行事务的读操作和写操作分别进行详细说明。
针对源数据库节点的读操作,源数据库节点先判断要读取的数据是否在本地缓存池,如果是,从本地缓存池获取要读取的数据,如果否,判断要读取的数据是否在所述源数据库节点的第一写时复制文件中,如果是,从所述第一写时复制文件中获取要读取的数据并放入本地缓存池,否则,从所述共享存储区中保存的数据库快照页中获取要读取的数据并放入本地缓存池。
针对目的数据库节点的读操作,由于源数据库节点上有最新的数据库快照页的内容,可能还未刷到共享存储,因此,在这种情况下,目的数据库节点可以先判断要读取的数据是否在本地缓存池,如果是,从本地缓存池获取要读取的数据,如果否,判断要读取的数据是否在所述目的数据库节点的第二写时复制文件中,如果是,从所述第二写时复制文件中获取要读取的数据并放入本地缓存池,否则,从所述源数据库节点获取要读取的数据并放入本地缓存池。
在目的数据库节点需要从源数据库节点获取要读取的数据库快照页时,目的数据库节点可以通过高速网络向源数据库节点请求数据库快照页。该数据库快照页如果位于源数据库节点的缓存池中,则直接返回该页面数据,如果该数据库快照页被淘汰出缓存池,则可以通过以下任一种方式读取数据:一种是源数据库节点从共享存储区中读取该数据库快照页返回给目的数据库节点,另一种是目的数据库节点自己从共享存储区中读取。
为了提高读写效率,还可以为写时复制文件建立索引,也称为COW索引。在需要从写时复制文件中查找数据时,可以先从对应的索引中进行查找。具体地,结合上述读操作的过程,源数据库节点在读数据库页时,如果不在本地缓存池中,先从对应的COW索引中进行查找。如果根据COW索引,要读的数据库页存在COW页,则从COW文件中读取COW页面到本地缓存池中,否则,继续读取数据库快照页到本地缓存池。
对于源数据库节点的写操作,所述源数据库节点利用所述数据库快照页,基于写时复制模式恢复执行事务,包括:
如果所述源数据库节点恢复执行的事务的写操作是所述快照操作之后对第一数据库文件的首次写操作,为所述第一数据库文件创建对应的第一写时复制文件,所述第一数据库文件是所述源数据库节点的数据库文件;
如果所述源数据库节点恢复执行的事务的写操作是对第一数据库快照页的首次写操作,在所述第一写时复制文件中创建对应的第一写时复制文件页,将所述第一数据库快照页的数据复制到所述第一写时复制文件页,所述源数据库节点在所述第一写时复制文件中,执行写操作,所述第一数据库快照页是一个或多个所述数据库快照页;
如果所述源数据库节点恢复执行的事务的写操作是对第一数据库快照页的非首次的写操作,所述源数据库节点在所述第一写时复制文件中执行写操作。
对于目的数据库节点的写操作,所述目的数据库节点利用所述数据库快照页,基于写时复制模式执行接收的事务,包括:
如果所述目的数据库节点要执行的事务的写操作是对第二数据库文件的首次写操作,为所述第二数据库文件创建对应的第二写时复制文件,所述第二数据库文件是所述目的数据库节点的数据库文件;
如果所述目的数据库节点要执行的事务的写操作是对第二数据库快照页的首次写操作,在所述第二写时复制文件中创建对应的第二写时复制文件页,将所述第二数据库快照页的数据复制到所述第二写时复制文件页,所述第二数据库快照页是一个或多个所述数据库快照页,所述目的数据库节点在所述第二写时复制文件中,执行写操作;
如果所述目的数据库节点要执行的事务的写操作是对第二数据库快照页的非首次的写操作,所述目的数据库节点在所述第二写时复制文件中,执行写操作。
相应地,为了提高读写效率,所述方法还包括:
在所述源数据库节点创建所述第一写时复制文件页后,将所述第一写时复制文件页对应的第一数据库快照页写回所述共享存储区,将所述第一写时复制文件页写入本地缓存池;
在所述目的数据库节点创建所述第二写时复制文件页后,将所述第二写时复制文件页对应的第二数据库快照页删除,将所述第二写时复制文件页写入本地缓存池。
参见图3所示的写时复制模式的写操作示意图,根据上述源数据库节点和目的数据库节点的写操作过程,源数据库节点和目的数据库节点采用相同的策略:即当一个事务在源数据库节点完成快照操作后,第一次要对一个数据库文件进行修改时,为该数据库文件创建一个写时复制文件(即COW文件)以及写时复制索引文件(即COW索引文件),对数据库快照页的第一次修改将触发从对应的写时复制文件中分配一个新的物理页(也即写时复制文件页),并将数据库快照页的内容复制到写时复制文件的物理页中,再执行修改操作。写时复制文件存储在共享存储区中。具体地,共享存储区可以包括:用于保存索引,堆和事务状态信息的存储区,写时复制文件存储区,数据库快照页存储区等等。其中,源数据库节点和目的数据库节点可以分别在文件名前面加上不同的前缀来在共享存储区中做区分。例如,源数据库节点可以在第一写时复制文件和对应的索引文件前加前缀“src”,目的数据库节点可以在第二写时复制文件和对应的索引文件前加前缀“dest”。
在源数据库节点或目的数据库节点执行写操作过程中,本地缓存池中相关的数据库快照页可以被淘汰替换成对应的写时复制文件页。另外,对于源数据库节点,如果写操作相关的数据库快照页是脏页,同时还可以将该脏页持久化写入到共享存储区。为了进一步提高读写效率,还可以将数据库快照页与写时复制文件页的页号对应地记录在相应的写时复制索引文件中,这样,后续的读写可以路由到写时复制文件页上执行。
通过上述过程可见,在写时复制模式下执行写操作时(如在表中插入新记录等写操作),数据库表/索引文件可能需要分配新的页面空间时,是直接从写时复制文件中分配,而不是从原表/索引文件分配。另外,源数据库节点的写时复制的过程可以记录到写时复制日志,目的数据库节点的写时复制的过程可以记录到共享存储区中的数据库日志,以此来保证可故障恢复。具体地,例如,数据库日志中可以记录:新的COW页的分配操作内容、COW索引的插入操作内容、创建COW文件的操作内容、对索引的操作内容和后续对COW页的修改内容等等。
另外,由于源数据库节点在执行快照操作时,缓存池中的数据库快照页中可能存在脏页,因此,需要源数据库节点的脏页完成下刷后,目的数据库节点的脏页才能下刷,以此保证目的数据库节点的刷脏操作,能够得到一致的数据库数据。基于此,所述方法还可以包括:完成所述快照操作后,所述源数据库节点执行刷脏操作,所述刷脏操作使所述源数据库的脏数据下刷到所述共享存储区;在所述源数据库节点完成所述刷脏操作后,所述目的数据库节点执行第一次刷脏操作。
具体地,在源数据库节点执行刷脏操作时,缓存池中数据库快照页的脏页会刷入到共享存储区中的快照区域,即写入heap表和索引文件中。在目的数据库节点执行刷脏操作时,则可以直接丢弃缓存池中的数据库快照页。而源数据库节点和目的数据库节点各自缓存池中的写时复制文件的脏数据,则均需在执行刷脏操作时,下刷到共享存储区对应的写时复制文件中。基于此,源数据库节点和目的数据库节点前后各自执行刷脏操作,使共享存储区中的数据库快照页以及写时复制页能够支持故障恢复。例如,可以在源数据库节点完成快照操作,创建完快照点后,源数据库节点开启最后一次刷脏操作,将数据库快照页的脏数据页写回共享存储区,并最后创建checkpoint点。对于目的数据库节点,缓存池中的数据库快照页被替换为写时复制文件页时,被替换的数据库快照页丢弃即可。当源数据库节点完成最后一次刷脏操作,目的数据库节点接管执行后续的刷脏操作。
在源数据库节点将内存中的数据库日志记录下刷到共享存储区时,下刷的数据库日志记录中最新的数据库日志记录序号,可以作为快照点。
步骤210:所述源数据库节点将修改内容发送给所述目的数据库节点。
所述修改内容是所述源数据库节点在快照操作后执行的写操作对应的修改内容。例如,所述修改内容中,可以包括一条或多条逻辑修改记录,所述逻辑修改记录中包括:修改的记录标识,修改操作类型以及对应的修改值。
所述源数据库节点记录所述修改内容的方式不限。例如,一种实施方式中,源数据库节点在执行写操作同时,对写操作对应的修改内容记录到任意类型的文件中;另一种实施方式中,可以基于写时复制模式的写时复制日志的生成方式,将写操作对应的修改内容记录到写时复制日志中。
步骤212:所述目的数据库节点利用所述修改内容进行逻辑回放。
所述逻辑回放,是指目的数据库节点根据修改内容所属事务的快照时间戳,获取对应的数据库快照页,运行修改内容对应的修改逻辑,使目的数据库节点得到源数据库节点运行该事务时相同的输出结果。
为了避免日志写冲突以及支持故障恢复,本说明书一个或更多实施例中,所述源数据库节点在挂起正在执行的事务后,恢复执行事务之前,所述源数据库节点可以将内存中的数据库日志写到所述共享存储区。这样,目的数据库节点在快照后执行新事务时,能够将新事务的修改内容写入到共享存储区中的所述数据库日志,目的数据库节点能够得到快照前后完整的数据库日志,保证数据库日志能够支持故障恢复。因此,所述目的数据库节点将执行的写操作对应的修改内容记录到所述共享存储区中的所述数据库日志。另外,为了避免源和目的数据库节点写日志冲突,所述源数据库节点可以将恢复执行事务之后执行的写操作对应的修改内容记录到写时复制日志。相应地,所述源数据库节点将修改内容发送给所述目的数据库节点,可以包括:所述源数据库节点读取所述写时复制日志,解析出所述写时复制日志中各条日志项的修改内容发送给所述目的数据库节点。
具体地,参见图4所示的数据库迁移过程中的日志处理流程。如图4所示,源数据库节点的本地缓存池中可以包括:第一写时复制文件页缓存池,数据库快照页缓存池以及日志缓存池。目的数据库节点的本地缓存池中可以包括:第二写时复制文件页缓存池,数据库快照页缓存池以及日志缓存池。在源数据库节点执行快照操作时,源数据库节点的事务被暂停,源数据库节点内存中的数据库日志被下刷至共享存储区,此时数据库日志的末尾位置记录为快照点。在快照操作结束后,源数据库节点进入写时复制模式,在共享存储区中创建写时复制日志(图4中以cow WAL log来示意写时复制日志)的区域,源数据库节点基于写时复制模式执行事务。在源数据库节点执行写操作时,在数据库快照页基础上产生第一写时复制文件页,第一写时复制文件页缓存在第一写时复制文件页缓存池。在源数据库节点执行读操作时,读取的数据库快照页缓存在数据库快照页缓存池。源数据库节点执行的写操作对应的修改内容记录到日志缓存池的写时复制日志中。可以理解的是,源数据库节点可以在任意情况(如刷脏,写缓存同时写持久化存储等情况)下,将缓存中的数据库快照页的脏数据,写时复制文件页的脏数据和写时复制日志的脏数据下刷到共享存储区。其中,写入到共享存储区中的数据库日志,在快照点(图4中以snap_l sn;来示意快照点)之后,不会有源数据库节点产生的修改。目的数据库节点基于写时复制模式执行事务。在目的数据库节点执行写操作时,在数据库快照页基础上产生第二写时复制文件页,第二写时复制文件页缓存在第二写时复制文件页缓存池。在目的数据库节点执行读操作时,读取的数据库快照页缓存在数据库快照页缓存池。目的数据库节点执行的写操作对应的修改内容记录到日志缓存池,并按需同步到共享存储区的数据库日志中。相当于数据库日志的写日志操作,由原来的源数据库节点执行切换到目的数据库节点执行。数据库日志中,快照点之后的日志记录为目的数据库节点产生的修改组成。
根据上述实施例,源数据库节点还可以启动解析进程,以便利用解析进程从写时复制日志中解析出修改内容发送给目的数据库节点进行逻辑回放。其中,源数据库节点逻辑日志的流程是:解析进程读取写时复制日志中的各个日志项,解析每个日志项修改的表的tup le,修改操作类型(如插入/删除/更新/加锁),修改值(插入值或更新的tup le列及值),生成逻辑修改记录(也即修改内容),然后将逻辑修改记录发送给目的数据库节点进行回放。
另外,为了目的数据库节点在逻辑回放时,能够快速定位到修改的tup le,一种方式是利用数据库每个表具有对应的主键,源数据库节点在写时复制日志中记录修改内容的时候,相应记录修改内容对应的表的主键。这样,目的数据库节点在逻辑回放时,能够通过修改内容中的主键信息快速定位到要修改的tup le。另一种方式是为表添加隐藏的行号列,这样,表中每个tup le在生成时都会对应生成一个递增的唯一的RI D,并构建RI D索引。源数据库节点在写时复制日志中记录修改内容时,相应记录修改的tup le的RI D,这样,目的数据库节点在逻辑回放时,能够根据RI D索引快速定位要修改的tup le。
在本说明书实施例提供的方法中,为了使目的数据库节点得到全局一致性的数据库数据,源数据库节点的事务在快照操作后采用2PC(两阶段提交协议,P表示Prepare,准备阶段,C表示Commit,提交阶段)进行事务提交。其中,准备阶段prepare完成后,需要等待目的数据库节点的回放结果,如没有写写冲突,回放成功,则目的数据库节点会返回包含提交时间戳的回放结果,源数据库节点用相同的提交时间戳提交源事务,否则,回滚事务。
具体地,本说明书一个或更多实施例中,所述第一事务为两阶段事务,所述源数据库节点读取所述写时复制日志,解析出所述写时复制日志中各条日志项的修改内容发送给所述目的数据库节点,包括:
所述源数据库节点为每个事务各创建一个缓存队列;
所述源数据库节点按时间从早到晚的顺序读取所述写时复制日志中的日志项;
所述源数据库节点解析所述日志项的修改内容;
所述源数据库节点将解析出的修改内容,放入对应的事务的缓存队列;
所述源数据库节点响应于任一事务处于准备阶段,将该事务的缓存队列中缓存的修改内容发送给所述目的数据库节点。
在上述实施例中,源数据库节点的解析进程不断按顺序解析写时复制日志,为每个修改内容对应的源事务(源数据节点的事务)创建一个缓存队列,用于缓存解析出的该事务的逻辑修改记录,这样,源数据库节点响应于任一源事务处于准备阶段时,将该事务的缓存队列中所有逻辑修改记录发送给目的数据库节点进行逻辑回放,然后删除该事务的缓存队列。
为了避免目的数据库节点在逻辑回放时发生写写冲突,本说明书一个或更多实施例中,所述目的数据库节点利用所述修改内容进行逻辑回放,包括:
所述目的数据库节点针对所述修改内容所属事务启动对应的影子事务,所述影子事务中包括:对所述修改内容相关的数据库快照页的读操作、对所述读操作读取出的数据进行写冲突检测、锁冲突检测和约束条件检查的操作、以及在所述写冲突检测、锁冲突检测和约束条件检查均通过的情况下,利用所述修改内容进行逻辑回放的操作,其中,所述读操作采用与所述修改内容所属事务相同的快照时间戳进行数据库快照页的读取;
如果所述写冲突检测、锁冲突检测和约束条件检查中任一项未通过,所述目的数据库节点中止所述影子事务的执行;
如果所述影子事务成功完成所述逻辑回放的操作,所述目的数据库节点为所述影子事务分配提交时间戳,提交所述影子事务,并将所述提交时间戳发送给所述源数据库节点,使所述源数据库节点使用所述提交时间戳提交对应的事务;
如果所述影子事务的逻辑回放失败或被中止,所述目的数据库节点向所述源数据库节点返回失败信息,使所述源数据库节点回滚对应的事务。
其中,所述影子事务,是指与对应的源事务使用相同快照时间戳执行相同修改内容的事务,与源事务对数据库产生相同的结果。
例如,根据上述实施例,目的数据库节点可以启动app ly进程来进行逻辑回放。App ly进程是一种阻塞式的进程,首先主进程开始运行,碰到子进程,切换到子进程,等待子进程运行结束后,在切换到另外一个子进程,直到所有子进程运行完毕。具体地,App ly进程在回放任一个源事务的修改内容集合之前,为之启动一个影子事务。源事务是指源数据库节点在快照操作后恢复执行的事务。对于源事务的每个修改操作记录,app ly进程采用和源事务相同的快照时间戳进行快照读,进行写写冲突检测、锁冲突检测和约束条件检查。具体地,app ly进程根据修改操作记录里面的主键或RI D定位到要修改的tup le版本链,然后读取快照时间戳之前提交的最新版本进行写写冲突检测,如果快照时间戳之前提交的最新版本后存在新的版本,或被标记删除,则说明该tup le被目的数据库节点上的并发事务修改过,存在并发写写冲突,需要中止影子事务以及对应的源事务。
基于上述实施例,所述源数据库节点向目的数据库节点发送的修改内容中还可以包括加锁操作信息。相应地,源数据库节点将执行事务过程中执行的加锁操作信息记录到写时复制日志,这样源数据库节点在解析所述写时复制日志时,能够解析出加锁操作信息,进而将所述加锁操作信息发送给所述目的数据库节点,使所述目的数据库节点在执行所述逻辑回放时执行对应的加锁回放。例如,Tup le的锁信息可以嵌入在tup le的头部以及组合事务I D日志中。目的数据库节点通过读取heap表以及组合事务I D日志的快照数据,可以获得在快照之前源数据库节点加的锁。快照之后,源数据库节点将加锁操作信息写入写时复制日志中,目的数据库节点可以通过获得源数据库节点发送的加锁操作信息进行加锁回放。
例如,对于显示锁(例如“Se lect for update/share”等用于读数据的SQL语句),源数据库节点可以将源事务中的显示锁的加锁操作信息同步到目的数据库节点进行回放。目的数据库节点在进行逻辑回放过程中,可以根据加锁操作信息里面的主键或RI D定位到要加锁的tup le,然后执行加锁操作。如果存在锁与目的数据库节点上并发写的冲突,则中止影子事务以及对应的源事务。
对于所有逻辑修改记录,如果没有写写冲突且通过了约束条件检查,app ly进程分配提交时间戳提交该影子事务,并返回提交时间戳给源数据库节点,否则,影子事务回放失败被中止,同时返回失败信息给源数据库节点。其中,约束条件检查是根据数据库场景需要设置的约束条件,如唯一性约束等。源数据库节点在收到回放成功的消息的时候,用相同提交时间戳提交源事务。若收到回放失败消息,则回滚源事务。
另外,所述目的数据库节点进行逻辑回放产生的写操作,同样可以基于写时复制模式,通过复制相关的所述数据库快照页在所述第二写时复制文件中执行。具体地,目的数据库节点在第一次对数据库快照页修改时,会产生对应的第二写时复制文件页,后续修改直接在第二写时复制文件页上进行。为了提高回放效率,目的数据库节点可以启动多个线程进行并行回放,从而加速回放速度。例如,可以采用事务级别的并行回放算法。
步骤214:所述源数据库节点在确定所述目的数据库节点的所述逻辑回放成功完成的情况下,提交所述修改内容对应的事务。
可见,根据本说明书实施例提供的方法,数据库服务需要从源数据库节点迁移到目的数据库节点时,源数据库节点会挂起正在执行的事务,进行快照操作,得到数据库快照页,完成所述快照操作后,不仅源数据库节点能够恢复执行事务,事务基于写时复制模式执行,而且快照操作后接收到的事务,能够路由到目的数据库节点,使目的数据库节点基于写时复制模式执行事务,这样,使得源数据库节点和目的数据库节点各自执行快照前后的事务,无需中断数据库服务,而且,源数据库节点将所述快照操作后执行的写操作的修改内容发送给所述目的数据库节点,使所述目的数据库节点利用所述修改内容进行逻辑回放,不仅保证目的数据库节点得到了全局一致性的数据库数据,而且迁移所带来的数据传输量小,资源开销小,进而源数据库节点在目的数据库节点的逻辑回放成功完成的情况下提交运行其上的事务,完成数据库服务的迁移,实现了一种迁移过程中无需中断数据库服务,且资源开销小的数据库迁移方法。
本说明书一个或更多实施例中,结合上述多个实施例实现了如图5所示的基于共享存储空间的在线迁移架构。如图5所示,在该在线迁移架构中,包括:代理服务器,源数据库节点和目的数据库节点。其中,代理服务器,用于接收事务,将事务路由到源数据库节点(图5中以Src RW node来示意源数据库节点)或目的数据库节点(图5中以Dest RW node来示意目的数据库节点)。源数据库节点,在需要迁移时,执行快照操作。源数据库节点和目的数据库节点在快照操作结束之后,双侧同时分别基于写时复制模式执行老事务,新事务。源数据库节点和目的数据库节点是基于共享存储区来存储数据库数据的数据库实例。源数据库节点在基于写时复制模式执行事务时,将写操作对应的修改内容记录到写时复制日志,后续通过解析该写时复制日志,将修改内容发送给目的数据库节点进行逻辑回放。
为了使图5所示的迁移架构更加易于理解,下述结合附图6,对所述数据库迁移方法的信令交互过程进行进一步说明。其中,图6示出了本说明书一个实施例提供的一种数据库迁移方法的信令交互示意图,具体包括以下步骤。
步骤602:在目的机器基于和源数据库节点相同的数据库目录启动一个数据库实例作为目的数据库节点。
步骤604:源数据库节点判断是否存在正在执行的原子修改操作。
步骤606:如果存在正在执行的原子修改操作,等待所述原子修改操作完成,进入所述源数据库节点挂起正在执行的事务的步骤。
步骤608:如果不存在正在执行的原子修改操作,进入所述源数据库节点挂起正在执行的事务的步骤。
步骤610:源数据库节点挂起正在执行的事务,进行快照操作,得到数据库快照页。
快照开始到快照结束期间,代理服务器将新到来的事务挂起。
步骤612:源数据库节点将内存中的数据库日志写到所述共享存储区。
步骤614:源数据库节点完成所述快照操作后,源数据库节点恢复执行事务。
快照结束,代理服务器将新到来的事务路由到目的数据库节点。
步骤616:目的数据节点接收路由过来的事务。
步骤618:源数据库节点完成所述快照操作后,执行刷脏操作,所述刷脏操作使所述源数据库的脏数据下刷到所述共享存储区。
步骤620:对于写操作,源数据库节点基于写时复制模式,通过复制相关的所述数据库快照页在第一写时复制文件中执行写操作。
步骤622:所述源数据库节点将恢复执行事务之后执行的写操作对应的修改内容记录到写时复制日志。
步骤624:对于写操作,目的数据库节点基于写时复制模式,通过复制相关的所述数据库快照页在第二写时复制文件中执行写操作。
步骤626:目的数据库节点将执行的写操作对应的修改内容记录到所述共享存储区中的所述数据库日志。
步骤628:对于读操作,源数据库节点先判断要读取的数据是否在本地缓存池,如果是,从本地缓存池获取要读取的数据,如果否,判断要读取的数据是否在所述第一写时复制文件中,如果是,从所述第一写时复制文件中获取要读取的数据并放入本地缓存池,否则,从所述共享存储区中保存的数据库快照页中获取要读取的数据并放入本地缓存池。
步骤630:对于读操作,目的数据库节点判断要读取的数据是否在本地缓存池,如果是,从本地缓存池获取要读取的数据,如果否,判断要读取的数据是否在所述第二写时复制文件中,如果是,从所述第二写时复制文件中获取要读取的数据并放入本地缓存池,否则,从所述源数据库节点或所述共享存储区中保存的数据库快照页中获取要读取的数据并放入本地缓存池。
步骤632:源数据库节点读取所述写时复制日志,解析出所述写时复制日志中各条日志项的修改内容发送给所述目的数据库节点。
步骤634:目的数据库节点利用接收的修改内容进行逻辑回放。
步骤636:源数据库节点在确定所述目的数据库节点的所述逻辑回放成功完成的情况下,提交所述修改内容对应的事务。
通过上述处理过程可见,在需要进行数据库迁移时,源数据库节点执行快照操作,在快照操作结束后,源数据库节点和目的数据库节点各自执行的写操作分别在各自的COW文件中执行。源数据库节点的写操作对应的修改内容记录到写时复制日志,目的数据库节点的写操作对应的修改内容记录到数据库日志,避免了写日志冲突。而且,目的数据库节点在需要访问数据库快照页时,通过高速网络从源数据库节点获取对应的数据库快照页,从而提供一个强一致性的目的数据库节点。另外,源数据库节点将回复执行事务之后执行的写操作对应的修改内容记录到写时复制日志,之后通过解析写时复制日志,将修改内容发送给目的数据库节点进行逻辑回放,使目的数据库节点得到一个全局一致性视图,实现了迁移过程中无需中断数据库服务,且资源开销小的数据库迁移方法。
本说明书一个或更多实施例中,为了保证事务状态信息的一致性,所述方法还包括:
所述源数据库节点基于写时复制模式,通过复制事务状态维护文件中的相关数据页,在第三写时复制文件中执行对事务状态信息的修改,所述事务状态维护文件用于维护事务状态信息,所述事务状态维护文件存储于所述共享存储区;
所述目的数据库节点基于写时复制模式,通过复制事务状态维护文件中的相关数据页,在第四写时复制文件中执行对事务状态信息的修改。
在上述实施例中,通过建立“事务状态维护文件”这一数据结构来维护事务状态信息,并存储在共享存储中。例如,一些类型的数据库中,事务状态信息可以包括事务提交状态(时间戳)存储日志,子事务状态存储日志,以及支持share-lock的存储mu lt ixact idlog。其中,share-lock表示共享锁,Mu lt ixact id log表示组合事务I D日志。这些事务状态信息以文件形式存储在共享存储区,按物理页进行划分管理,同时在内存中建立页缓存加速页面读写访问。在快照操作后,对于事务状态信息的修改,源数据库节点和目的数据库节点可以采用和数据页面一样的写时复制模式。
本说明书一个或更多实施例中,为了保证事务一致性和会话一致性,所述方法还包括:
所述源数据库节点在所述快照操作开始之后,将下一可用的事务唯一标识符以及事务全局变量信息发送给所述目的数据库节点,使所述目的数据库节点对可用的事务唯一标识符以及事务全局变量信息进行维护;
当所述源数据库节点需要可用的事务唯一标识符时,所述目的数据库节点分配可用的事务唯一标识符给所述源数据库节点。
在上述实施例中,源数据库节点将下一可用事务唯一标识符以及其他事务全局变量信息发送给目的数据库节点进行维护,源数据库节点在与目的数据库节点双侧运行过程中,由目的数据节点为其分配事务唯一标识,从而能够保证事务唯一标识符在源/目的数据库节点保持一致和统一,保证事务的一致性。
另外,目的数据库节点的正在运行事务列表也需要考虑源数据库节点正在运行的事务。即,在快照操作时,源数据库节点将正在运行事务列表发送给目的数据库节点。相应地,源数据库节点的事务在结束前,需要从目的数据库节点的正在运行事务列表中将该事务移除,从而使目的数据库节点维护的事务具有全局一致性。可以理解的是,如果事务不移除,将导致该结束的事务的结果不可见,从而导致数据不一致,数据损坏。
本说明书一个或更多实施例中,所述将所述快照操作之后接收的事务路由到目的数据库节点,包括:
代理服务器将在所述源数据库节点执行快照操作过程中接收到的事务挂起;
当所述源数据库节点执行快照操作结束时,所述代理服务器为挂起的事务分配开始时间戳;
所述代理服务器将分配了开始时间戳的事务路由到所述目的数据库节点。
在上述实施例中,在源数据库节点执行快照操作过程中,代理服务器会挂起新到来的事务,等待快照结束,再为新到来的事务分配开始时间戳,进而路由到目的数据库节点。基于时间戳递增的原理可以保证路由到目的数据库节点的新事务的开始时间戳大于(或理解为晚于)路由到源数据库节点的老事务的开始时间戳。由于提交时间戳大于开始时间戳,则源数据库节点执行的老事务的开始时间戳一定小于目的数据库节点执行的新事务的提交时间戳。目的数据库节点执行的新事务的修改对源数据库节点执行的老事务不可见。因此,在源数据库节点和目的数据库节点双重执行模型下,根据本说明书实施例提供的方法,只需要同步源数据库节点的事务的修改内容到目的数据库节点,通过写写冲突检测和锁冲突检测等检测后进行逻辑回放,即可保证快照隔离。其中,每个事务的开始时间戳和提交时间戳均可以由代理服务器进行分配。
本说明书一个或更多实施例中,为了在目的数据库节点的MVCC空间回收时,不影响源数据库节点的事务的执行,所述方法还包括:所述目的数据库节点在基于多版本事务并发控制机制进行内存空间回收时,如果待回收版本的数据库快照页当前处于被所述源数据库节点的事务使用中,则放弃对所述待回收版本的数据库快照页的回收。可以理解的是,任何事务开始时会取得一个时间戳,代表这个时间前的结果对该事务可见。本实施例回收老版本的数据时,需要考虑源数据库节点上运行的事务,如果有事务的时间戳比较小,即比老版本的数据的时间戳小时,那么相应的版本的数据不能被回收。因此,本实施例中,目的数据库节点在进行多版本回收时,会同时考虑源数据库节点的事务,为源数据库节点的每个事务保留可见的版本。
本说明书一个或更多实施例中,在所述源数据库节点的最后一次刷脏操作执行结束,且所述源数据库节点的所有事务运行结束的情况下,所述目的数据库节点的写操作退出写时复制模式。在退出写时复制模式后,如果所述目的数据库节点的读操作是对第二写时复制文件中的数据的读操作,则可以继续对所述第二写时复制文件执行所述读操作。为了减少查找写时复制文件带来的开销,本说明书一个或更多实施例中,所述目的数据库节点还可以将所述第二写时复制文件中的数据写回到对应的数据库快照页,并将所述第二写时复制文件中的数据写回到对应的数据库快照页的操作记录到数据库日志。
可以理解的是,根据本说明书实施例提供的方法,源数据库节点的所有事务结束,且源数据库节点的最后一次刷脏操作结束,也即完成了数据库服务从源数据库节点到目的数据库节点的迁移。因此,上述实施例中,源数据库节点的所有事务运行结束后,目的数据库节点退出写时复制模式,进入正常的读写模式,也即,修改数据库快照页不会再产生写时复制文件页。而且,目的数据库节点通过将第二写时复制文件写回到对应的数据库快照页,使二者合并,减少了查找写时复制文件页带来的额外开销。为了提高合并效率,本说明书一个或更多实施例中,目的数据库节点可以启动一个或多个合并进程,对各个写时复制文件页进行合并清理。另外,在每个写时复制文件页写回其对应的数据库快照页时,还可以删除对应的COW索引项。在合并的过程中,本实施例可以加页面锁和/或buffer锁,以保证数据一致性。
需要说明的是,在数据库迁移过程中,故障可以发生在源数据库节点或目的数据库节点,或两者同时故障。如果在快照操作结束之前故障,则可以根据数据库日志恢复源数据库节点,如果在快照操作结束后故障,则可以根据数据库日志恢复目的数据库节点。
与上述方法实施例相对应,本说明书还提供了应用于源数据库节点的数据库迁移方法。图7示出了本说明书一个实施例提供的应用于源数据库节点的数据库迁移方法的流程图。如图7所示,该方法包括:
步骤702:挂起正在执行的事务,进行快照操作,得到数据库快照页。
步骤704:完成所述快照操作后,利用所述数据库快照页基于写时复制模式恢复执行事务。
所述快照操作,用于使所述快照操作之后接收的事务路由到目的数据库节点。
其中,所述数据库快照页,还用于使目的数据库节点接收事务后,利用所述数据库快照页基于写时复制模式执行接收的事务,所述目的数据库节点与所述源数据库节点是基于共享存储区保存数据库数据的数据库实例;
步骤706:将所述快照操作后执行的写操作的修改内容发送给所述目的数据库节点,使所述目的数据库节点利用所述修改内容进行逻辑回放。
步骤708:在确定所述目的数据库节点的逻辑回放成功完成的情况下,提交所述修改内容对应的事务。
根据上述方法,数据库服务需要从源数据库节点迁移到目的数据库节点时,源数据库节点会挂起正在执行的事务,进行快照操作,得到数据库快照页,完成所述快照操作后,不仅源数据库节点能够恢复执行事务,事务基于写时复制模式执行,而且快照操作后接收到的事务,能够路由到目的数据库节点,使目的数据库节点基于写时复制模式执行事务,这样,使得源数据库节点和目的数据库节点各自执行快照前后的事务,无需中断数据库服务,而且,源数据库节点将所述快照操作后执行的写操作的修改内容发送给所述目的数据库节点,使所述目的数据库节点利用所述修改内容进行逻辑回放,不仅保证目的数据库节点得到了全局一致性的数据库数据,而且迁移所带来的数据传输量小,资源开销小,进而源数据库节点在目的数据库节点的逻辑回放成功完成的情况下提交运行其上的事务,完成数据库服务的迁移,实现了一种迁移过程中无需中断数据库服务,且资源开销小的数据库迁移方法。
上述为本实施例的应用于源数据库节点的数据库迁移方法的示意性方案。需要说明的是,该应用于源数据库节点的数据库迁移方法的技术方案与前述任一实施例述的数据库迁移方法的技术方案属于同一构思,应用于源数据库节点的数据库迁移方法的技术方案未详细描述的细节内容,均可以参见前述数据库迁移方法的技术方案的描述。
与上述方法实施例相对应,本说明书还提供了配置于源数据库节点的数据库迁移装置实施例,图8示出了本说明书一个实施例提供的配置于源数据库节点的数据库迁移装置的结构示意图。如图8所示,该装置包括:
快照模块802,被配置为挂起正在执行的事务,进行快照操作,得到数据库快照页。
第一事务执行模块804,被配置为完成所述快照操作后,利用所述数据库快照页基于写时复制模式恢复执行事务,所述快照操作,用于使所述快照操作之后接收的事务路由到目的数据库节点。
其中,所述数据库快照页,还用于使目的数据库节点接收事务后,利用所述数据库快照页基于写时复制模式执行接收的事务,所述目的数据库节点与所述源数据库节点是基于共享存储区保存数据库数据的数据库实例。
修改发送模块806,被配置为将所述快照操作后执行的写操作的修改内容发送给所述目的数据库节点,使所述目的数据库节点利用所述修改内容进行逻辑回放。
提交模块808,被配置为在确定所述目的数据库节点的逻辑回放成功完成的情况下,提交所述修改内容对应的事务。
上述为本实施例的配置于源数据库节点的数据库迁移装置的示意性方案。需要说明的是,该配置于源数据库节点的数据库迁移装置的技术方案与前述任一实施例述的数据库迁移方法的技术方案属于同一构思,配置于源数据库节点的数据库迁移装置的技术方案未详细描述的细节内容,均可以参见前述数据库迁移方法的技术方案的描述。
与上述方法实施例相对应,本说明书还提供了应用于目的数据库节点的数据库迁移方法。图9示出了本说明书一个实施例提供的配置于目的数据库节点的数据库迁移方法的流程图。
如图9所示,该方法包括:
步骤902:接收事务,所述事务,是源数据库节点进行快照操作,得到数据库快照页后,路由到所述目的数据库节点的事务,所述目的数据库节点与所述源数据库节点是基于共享存储区保存数据库数据的数据库实例。
步骤904:利用所述数据库快照页基于写时复制模式执行接收的事务,所述数据库快照页,还用于使所述源数据库节点利用所述数据库快照页,基于写时复制模式恢复执行事务。
步骤906:获取所述源数据库节点在所述快照操作后执行的写操作对应的修改内容。
步骤908:利用所述修改内容进行逻辑回放,使所述源数据库节点在确定所述目的数据库节点的所述逻辑回放成功完成的情况下,提交所述修改内容对应的事务。
上述为本实施例的应用于目的数据库节点的数据库迁移方法的示意性方案。需要说明的是,该应用于目的数据库节点的数据库迁移方法的技术方案与前述任一实施例述的数据库迁移方法的技术方案属于同一构思,应用于目的数据库节点的数据库迁移方法的技术方案未详细描述的细节内容,均可以参见前述数据库迁移方法的技术方案的描述。
与上述方法实施例相对应,本说明书还提供了配置于目的数据库节点的数据库迁移装置实施例,图10示出了本说明书一个实施例提供的配置于目的数据库节点的数据库迁移装置的结构示意图。如图10所示,该装置包括:
接收模块1002,被配置为接收事务,所述事务,是源数据库节点进行快照操作,得到数据库快照页后,路由到所述目的数据库节点的事务,所述目的数据库节点与所述源数据库节点是基于共享存储区保存数据库数据的数据库实例。
第二事务执行模块1004,被配置为利用所述数据库快照页基于写时复制模式执行接收的事务,所述数据库快照页,还用于使所述源数据库节点利用所述数据库快照页,基于写时复制模式恢复执行事务。
修改获取模块1006,被配置为获取所述源数据库节点在所述快照操作后执行的写操作对应的修改内容;
逻辑回放模块1008,被配置为利用所述修改内容进行逻辑回放,使所述源数据库节点在确定所述目的数据库节点的所述逻辑回放成功完成的情况下,提交所述修改内容对应的事务。
上述为本实施例的配置于目的数据库节点的数据库迁移装置的示意性方案。需要说明的是,该配置于目的数据库节点的数据库迁移装置的技术方案与前述任一实施例述的数据库迁移方法的技术方案属于同一构思,配置于目的数据库节点的数据库迁移装置的技术方案未详细描述的细节内容,均可以参见前述数据库迁移方法的技术方案的描述。
与上述方法实施例相对应,本说明书还提供了数据库迁移系统。图11示出了本说明书一个实施例提供的数据库迁移协调的结构示意图。如图11所示,该系统包括:
如本说明书任一实施例所述数据库迁移方法实现的源数据数据库节点1102,以及,如本说明书任一实施例所述数据库迁移方法实现的目的数据库节点1104。
图12示出了根据本说明书一个实施例提供的一种计算设备1200的结构框图。该计算设备1200的部件包括但不限于存储器1210和处理器1220。处理器1220与存储器1210通过总线1230相连接,数据库1250用于保存数据。
计算设备500还包括接入设备1240,接入设备1240使得计算设备1200能够经由一个或多个网络1260通信。这些网络的示例包括公用交换电话网(PSTN,Pub l ic SwitchedTe lephone Network)、局域网(LAN,Loca l Area Network)、广域网(WAN,Wide AreaNetwork)、个域网(PAN,Persona l Area Network)或诸如因特网的通信网络的组合。接入设备1240可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NI C,networkinterface contro l ler))中的一个或多个,诸如I EEE802.11无线局域网(WLAN,Wi reless Loca l Area Network)无线接口、全球微波互联接入(Wi-MAX,Wor ldwide Interoperabi l ity for Microwave Access)接口、以太网接口、通用串行总线(USB,Universa l Ser ia l Bus)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC,Near Fie ldCommun icat ion)。
在本说明书的一个实施例中,计算设备1200的上述部件以及图12中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图12所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
计算设备1200可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或个人计算机(PC,Persona l Computer)的静止计算设备。计算设备500还可以是移动式或静止式的服务器。
其中,处理器1220用于执行如下计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据库迁移系统中的源数据库节点和/或者目的数据库节点。
上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的数据库迁移系统的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述数据库迁移系统的技术方案的描述。
本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据库迁移方法的步骤。
上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的数据库迁移方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述数据库迁移方法的技术方案的描述。
本说明书一实施例还提供一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述数据库迁移方法的步骤。
上述为本实施例的一种计算机程序的示意性方案。需要说明的是,该计算机程序的技术方案与上述的数据库迁移方法的技术方案属于同一构思,计算机程序的技术方案未详细描述的细节内容,均可以参见上述数据库迁移方法的技术方案的描述。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-On ly Memory)、随机存取存储器(RAM,Random AccessMemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书实施例并不受所描述的动作顺序的限制,因为依据本说明书实施例,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书实施例所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书实施例的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书实施例的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。
Claims (13)
1.一种数据库迁移方法,包括:
源数据库节点挂起正在执行的事务,进行快照操作,得到数据库快照页;
完成所述快照操作后,所述源数据库节点利用所述数据库快照页,基于写时复制模式恢复执行事务;
将所述快照操作之后接收的事务路由到目的数据库节点,所述目的数据库节点与所述源数据库节点是基于共享存储区保存数据库数据的数据库实例;
所述目的数据库节点利用所述数据库快照页,基于写时复制模式执行接收的事务;
所述源数据库节点将修改内容发送给所述目的数据库节点,使所述目的数据库节点利用所述修改内容进行逻辑回放,所述修改内容是所述源数据库节点在快照操作后执行的写操作对应的修改内容;
所述源数据库节点在确定所述目的数据库节点的所述逻辑回放成功完成的情况下,提交所述修改内容对应的事务;
所述目的数据库节点利用所述修改内容进行逻辑回放,包括:
所述目的数据库节点针对所述修改内容所属事务启动对应的影子事务,所述影子事务中包括:对所述修改内容相关的数据库快照页的读操作、对所述读操作读取出的数据进行写冲突检测、锁冲突检测和约束条件检查的操作、以及在所述写冲突检测、锁冲突检测和约束条件检查均通过的情况下,利用所述修改内容进行逻辑回放的操作,其中,所述读操作采用与所述修改内容所属事务相同的快照时间戳进行数据库快照页的读取;
如果所述写冲突检测、锁冲突检测和约束条件检查中任一项未通过,所述目的数据库节点中止所述影子事务的执行;
如果所述影子事务成功完成所述逻辑回放的操作,所述目的数据库节点为所述影子事务分配提交时间戳,提交所述影子事务,并将所述提交时间戳发送给所述源数据库节点,使所述源数据库节点使用所述提交时间戳提交对应的事务;
如果所述影子事务的逻辑回放失败或被中止,所述目的数据库节点向所述源数据库节点返回失败信息,使所述源数据库节点回滚对应的事务。
2.根据权利要求1所述的方法,还包括:
所述源数据库节点在挂起事务之后,恢复执行事务之前,所述源数据库节点将内存中的数据库日志写到所述共享存储区;
所述源数据库节点将恢复执行事务之后执行的写操作对应的修改内容记录到写时复制日志;
所述目的数据库节点将执行的写操作对应的修改内容记录到所述共享存储区中的所述数据库日志;
所述源数据库节点将修改内容发送给所述目的数据库节点,包括:
所述源数据库节点读取所述写时复制日志,解析出所述写时复制日志中各条日志项的修改内容发送给所述目的数据库节点。
3.根据权利要求1所述的方法,在所述源数据库节点挂起正在执行的事务,进行快照操作之前,还包括:
所述源数据库节点判断是否存在正在执行的原子修改操作;
如果存在正在执行的原子修改操作,等待所述原子修改操作完成,进入所述源数据库节点挂起正在执行的事务的步骤;
如果不存在正在执行的原子修改操作,进入所述源数据库节点挂起正在执行的事务的步骤。
4.根据权利要求1所述的方法,还包括:
完成所述快照操作后,所述源数据库节点执行刷脏操作,所述刷脏操作使所述源数据库的脏数据下刷到所述共享存储区;
在所述源数据库节点完成所述刷脏操作后,所述目的数据库节点执行第一次刷脏操作。
5.根据权利要求1所述的方法,所述源数据库节点利用所述数据库快照页,基于写时复制模式恢复执行事务,包括:
如果所述源数据库节点恢复执行的事务的写操作是所述快照操作之后对第一数据库文件的首次写操作,为所述第一数据库文件创建对应的第一写时复制文件,所述第一数据库文件是所述源数据库节点的数据库文件;
如果所述源数据库节点恢复执行的事务的写操作是对第一数据库快照页的首次写操作,在所述第一写时复制文件中创建对应的第一写时复制文件页,将所述第一数据库快照页的数据复制到所述第一写时复制文件页,所述源数据库节点在所述第一写时复制文件中,执行写操作,所述第一数据库快照页是一个或多个所述数据库快照页;
如果所述源数据库节点恢复执行的事务的写操作是对第一数据库快照页的非首次的写操作,所述源数据库节点在所述第一写时复制文件中执行写操作;
所述目的数据库节点利用所述数据库快照页,基于写时复制模式执行接收的事务,包括:
如果所述目的数据库节点要执行的事务的写操作是对第二数据库文件的首次写操作,为所述第二数据库文件创建对应的第二写时复制文件,所述第二数据库文件是所述目的数据库节点的数据库文件;
如果所述目的数据库节点要执行的事务的写操作是对第二数据库快照页的首次写操作,在所述第二写时复制文件中创建对应的第二写时复制文件页,将所述第二数据库快照页的数据复制到所述第二写时复制文件页,所述第二数据库快照页是一个或多个所述数据库快照页,所述目的数据库节点在所述第二写时复制文件中,执行写操作;
如果所述目的数据库节点要执行的事务的写操作是对第二数据库快照页的非首次的写操作,所述目的数据库节点在所述第二写时复制文件中,执行写操作;
所述方法还包括:
在所述源数据库节点创建所述第一写时复制文件页后,将所述第一写时复制文件页对应的第一数据库快照页写回所述共享存储区,将所述第一写时复制文件页写入本地缓存池;
在所述目的数据库节点创建所述第二写时复制文件页后,将所述第二写时复制文件页对应的第二数据库快照页删除,将所述第二写时复制文件页写入本地缓存池。
6.根据权利要求1所述的方法,还包括:
所述源数据库节点基于写时复制模式,通过复制事务状态维护文件中的相关数据页,在第三写时复制文件中执行对事务状态信息的修改,所述事务状态维护文件用于维护事务状态信息,所述事务状态维护文件存储于所述共享存储区;
所述目的数据库节点基于写时复制模式,通过复制事务状态维护文件中的相关数据页,在第四写时复制文件中执行对事务状态信息的修改。
7.根据权利要求1所述的方法,还包括:
所述源数据库节点在所述快照操作开始之后,将下一可用的事务唯一标识符以及事务全局变量信息发送给所述目的数据库节点,使所述目的数据库节点对可用的事务唯一标识符以及事务全局变量信息进行维护;
当所述源数据库节点需要可用的事务唯一标识符时,所述目的数据库节点分配可用的事务唯一标识符给所述源数据库节点;
所述将所述快照操作之后接收的事务路由到目的数据库节点,包括:
代理服务器将在所述源数据库节点执行快照操作过程中接收到的事务挂起;
当所述源数据库节点执行快照操作结束时,所述代理服务器为挂起的事务分配开始时间戳;
所述代理服务器将分配了开始时间戳的事务路由到所述目的数据库节点。
8.根据权利要求1所述的方法,还包括:
所述目的数据库节点在基于多版本事务并发控制机制进行内存空间回收时,如果待回收版本的数据库快照页当前处于被所述源数据库节点的事务使用中,则放弃对所述待回收版本的数据库快照页的回收。
9.一种数据库迁移方法,应用于源数据库节点,包括:
挂起正在执行的事务,进行快照操作,得到数据库快照页;
完成所述快照操作后,利用所述数据库快照页基于写时复制模式恢复执行事务,所述快照操作,用于使所述快照操作之后接收的事务路由到目的数据库节点;
其中,所述数据库快照页,还用于使目的数据库节点接收事务后,利用所述数据库快照页基于写时复制模式执行接收的事务,所述目的数据库节点与所述源数据库节点是基于共享存储区保存数据库数据的数据库实例;
将所述快照操作后执行的写操作的修改内容发送给所述目的数据库节点,使所述目的数据库节点利用所述修改内容进行逻辑回放;
在确定所述目的数据库节点的逻辑回放成功完成的情况下,提交所述修改内容对应的事务;
所述目的数据库节点利用所述修改内容进行逻辑回放,包括:
所述目的数据库节点针对所述修改内容所属事务启动对应的影子事务,所述影子事务中包括:对所述修改内容相关的数据库快照页的读操作、对所述读操作读取出的数据进行写冲突检测、锁冲突检测和约束条件检查的操作、以及在所述写冲突检测、锁冲突检测和约束条件检查均通过的情况下,利用所述修改内容进行逻辑回放的操作,其中,所述读操作采用与所述修改内容所属事务相同的快照时间戳进行数据库快照页的读取;
如果所述写冲突检测、锁冲突检测和约束条件检查中任一项未通过,所述目的数据库节点中止所述影子事务的执行;
如果所述影子事务成功完成所述逻辑回放的操作,所述目的数据库节点为所述影子事务分配提交时间戳,提交所述影子事务,并将所述提交时间戳发送给所述源数据库节点,使所述源数据库节点使用所述提交时间戳提交对应的事务;
如果所述影子事务的逻辑回放失败或被中止,所述目的数据库节点向所述源数据库节点返回失败信息,使所述源数据库节点回滚对应的事务。
10.一种数据库迁移方法,应用于目的数据库节点,包括:
接收事务,所述事务,是源数据库节点进行快照操作,得到数据库快照页后,路由到所述目的数据库节点的事务,所述目的数据库节点与所述源数据库节点是基于共享存储区保存数据库数据的数据库实例;
利用所述数据库快照页基于写时复制模式执行接收的事务,所述数据库快照页,还用于使所述源数据库节点利用所述数据库快照页,基于写时复制模式恢复执行事务;
获取所述源数据库节点在所述快照操作后执行的写操作对应的修改内容;
利用所述修改内容进行逻辑回放,使所述源数据库节点在确定所述目的数据库节点的所述逻辑回放成功完成的情况下,提交所述修改内容对应的事务;
所述目的数据库节点利用所述修改内容进行逻辑回放,包括:
所述目的数据库节点针对所述修改内容所属事务启动对应的影子事务,所述影子事务中包括:对所述修改内容相关的数据库快照页的读操作、对所述读操作读取出的数据进行写冲突检测、锁冲突检测和约束条件检查的操作、以及在所述写冲突检测、锁冲突检测和约束条件检查均通过的情况下,利用所述修改内容进行逻辑回放的操作,其中,所述读操作采用与所述修改内容所属事务相同的快照时间戳进行数据库快照页的读取;
如果所述写冲突检测、锁冲突检测和约束条件检查中任一项未通过,所述目的数据库节点中止所述影子事务的执行;
如果所述影子事务成功完成所述逻辑回放的操作,所述目的数据库节点为所述影子事务分配提交时间戳,提交所述影子事务,并将所述提交时间戳发送给所述源数据库节点,使所述源数据库节点使用所述提交时间戳提交对应的事务;
如果所述影子事务的逻辑回放失败或被中止,所述目的数据库节点向所述源数据库节点返回失败信息,使所述源数据库节点回滚对应的事务。
11.一种数据库迁移系统,包括:如权利要求1-10任一项所述数据库迁移方法实现的源数据库节点,以及,如权利要求1-10任一项所述数据库迁移方法实现的目的数据库节点。
12.一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现权利要求11所述数据库迁移系统中的源数据库节点和/或者目的数据库节点。
13.一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现权利要求1至10任意一项所述数据库迁移方法的步骤。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202310127731.1A CN116303346B (zh) | 2023-02-01 | 2023-02-01 | 数据库迁移方法以及系统 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN202310127731.1A CN116303346B (zh) | 2023-02-01 | 2023-02-01 | 数据库迁移方法以及系统 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN116303346A CN116303346A (zh) | 2023-06-23 |
| CN116303346B true CN116303346B (zh) | 2025-08-26 |
Family
ID=86829714
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202310127731.1A Active CN116303346B (zh) | 2023-02-01 | 2023-02-01 | 数据库迁移方法以及系统 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN116303346B (zh) |
Families Citing this family (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN116737696B (zh) * | 2023-07-05 | 2026-02-03 | 深圳证券信息有限公司 | 一种数据迁移方法及相关设备 |
| CN118885497B (zh) * | 2024-09-30 | 2024-12-13 | 平凯星辰(北京)科技有限公司 | 数据处理方法、装置、电子设备、存储介质及程序产品 |
| CN119248717A (zh) * | 2024-12-04 | 2025-01-03 | 京东科技信息技术有限公司 | 数据库系统和数据库系统管理方法 |
Citations (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN106294471A (zh) * | 2015-06-03 | 2017-01-04 | 中兴通讯股份有限公司 | 数据迁移处理方法及装置 |
| CN110019140A (zh) * | 2017-12-29 | 2019-07-16 | 华为技术有限公司 | 数据迁移方法、装置、设备以及计算机可读存储介质 |
Family Cites Families (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US9424261B2 (en) * | 2014-04-02 | 2016-08-23 | Oracle International Corporation | Techniques to take clean database file snapshot in an online database |
| CN113468135B (zh) * | 2021-09-01 | 2022-03-01 | 阿里云计算有限公司 | 数据迁移方法、系统、设备及产品 |
-
2023
- 2023-02-01 CN CN202310127731.1A patent/CN116303346B/zh active Active
Patent Citations (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN106294471A (zh) * | 2015-06-03 | 2017-01-04 | 中兴通讯股份有限公司 | 数据迁移处理方法及装置 |
| CN110019140A (zh) * | 2017-12-29 | 2019-07-16 | 华为技术有限公司 | 数据迁移方法、装置、设备以及计算机可读存储介质 |
Also Published As
| Publication number | Publication date |
|---|---|
| CN116303346A (zh) | 2023-06-23 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN116303346B (zh) | 数据库迁移方法以及系统 | |
| JP7271670B2 (ja) | データレプリケーション方法、装置、コンピュータ機器及びコンピュータプログラム | |
| JP7795303B2 (ja) | 2フェーズコミット分散トランザクションを使用することによってデータベースを更新するための方法および装置 | |
| EP3401804B1 (en) | Adaptive query routing in a replicated database environment | |
| CN109739935B (zh) | 数据读取方法、装置、电子设备以及存储介质 | |
| CN106991113B (zh) | 数据库环境中的表格复制 | |
| CN111797121B (zh) | 读写分离架构业务系统的强一致性查询方法、装置及系统 | |
| CN111078121B (zh) | 一种分布式存储系统数据迁移方法、系统、及相关组件 | |
| CN115668141B (zh) | 使用时间戳对网络中的事务进行分布式处理 | |
| US8977898B1 (en) | Concurrent access to data during replay of a transaction log | |
| US9922075B2 (en) | Scalable distributed transaction processing system | |
| CN111078667B (zh) | 一种数据迁移的方法以及相关装置 | |
| US20150213100A1 (en) | Data synchronization method and system | |
| US20190108166A1 (en) | Replicable differential store data structure | |
| CN111190935A (zh) | 数据读取方法、装置、计算机设备及存储介质 | |
| JPH0887511A (ja) | B木インデクスの管理方法およびシステム | |
| CN115292407A (zh) | 同步方法、设备及存储介质 | |
| CN110807062A (zh) | 一种数据同步的方法、装置和数据库主机 | |
| WO2025189868A1 (zh) | 一种支持多副本一致性读的分布式数据库查询系统、方法、设备及介质 | |
| CN118035255A (zh) | 存算分离数据库的非侵入式日志下推方法 | |
| CN115617571A (zh) | 一种数据备份方法、装置、系统、设备及存储介质 | |
| CN110196788B (zh) | 一种数据读取方法、装置、系统及存储介质 | |
| CN114595224A (zh) | 数据存储方法及装置、数据查询方法及装置 | |
| US12066999B1 (en) | Lock-free timestamp ordering for distributed transactions | |
| US12130834B1 (en) | Distributed appending of transactions in data lakes |
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 | ||
| GR01 | Patent grant | ||
| GR01 | Patent grant |