CN108932282A - 一种数据库迁移方法、装置和存储介质 - Google Patents
一种数据库迁移方法、装置和存储介质 Download PDFInfo
- Publication number
- CN108932282A CN108932282A CN201810483355.9A CN201810483355A CN108932282A CN 108932282 A CN108932282 A CN 108932282A CN 201810483355 A CN201810483355 A CN 201810483355A CN 108932282 A CN108932282 A CN 108932282A
- Authority
- CN
- China
- Prior art keywords
- data
- database
- log
- type
- change
- 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.)
- Granted
Links
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据库迁移方法、装置和存储介质,用以在数据库迁移过程时,减少对数据库正常访问操作的影响。数据库迁移方法,包括:获取数据库操作日志数据的第一位点信息;缓存针对源数据库操作的日志变更数据;针对待迁移的数据库表,从源数据库中查询所述待迁移的数据库表,并在目标数据库中重放所述待迁移的数据库表;并根据缓存的日志变更数据,在所述目标数据库中重放所述日志变更数据,直至重放的日志变更数据对应的第二位点信息不小于所述第一位点信息。
Description
技术领域
本发明涉及数据库技术领域,尤其涉及一种数据库迁移方法、装置和存储介质。
背景技术
本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
在数据库的使用过程中,经常需要进行数据迁移,其原因可能是服务器资源不足、网络隔离、数据容灾等等。例如需要给数据库增加一个只读实例,在其他机房建立一个数据库的备份,将数据库迁移上云等。在迁移的过程中,需要对在线的数据库影响尽可能的小,从而控制对正在进行数据库读写的上层业务的影响尽可能的小。
在数据库迁移过程中,为了保证数据库迁移前后被迁移的数据表的一致性,需要在数据库导出过程中对被迁移的数据表加锁,避免数据库操作者对其进行修改、删除、增加等。数据表加锁对于业务读写访问量都很小的数据库影响较小,因为这些操作很快就可以执行完。但对于业务读写访问量都很大的场景,锁操作的影响时间就可能非常长,在锁定的这段时间内,数据库基本不可用,不能执行任何写操作,甚至不能执行读操作。
由此可见,如何在数据库迁移的同时,尽可能的减少对数据库正常访问操作的影响,成为现有技术中亟待解决的技术问题之一。
发明内容
本发明实施例提供一种数据库迁移方法、装置和存储介质,用以在数据库迁移过程时,减少对数据库正常访问操作的影响。
一种数据库迁移方法,包括:
获取数据库操作日志数据的第一位点信息;
缓存针对源数据库操作的日志变更数据;
针对待迁移的数据库表,从源数据库中查询所述待迁移的数据库表,并分别在目标数据库中重放所述待迁移的数据库表;
根据缓存的日志变更数据,在所述目标数据库中重放所述日志变更数据,直至重放的日志变更数据对应的第二位点信息不小于所述第一位点信息。
可选地,针对待迁移的数据库表,从源数据库中查询所述待迁移的数据库表,并在目标数据库中重放所述待迁移的数据库表,具体包括:
针对待迁移的数据库表,在源数据库中查询所述待迁移的数据库表的建表语句;
在所述目标数据库中重放查询到的建表语句;
针对待迁移的数据库表,执行以下操作:根据所述待迁移的数据库表的唯一主键将该数据库表划分为若干个数据块;针对划分得到的数据块,开启一个事物,对所述数据块加锁并拷贝到目标数据库中后解锁,提交所述事物,直至拷贝完成该数据库表包含的所有数据块。
可选地,所述日志变更数据包括数据变更类型;
根据缓存的日志变更数据,在所述目标数据库中重放所述日志变更数据,具体包括:
根据缓存的日志变更数据对应的数据变更类型,在所述目标数据库中重放所述日志变更数据。
可选地,所述数据变更类型包括插入类型、更新类型和删除类型;以及
根据缓存的日志变更数据对应的数据变更类型,在所述目标数据库中重放所述日志变更数据,具体包括:
针对数据变更类型为插入类型的日志变更数据,将所述日志变更数据转换为插入类型对应的第一类型操作语句,以在所述目标数据库中重放所述日志变更数据;
针对数据变更类型为更新类型的日志变更数据,将所述日志变更数据转换为更新类型对应的第二类型操作语句,以在所述目标数据库中重放所述日志变更数据;
针对数据变更类型为删除类型的日志变更数据,将所述日志变更数据转换为删除类型对应的第三类型操作语句,以在所述目标数据库中重放所述日志变更数据。
可选地,本发明实施例提供的数据库迁移方法,还包括:
针对日志变换数据为数据库表的唯一主键且数据变更类型为更新类型的日志变更数据,将所述日志变更数据转换为变更类型对应的第四操作类型语句和第五操作类型语句,以在所述目标数据库中重放所述日志变更数据。
可选地,在针对待迁移的数据库表,从源数据库中查询所述待迁移的数据库表之前,还包括:
设置源数据库的连接隔离级别为可重复读。
可选地,在数据库表迁移过程中缓存针对源数据库操作的日志变更数据,具体包括:
在数据库表迁移过程中,筛选出针对待迁移的数据库表操作的日志数据并缓存。
可选地,在重放的日志变更数据对应的第二位点信息大于等于所述第一位点信息之后,还包括:
根据缓存的日志变更数据,继续在所述目标数据库中重放所述日志变更数据,直至缓存的日志变更数据的数据量不大于预设的数据量阈值。
一种数据库迁移装置,包括:
获取单元,用于获取数据库操作日志数据的第一位点信息;
缓存单元,用于在所述获取单元获取所述第一位点信息之后,缓存针对源数据库操作的日志变更数据;
第一重放单元,用于针对待迁移的数据库表,从源数据库中查询所述待迁移的数据库表,并分别在目标数据库中重放所述待迁移的数据库表;
获取单元,用于在所有待迁移的数据库表迁移完成之后,获取数据库操作日志数据的第一位点信息;
第二重放单元,用于根据缓存的日志变更数据,在所述目标数据库中重放所述日志变更数据,直至重放的日志变更数据对应的第二位点信息不小于所述第一位点信息。
可选地,所述第一重放单元,包括:
查询子单元,用于针对待迁移的数据库表,在源数据库中查询所述待迁移的数据库表的建表语句;
重放子单元,用于在所述目标数据库中重放查询到的建表语句;
执行子单元,用于针对待迁移的数据库表,执行以下操作:根据所述待迁移的数据库表的唯一主键将该数据库表划分为若干个数据块;针对划分得到的数据块,开启一个事物,对所述数据块加锁并拷贝到目标数据库中并解锁,提交所述事物,直至拷贝完成该数据库表包含的所有数据块。
可选地,所述日志变更数据包括数据变更类型;
所述第二重放单元,具体用于根据缓存的日志变更数据对应的数据变更类型,在所述目标数据库中重放所述日志变更数据。
可选地,所述数据变更类型包括插入类型、更新类型和删除类型;以及
所述第二重放单元,具体用于针对数据变更类型为插入类型的日志变更数据,将所述日志变更数据转换为插入类型对应的第一类型操作语句,以在所述目标数据库中重放所述日志变更数据;针对数据变更类型为更新类型的日志变更数据,将所述日志变更数据转换为更新类型对应的第二类型操作语句,以在所述目标数据库中重放所述日志变更数据;针对数据变更类型为删除类型的日志变更数据,将所述日志变更数据转换为删除类型对应的第三类型操作语句,以在所述目标数据库中重放所述日志变更数据。
可选地,所述第二重放单元,还用于针对日志变换数据为数据库表的唯一主键且数据变更类型为更新类型的日志变更数据,将所述日志变更数据转换为变更类型对应的第四操作类型语句和第五操作类型语句,以在所述目标数据库中重放所述日志变更数据。
可选地,所述数据库迁移装置,还包括:
设置单元,用于在所述第一重放单元针对待迁移的数据库表,从源数据库中查询所述待迁移的数据库表之前,设置源数据库的连接隔离级别为可重复读。
可选地,所述缓存单元,具体用于在数据库表迁移过程中,筛选出针对待迁移的数据库表操作的日志数据并缓存。
可选地,所述第二重放单元,还用于在重放的日志变更数据对应的第二位点信息大于等于所述第一位点信息之后,根据缓存的日志变更数据,继续在所述目标数据库中重放所述日志变更数据,直至缓存的日志变更数据的数据量不大于预设的数据量阈值。
一种计算装置,包括至少一个处理器、以及至少一个存储器,其中,所述存储器存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行上述任一数据库迁移方法所述的步骤。
一种计算机可读介质,其存储有可由计算设备执行的计算机程序,当所述程序在计算设备上运行时,使得所述计算设备执行上述任一数据库迁移方法所述的步骤。
本发明实施例提供的数据库迁移方法、装置和存储介质,以数据表为迁移单位分别进行迁移,并在数据库表迁移之前获取数据库操作日志数据的位点信息,并开始缓存迁移过程中缓存迁移期间的日志变更数据,在迁移完成后根据缓存的日志变更数据和记录的位点信息在目标数据库中重放日志变更数据,由此来保证源数据库和目标数据库的数据一致性,上述过程中,由于无需对源数据库进行备份,从而无需进行全局加锁,从而降低了数据库迁移过程对数据库业务操作的影响。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为现有的备份工具mydumper原理示意图;
图2a为根据本发明实施例方式的应用场景示意图;
图2b为根据本发明实施方式的硬件拓扑结构示意图;
图3为根据本发明实施方式的数据库迁移方法的实施流程示意图;
图4为根据本发明实施方式的数据迁移流程示意图;
图5为根据本发明实施方式的数据库迁移原理示意图;
图6为根据本发明另一实施方式的数据库迁移方法的实施流程示意图;
图7为根据本发明实施方式的数据库迁移过程中数据操作状态示意图;
图8为根据本发明实施方式的数据库迁移装置的结构示意图;
图9为根据本发明实施方式的计算装置的结构示意图。
具体实施方式
为降低数据库迁移对数据库业务操作的影响,本发明实施例提供了一种数据库迁移方法、装置和存储介质。
首先,对本发明实施例中涉及的部分用语进行说明,以便于本领域技术人员理解。
CDB:云数据库(Cloud DataBase),一种关系型数据库云服务。
DTS:数据传输服务(Data Transmission Service),是一种支持RDBMS(关系型数据库)等多种异构数据源之间数据交互的数据服务。它提供了数据迁移、实时数据订阅及数据实时同步等多种数据传输能力。
Binlog:MySQL的二进制日志。
DML:数据操作语言(Data Manipulation Language),是SQL语言集中,负责对数据库对象运行数据访问工作的指令集。
FTWRL:MySQL全局读锁(Flush Table With Read Lock),是MySQL中支持锁类型的一种。
Replication协议:MySQL数据库支持的一个数据库到另外一个数据库同步变更的协议。
InnoDB:是MySQL的数据库引擎之一,为MySQL AB发布binary的标准之一。
Schema:为数据库对象的集合,一个用户一般对应一个schema。
重放(Replay):是指将针对源数据库的操作,在目标数据库再执行一次。
事物:是指作为单个逻辑单元执行的一系列操作,要么完全第执行,要么完全的不执行。
需要说明的是,在本文中提及的“多个或者若干个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
另外,本发明实施例中的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。
以下结合说明书附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明,并且在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
数据库迁移为在线迁移数据库,因此,有两部分数据需要考虑,相对于某个时间点来说,一部分是在该时间点数据库中已存在的数据,称为存量数据,另一部分时从该时间点之后新增的数据,称为增量数据。在线迁移数据库的关键问题在于,在读取并导入存量数据到新数据库的过程中,新的数据在不断写入,如在保证迁移数据的一致性。
如图1所示,其为利用备份工具mydumper执行数据库迁移的原理示意图,其中,主库(Master,本发明实施例中亦称为源数据库)执行数据库迁移的流程可以包括以下步骤:
步骤S11、连接到MySQL。
步骤S12、执行FLUSH TABLES WITH READ LOCK命令。
FLUSH TABLES WITH READ LOCK简称(FTWRL),该命令主要用于备份工具获取一致性备份(数据与二进制日志位点匹配)。
步骤S13、执行Record binlog coordinates。
本步骤中,即记录二进制日志数据的一致性位点信息。
步骤S14、执行start transaction with consistency snapshot。
本步骤中,启动一个一致性位点的读取。
步骤S15、创建执行备份任务的工作线程。
步骤S16、将待备份表加入到InnoDB和非InnoDB表的链表中。
步骤S17、为每个非InnoDB表创建一个或多个NON_InnoDB任务,加入备份任务列表。
步骤S18、为每个InnoDB表创建一个或多个InnoDB任务,加入备份任务列表。
步骤S19、为每个数据表创建SCHEMA任务,加入备份任务表。
步骤S110、解锁。
对于从库(Slave,本发明实施例中亦称为目标数据库)来说,其可以按照以下步骤执行数据迁移流程:
步骤S21、连接到MySQL。
步骤S22、执行start transaction with consistency snapshot。
步骤S23、执行NON_InnoDB备份任务。
步骤S24、执行InnoDB备份任务。
步骤S25、执行SCHEMA任务。
根据图1可知,现有的数据库迁移流程主要包括以下步骤:
1)使用mysql,或者mydumper等备份工具,导出数据库已存在的数据作为备份数据,记录备份数据对应的二进制日志的一致性位点信息。
2)将备份数据导入目标数据库中。
3)使用备份数据的位点信息,利用MySQL的“change master to...”命令建立目标数据库与源数据库的主从同步(Replication)关系。
4)同步关系建立好之后,目标数据库会从位点开始重放(Replay log)在Master执行的变更,在追上源数据库的所有数据之后,会一直保持同步,之后在源数据库上的所有数据变更也会同步到目标数据库上。
5)业务将数据库访问从源数据库切换到目标数据库上。
需要说明的是,此步骤对某些应用场景是非必须的。
6)断开源数据库和目标数据库之间的同步关系,至此在线迁移完成。
上述流程中,在导出备份的过程会对数据库加FTWRL(Flush Table With ReadLock)锁,这个锁对数据库进行的操作包括:
1)让数据库的查询缓存失效;
2)等待所有正在进行的数据库更新操作完成,同时阻止新的更新操作;
3)关闭所有打开的数据表,清空表缓存,等待所有的查询操作结束;
4)阻止任何事务的提交操作。
做这些操作的根本目的,就是得到一个二进制日志的一致性位点。一致性位点是现有的数据库迁移方法的核心,基于这个位点,可以简单的将存量数据和增量数据区分开来,尽管数据库无时无刻不在持续的进行读写操作。
为了得到一致性位点就必须加锁,这个锁对于业务读写访问量都很小的数据库影响较小,因为这些操作很快就可以执行完。但对于业务读写访问量都很大的场景,锁操作的影响时间就可能非常长,在锁定的这段时间内,数据库基本不可用,不能执行任何写操作,甚至不能执行读操作。
有鉴于此,本发明实施例提供了一种基于数据库表的迁移方法,无需对数据库进行全局加锁,由于数据库表迁移时间远远小于整个数据库的迁移时间,因此,加锁时长大大减少,从而降低了数据库迁移操作对数据库业务操作的影响。
如图2a所示,其为本发明实施例提供的数据库迁移方法的应用场景示意图。首先获取数据库操作日志数据中的第一位点信息,并开始缓存针对源数据库的日志变更数据,在启动数据迁移操作之后,以数据库表为单位将待迁移的数据库表分别迁移到目标数据库(Slave)中,在待迁移的数据库表迁移完成之后,根据缓存的日志变更数据和记录的第一位点信息,在目标数据库中重放日志变更数据直至重放的日志变更数据对应的第二位点信息不小于上述的第一位点信息,之后继续重放日志变更数据,一直到缓存的日志变更数据的数据量不大于预设的数据量阈值。
如图2b所示,其为本发明实施例实施的硬件拓扑结构示意图。用户10通过终端设备11中安装的客户端登录云服务器12,其中,客户端可以为网页的浏览器,也可以为安装于终端设备,如手机,平板电脑等中的客户端。
终端设备11与云服务器12之间通过网络进行通信连接,该网络可以为局域网、广域网等。终端设备11可以为便携设备(例如:手机、平板、笔记本电脑等),也可以为个人电脑(PC,Personal Computer),云服务器12可以为任何能够提供互联网服务的设备。
其中,用户10利用终端设备11通过向云服务器12注册获得用户名,云服务器12在用户进行注册成功后存储用户名以及与用户10设置的用户密码作为认证信息,后续用户10利用终端设备11再次登录云服务器12时,云服务器12向客户端返回登录页面,用户在客户端显示的登录页面输入认证信息(即用户名和用户密码)并提交给云服务器12,云服务器12比较用户提交认证信息与自身在用户注册时存储的认证信息是否一致以确定是否允许用户登录。用户登录成功后,可以对数据库进行迁移操作。其中,用户可以通过CDB控制台提供的可视化界面进行数据库迁移操作。
需要说明的是,本发明实施例提供的数据库迁移方法是数据传输服务(DTS,DataTransmission Service)中数据迁移功能的技术基础,用户首先在CDB控制台上创建并配置好数据迁移任务,包括配置源数据库和目标数据库的信息,选择要迁移的数据库表以及其他迁移的对象(包括视图,存储过程,触发器等)。接着开始校验任务,主要验证源数据库和目标数据库是否能联通、版本是否符合要求、是否有冲突等,对于不满足的条件,提示用户进行修改,直到满足所有迁移的条件。在校验通过之后,便可以启动迁移流程,等待迁移任务的完成。在这个过程中,用户可以在控制台会实时的看到迁移进度,或者任何的异常提示。
本发明实施例提供的方法要求数据库表的引擎支持事务和MVCC(多版本并发控制),如MySQL支持的InnoDB、TokuDB引擎,并且待迁移的数据库表有唯一主键。
如果在迁移之前的校验任务中发现有不满足的条件,会提示用户做相应的修改以满足迁移条件。具体来说,如果待迁移的数据库表不支持事务,则提示用户将待迁移的数据库表的引擎修改为支持事务的引擎;如果待迁移的数据库表无唯一主键,则提示用户添加唯一主键。为了描述方便,本发明实施例中将待迁移的数据库称为源数据库,迁移的目标数据库称为目标数据库。
如图3所示,其为本发明实施例提供的数据库迁移方法的实施流程示意图,包括以下步骤:
S31、获取数据库操作日志数据的第一位点信息。
本步骤中,可以使用show master status语句获取此时Binlog的位点信息。
S32、缓存针对源数据库操作的日志变更数据。
本步骤中,可以用数据库原生支持的Replication协议接管源库的Binlog数据。
S33、针对待迁移的数据库表,从源数据库中查询所述待迁移的数据库表,并在目标数据库中重放所述待迁移的数据库表。
本步骤中,可以在源数据库上查询待迁移的数据表t1-tn所有的建表语句,并在目标数据库上重放这些建表语句,具体实施时,如果目标数据库上有某些重复数据库表,则删除原有的数据表之后再重新创建。
S34、根据缓存的日志变更数据,在所述目标数据库中重放所述日志变更数据,直至重放的日志变更数据对应的第二位点信息不小于所述第一位点信息。
上述过程中,以数据库表为单位进行迁移,这样,在迁移过程中只需要针对当前迁移的数据库表加锁,而无需全局加锁,从而降低了对数据库业务的影响。
具体实施时,为了进一步降低对数据库业务的影响,本发明实施例中,还可以进一步将表划分为若干个数据块,在执行数据迁移时,以数据块为单位进行迁移,基于此,可以按照图4所示的步骤执行数据迁移流程:
S41、针对待迁移的数据库表,在源数据库中查询待迁移的数据库表的建表语句。
S42、在目标数据库中重放查询到的建表语句。
S43、针对待迁移的数据库表,根据待迁移的数据库表的唯一主键将该数据库表划分为若干个数据块;针对划分得到的数据块,开启一个事物,对该数据块加锁并拷贝到目标数据库中后解锁,提交所述事物,直至拷贝完成该数据库表包含的所有数据块。
具体实施时,假设需要从源数据库迁移到目标数据库的待迁移的表有t1,t2,t3,……tn,一共n张表,n为大于等于1的整数,并且源数据库和目标数据库满足迁移条件,不存在冲突。
针对任一待迁移的数据库表tn,其中,n为大于等于1的整数,找到该数据表块的唯一主键,按照主键将该数据表划分为一个个的小数据块,例如,第1-1000条为一个数据块,第1000-1999条为一个数据库,即每1000条数据为一个数据块。对于任何一个小数据块,开启一个事物,即start transaction,使用select……in share mode的方式将该小数据块拷贝出来,使用insert ignore into……语法插入到目标数据库中,提交事物,重复上述步骤,直至该数据库表的所有小数据块都拷贝完成。
其中,select...in share mode语句是一种读取操作,可以对一小段数据加读锁,此时可以允许对这一段数据的其他读操作,但不允许写操作,在业务逻辑中也会经常使用,不会导致长时间的锁定。insert ignore语句表示,如果目标数据库中已经存在相同的记录,则忽略当前插入的新数据。
本发明实施例中,为了保证迁移前后源数据库和目标数据库的数据一致性,在数据库表迁移的过程中需要缓存针对数据库操作的日志变更数据,具体实施时,为了减少数据处理量,可以筛选出针对待迁移的数据库表操作的日志数据并缓存。本步骤中,可以用数据库原生支持的Replication协议接管数据库的Binlog数据,并过滤数据只将与待迁移的表相关的Binlog数据存放在消息队列中。
在所有待迁移的数据库表迁移完成后,根据缓存的日志变更数据中的数据变更类型,在目标数据库中重放日志变更数据。
对于缓存的日志变更数据,有三种类型,分别插入(INSERT)类型、更新(UPDATE)类型和删除(DELETE)类型。
针对数据变更类型为插入类型的日志变更数据,将日志变更数据转换为插入类型对应的第一类型操作语句,以在目标数据库中重放日志变更数据。具体地,针对数据变更类型为插入类型的日志变更数据,可以将其转换为replace into……语句,replace into语句表示插入替换数据,根据源数据库表中的主键,如果目标数据库已经存在数据,则用新数据替换,如果没有数据效果则和insert into语句一样,insert into语句表示插入数据,数据库会检查主键(Primary Key),如果出现重复会报错。
针对数据变更类型为更新类型的日志变更数据,将日志变更数据转换为更新类型对应的第二类型操作语句,以在目标数据库中重放日志变更数据。针对数据变更类型为更新类型的日志变更数据,可以将其转换为update set语句,update set语句用来修改数据看表中的数据,可以用新值更新原有数据库表行中的各列。
需要说明的是,针对日志变换数据为数据库表的唯一主键且数据变更类型为更新类型的日志变更数据,将日志变更数据转换为变更类型对应的第四操作类型语句和第五操作类型语句,以在目标数据库中重放日志变更数据。具体地,吐过日志变更数据涉及主键变更,则将日志变更数据转换为delete from语句和insert ignore into语句。
针对数据变更类型为删除类型的日志变更数据,将日志变更数据转换为删除类型对应的第三类型操作语句,以在目标数据库中重放日志变更数据。例如,针对数据变更类型为删除类型的日志变更数据,可以将其转换为delete from语句,delete from语句用于删除数据库表中的数据。
如图5所示,其为本发明实施例提供的数据库迁移原理示意图,其中,在源数据库一侧,可以按照以下步骤实施:
S501、连接到MySQL。
S502、获取此时的数据库操作日志数据的第一位点信息并记录。
S503、Streaming Binlog。
本步骤中,即缓存日志变更数据。
S504、查询所有待迁移表的建表语句。
S505、set session transaction isolation level repeatable read。
本步骤中,即将当前连接的隔离级别设置为可重复读(Repeatable Read),Repeatable Read是数据库常见的四种隔离级别中的一种,在此隔离级别下,事务中任意次的重复读操作得到的数据都是一样,无论此时读取的数据表是否有更新操作。
S506、对于任一待迁移的数据库表,选择该数据库表的唯一主键,根据主键将该数据库表划分为若干个数据块。
S507、针对每一个数据块,start transaction。
本步骤中,即针对每一个数据块,启动事物。
S508、用select……in share mode方式拷贝一个数据块。
S509、提交事物。
S510、重复执行步骤S507-步骤S509,直至当前操作数据库表完成迁移操作。
S511、针对每一待迁移的数据库表,执行步骤S505-步骤S509,直至完成所有待迁移的数据库表的迁移操作。
S512、根据记录的位点信息,待目标数据库根据该位点信息追到最新数据时迁移完成,并一直保持同步。
在目标数据库一侧,其可以按照如下步骤实施:
S521、写入数据库表结构到目标数据库。
S522、写入拷贝数据到目标数据库。
S523、一直重放日志变更数据,保持数据同步。
为了更好的理解本发明实施例,以下结合数据迁移的步骤对本发明实施例的具体实施过程进行说明,如图6所示,可以包括以下步骤:
S61、连接到源数据库。
S62、获取数据库操作日志数据的第一位点信息并记录。
本步骤中,可以使用show master status语句获取数据库操作日志数据的第一位点信息。
S63、缓存日志变更数据。
本步骤中,可以用数据库原生支持的Replication协议接管源数据库的Binlog数据,并过滤数据只将与待迁移的数据看表相关的Binlog数据存放在消息队列中。
S64、将当前连接的隔离级别设置为可重复读。
S65、在源数据库上查询所有待迁移的数据表的建表语句。
S66、在目标数据库上重放查询到的所有建表语句。
具体实施时,如果目标数据库上有某些重复的数据库表,则先删掉重复的数据库表之后再创建新的数据库表。
S67、设定n=1;
S68、对数据库表tn,查找该数据库表的唯一主键,按照主键将该数据库表划分为若干个小数据块。
S69、选择一个未迁移的数据块,开启一个事物。
S610、从源数据库中拷贝选择的数据块。
本步骤中,可以使用select……in share mode语句拷贝选择的数据库。其中,select……in share mode语句是一种读取操作,对一小段数据加读锁,此时可以允许对这一段数据的其他读操作,但不允许写操作,不会导致长时间的锁定,在拷贝完成后即可解锁。
S611、在目标数据库中重放选择的数据块。
本步骤中,可以使用insert into……语句将拷贝的数据块插入到目标中。
S612、提交事物。
S613、判断是否完成当前操作的待迁移数据库表的所有数据块的迁移操作,如果是,则执行步骤S614,否则,执行步骤S69。
S614、判断n是否等于N,如果是,执行步骤S616,否则,执行步骤S615。
其中,本步骤中N的值可以设定为待迁移的数据库表的数量。
S615、更新n=n+1,并执行步骤S68。
S616、读取缓存的日志变更数据。
S617、根据读取日志变更数据的数据变更类型,在目标数据库中重放该日志变更数据。
其中,如果读取的日志变更数据的数据变更类型为插入类型,则将其转换为replace into……语句,以在目标数据库中重放该日志变更数据。
如果读取的日志变更数据的数据变更类型为更新类型,则将其转换为update set语句以在目标数据库中重放该日志变更数据。
如果读取的日志变更数据为针对主键的变更数据,则将日志变更数据转换为delete from语句和insert ignore into语句,以在目标数据库中重放该日志变更数据。
如果读取的日志变更数据的数据变更类型为删除类型,则将其转换为deletefrom语句以在目标数据库中重放该日志变更数据。
S618、判断读取的日志变更数据对应的第二位点信息是否不小于第一位点信息,如果是,执行步骤S619,如果否,执行步骤S616。
S619、继续读取缓存的日志变更数据。
S620、判断缓存的日志变更数据的数据量是否小于预设的数据量阈值,如果是,流程结束,如果否,执行步骤S619。
本步骤中,需要继续重放日志变更数据,知道缓存的日志变更数据的数据量很小,例如,少于10个变更,此时,可以确定目标数据库和源数据库保持了同步,在线迁移数据流程结束。
如图7所示,在迁移过程中,对于任一个待迁移的数据库表的每一条数据来说,有可能存在如下三种操作:a、在源数据库上对老的数据块做变更,b、应用变更到目标数据库,c、从源数据库拷贝数据块到目标数据库。由于对于任何数据变更来说,必然是先在源数据库上产生变更,再在目标数据库上应用,因而a必然在b之前发生。因此,本发明实施例中只需要确定在任意操作组合下都能保证每一条数据的一致性,就能保证迁移后数据的一致性。
对于INSERT类型的变更来说,有三种可能的情况:
1)a=>b=>c,即先产生变更,再应用变更,然后拷贝插入数据。a+b先产生变更再应用变更之后,此时目标数据库上有最新的一行数据,此时再拷贝数据采用的是insertingore语句,如果目标数据库有这行数据,那么就不插入,此时执行c操作,由于唯一键的存在,拷贝数据会不被插入。三个操作之后,目标数据库有最新的数据,可以保证迁移前后数据的一致性。
2)a=>c=>b,即先产生变更,再拷贝插入数据,最后应用变更。操作a插入一条新的数据,接着c操作将新插入的数据拷贝并插入到目标数据库,此时目标数据库有最新的数据,最后执行b操作时,采用的是replace into操作,由于唯一键的存在,插入变更会替换目标数据库的数据,此时目标数据库中仍然有最新的数据,可以保证迁移前后数据的一致性。
3)c=>a=>b,即先拷贝插入数据,再产生变更,最后应用变更。此时先执行c操作,但由于变更还没发生,数据没有插入,此时什么也不会拷贝,接着操作a会插入新数据到源数据库,最后操作b会将插入变更应用到目标数据库,最后目标数据库里面的数据也是最新的,可以保证迁移前后数据的一致性。
对于UPDATE类型的变更来说,也有三种可能的情况:
1)a=>b=>c,即先产生变更,再应用变更,然后拷贝插入数据。操作a先变更数据,源数据库上的数据为最新的;此时操作b应用变更,如果此条数据为主键,那么先插入再删除这条数据,最后的目标数据库上的数据是最新的,如果此条数据变更的不是主键,那么执行update操作,不会将数据插入;此时操作c再拷贝数据,无论步骤b是否插入了数据,此时操作b拷贝的最新的数据,采用insert ignore都能保证操作结束后,目标数据库上的数据是最新的,可以保证迁移前后数据的一致性。
2)a=>c=>b,即先产生变更,再拷贝插入数据,最后应用变更。操作a先变更数据,源数据库上的数据为最新的;此时操作c再拷贝数据,将数据插入目标数据库,此时目标数据库上数据是最新的;最后操作b应用变更数据,执行update操作,数据仍然是最新的,可以保证迁移前后数据的一致性。
3)c=>a=>b,即拷贝插入数据,再先产生变更,最后应用变更。操作c拷贝源数据库上就的数据到目标数据库,此时目标数据库上是旧的数据;操作a变更数据,源数据库上的数据为最新的;最后操作b在目标数据库上应用变更之后,将老的数据更新为最新的数据,可以保证迁移前后数据的一致性。
对于DELETE类型的变更来说,有三种可能的情况:
1)a=>b=>c,即先产生变更,再应用变更,然后拷贝插入数据。操作a先变更数据,删除了源数据库上的数据;操作c在目标数据库上应用变更,什么都不做,此时目标数据库和源数据库都是最新的,都没有数据;最后操作c拷贝数据,什么都不会拷贝,因为操作a已经把数据删除了。最终的结果是目标数据库上最新的数据,可以保证迁移前后数据的一致性。
2)a=>c=>b,即先产生变更,再拷贝插入数据,最后应用变更。与1)中的情况类似,操作a删除了数据,操作b和c都是空操作,最后目的上仍然是空的,与源数据库一致,可以保证迁移前后数据的一致性。
3)c=>a=>b,即拷贝插入数据,再先产生变更,最后应用变更。操作c先将老数据从源数据库拷贝并插入到目标数据库;紧接着操作c删除了源数据库上的数据,此时源数据库上没有这一条数据了;最后执行操作b,在目标数据库上应用变更,删除了目标数据库上刚拷贝过来的老数据,目标数据库上也没有这一条数据了,此时也与源数据库的数据保持一致,可以保证迁移前后数据的一致性。
综上所述,任意一条数据,在不同的变更类型(INSERT、UPDATE、DELETE)的场景下,针对不同的操作顺序,最终源和目的都能保持数据的一致性。基于此,由于表中唯一键的存在,任意一张迁移表中的所有数据,都能在迁移后保证了数据的一致性,从而在迁移过程完成后,源数据库和目标数据库的数据是一致的。
本发明实施例提供的数据库迁移方法、装置和存储介质,以数据表为迁移单位分别进行迁移,在开始数据库表迁移操作之前获取数据库操作日志的位点信息,并在迁移过程中缓存迁移期间的日志变更数据,在迁移完成后根据缓存的日志变更数据和记录的位点信息在目标数据库中重放日志变更数据,由此来保证源数据库和目标数据库的数据一致性,上述过程中,由于无需对源数据库进行备份,从而无需进行全局加锁,从而降低了数据库迁移过程对数据库业务操作的影响。
基于同一发明构思,本发明实施例中还提供了一种数据迁移装置,由于上述装置解决问题的原理与数据迁移方法相似,因此上述装置的实施可以参见方法的实施,重复之处不再赘述。
如图8所示,其为本发明实施例提供的数据库迁移装置的结构示意图,包括:
获取单元81,用于获取数据库操作日志数据的第一位点信息;
缓存单元82,用于在所述获取单元81获取所述第一位点信息之后,开始缓存针对源数据库操作的日志变更数据;
第一重放单元83,用于针对待迁移的数据库表,从源数据库中查询待迁移的数据库表,并在目标数据库中重放所述待迁移的数据库表;
第二重放单元84,用于根据缓存的日志变更数据,在所述目标数据库中重放所述日志变更数据,直至重放的日志变更数据对应的第二位点信息不小于所述第一位点信息。
可选地,所述第一重放单元83,包括:
查询子单元,用于针对待迁移的数据库表,在源数据库中查询待迁移的数据库表的建表语句;
重放子单元,用于在所述目标数据库中重放查询到的建表语句;
执行子单元,用于针对待迁移的数据库表,执行以下操作:根据待迁移的数据库表的唯一主键将该数据库表划分为若干个数据块;针对划分得到的数据块,开启一个事物,对该数据块加锁并拷贝到目标数据库中并解锁,提交所述事物,直至拷贝完成该数据库表包含的所有数据块。
可选地,所述日志变更数据包括数据变更类型;
所述第二重放单元,具体用于根据缓存的日志变更数据对应的数据变更类型,在所述目标数据库中重放所述日志变更数据。
可选地,所述数据变更类型包括插入类型、更新类型和删除类型;以及
所述第二重放单元,具体用于针对数据变更类型为插入类型的日志变更数据,将所述日志变更数据转换为插入类型对应的第一类型操作语句,以在所述目标数据库中重放所述日志变更数据;针对数据变更类型为更新类型的日志变更数据,将所述日志变更数据转换为更新类型对应的第二类型操作语句,以在所述目标数据库中重放所述日志变更数据;针对数据变更类型为删除类型的日志变更数据,将所述日志变更数据转换为删除类型对应的第三类型操作语句,以在所述目标数据库中重放所述日志变更数据。
可选地,所述第二重放单元,还用于针对日志变换数据为数据库表的唯一主键且数据变更类型为更新类型的日志变更数据,将所述日志变更数据转换为变更类型对应的第四操作类型语句和第五操作类型语句,以在所述目标数据库中重放所述日志变更数据。
可选地,所述数据库迁移装置,还包括:
设置单元,用于在所述第一重放单元针对待迁移的数据库表,从源数据库中查询所述待迁移的数据库表之前,设置源数据库的连接隔离级别为可重复读。
可选地,所述缓存单元,具体用于在数据库表迁移过程中,筛选出针对待迁移的数据库表操作的日志数据并缓存。
可选地,所述第二重放单元,还用于在重放的日志变更数据对应的第二位点信息大于等于所述第一位点信息之后,根据缓存的日志变更数据,继续在所述目标数据库中重放所述日志变更数据,直至缓存的日志变更数据的数据量不大于预设的数据量阈值。
为了描述的方便,以上各部分按照功能划分为各模块(或单元)分别描述。当然,在实施本发明时可以把各模块(或单元)的功能在同一个或多个软件或硬件中实现。
在介绍了本发明示例性实施方式的数据库迁移方法和装置之后,接下来,介绍根据本发明的另一示例性实施方式的计算装置。
所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
在一些可能的实施方式中,根据本发明的计算装置可以至少包括至少一个处理器、以及至少一个存储器。其中,所述存储器存储有程序代码,当所述程序代码被所述处理器执行时,使得所述处理器执行本说明书上述描述的根据本发明各种示例性实施方式的数据迁移库迁移方法中的步骤。例如,所述处理器可以执行如图3中所示的步骤S31、获取数据库操作日志数据的第一位点信息,和步骤S32、缓存针对源数据库操作的日志变更数据,步骤S33、针对待迁移的数据库表,从源数据库中查询所述待迁移的数据库表,并分别在目标数据库中重放所述待迁移的数据库表;以及步骤S34、根据缓存的日志变更数据,在所述目标数据库中重放所述日志变更数据,直至重放的日志变更数据对应的第二位点信息不小于所述第一位点信息。
下面参照图9来描述根据本发明的这种实施方式的计算装置90。图9显示的计算装置90仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图9所示,计算装置90以通用计算设备的形式表现。计算装置90的组件可以包括但不限于:上述至少一个处理器91、上述至少一个存储器92、连接不同系统组件(包括存储器92和处理器91)的总线93。
总线93表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器、外围总线、处理器或者使用多种总线结构中的任意总线结构的局域总线。
存储器92可以包括易失性存储器形式的可读介质,例如随机存取存储器(RAM)921和/或高速缓存存储器922,还可以进一步包括只读存储器(ROM)923。
存储器92还可以包括具有一组(至少一个)程序模块924的程序/实用工具925,这样的程序模块924包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
计算装置90也可以与一个或多个外部设备94(例如键盘、指向设备等)通信,还可与一个或者多个使得用户能与计算装置90交互的设备通信,和/或与使得该计算装置90能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口95进行。并且,计算装置90还可以通过网络适配器96与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器96通过总线93与用于计算装置90的其它模块通信。应当理解,尽管图中未示出,可以结合计算装置90使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理器、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
在一些可能的实施方式中,本发明提供的数据库迁移方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在计算机设备上运行时,所述程序代码用于使所述计算机设备执行本说明书上述描述的根据本发明各种示例性实施方式的数据库迁移方法中的步骤,例如,所述计算机设备可以执行如图3中所示的步骤S31、获取数据库操作日志数据的第一位点信息,和步骤S32、缓存针对源数据库操作的日志变更数据,步骤S33、针对待迁移的数据库表,从源数据库中查询待迁移的数据库表,并分别在目标数据库中重放所述待迁移的数据库表;以及步骤S34、根据缓存的日志变更数据,在所述目标数据库中重放所述日志变更数据,直至重放的日志变更数据对应的第二位点信息不小于所述第一位点信息。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
本发明的实施方式的用于数据库迁移的程序产品可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在计算设备上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
应当注意,尽管在上文详细描述中提及了装置的若干单元或子单元,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。
此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (15)
1.一种数据库迁移方法,其特征在于,包括:
获取数据库操作日志数据的第一位点信息;
缓存针对源数据库操作的日志变更数据;
针对待迁移的数据库表,从源数据库中查询所述待迁移的数据库表,并在目标数据库中重放所述待迁移的数据库表;
根据缓存的日志变更数据,在所述目标数据库中重放所述日志变更数据,直至重放的日志变更数据对应的第二位点信息不小于所述第一位点信息。
2.如权利要求1所述的方法,其特征在于,针对待迁移的数据库表,从源数据库中查询所述待迁移的数据库表,并在目标数据库中重放所述待迁移的数据库表,具体包括:
针对待迁移的数据库表,在源数据库中查询所述待迁移的数据库表的建表语句;
在所述目标数据库中重放查询到的建表语句;
针对待迁移的数据库表,执行以下操作:根据所述待迁移的数据库表的唯一主键将该数据库表划分为若干个数据块;针对划分得到的数据块,开启一个事物,对所述数据块加锁并拷贝到目标数据库中后解锁,提交所述事物,直至拷贝完成数据库表包含的所有数据块。
3.如权利要求1或2所述的方法,其特征在于,所述日志变更数据包括数据变更类型;
根据缓存的日志变更数据,在所述目标数据库中重放所述日志变更数据,具体包括:
根据缓存的日志变更数据对应的数据变更类型,在所述目标数据库中重放所述日志变更数据。
4.如权利要求3所述的方法,其特征在于,所述数据变更类型包括插入类型、更新类型和删除类型;以及
根据缓存的日志变更数据对应的数据变更类型,在所述目标数据库中重放所述日志变更数据,具体包括:
针对数据变更类型为插入类型的日志变更数据,将所述日志变更数据转换为插入类型对应的第一类型操作语句,以在所述目标数据库中重放所述日志变更数据;
针对数据变更类型为更新类型的日志变更数据,将所述日志变更数据转换为更新类型对应的第二类型操作语句,以在所述目标数据库中重放所述日志变更数据;
针对数据变更类型为删除类型的日志变更数据,将所述日志变更数据转换为删除类型对应的第三类型操作语句,以在所述目标数据库中重放所述日志变更数据。
5.如权利要求4所述的方法,其特征在于,还包括:
针对日志变换数据为数据库表的唯一主键且数据变更类型为更新类型的日志变更数据,将所述日志变更数据转换为变更类型对应的第四操作类型语句和第五操作类型语句,以在所述目标数据库中重放所述日志变更数据。
6.如权利要求1或2所述的方法,其特征在于,在针对待迁移的数据库表,从源数据库中查询所述待迁移的数据库表之前,还包括:
设置源数据库的连接隔离级别为可重复读。
7.如权利要求1或2所述的方法,其特征在于,在数据库表迁移过程中缓存针对源数据库操作的日志变更数据,具体包括:
在数据库表迁移过程中,筛选出针对待迁移的数据库表操作的日志数据并缓存。
8.如权利要求1或2所述的方法,其特征在于,在重放的日志变更数据对应的第二位点信息大于等于所述第一位点信息之后,还包括:
根据缓存的日志变更数据,继续在所述目标数据库中重放所述日志变更数据,直至缓存的日志变更数据的数据量不大于预设的数据量阈值。
9.一种数据库迁移装置,其特征在于,包括:
获取单元,用于获取数据库操作日志数据的第一位点信息;
缓存单元,用于在所述获取单元获取所述第一位点信息之后,缓存针对源数据库操作的日志变更数据;
第一重放单元,用于针对待迁移的数据库表,从源数据库中查询所述待迁移的数据库表,并分别在目标数据库中重放所述待迁移的数据库表;
第二重放单元,用于根据缓存的日志变更数据,在所述目标数据库中重放所述日志变更数据,直至重放的日志变更数据对应的第二位点信息不小于所述第一位点信息。
10.如权利要求9所述的装置,其特征在于,所述第一重放单元,包括:
查询子单元,用于针对待迁移的数据库表,在源数据库中查询所述待迁移的数据库表的建表语句;
重放子单元,用于在所述目标数据库中重放查询到的建表语句;
执行子单元,用于针对待迁移的数据库表,执行以下操作:根据所述待迁移的数据库表的唯一主键将该数据库表划分为若干个数据块;针对划分得到的数据块,开启一个事物,对所述数据块加锁并拷贝到目标数据库中并解锁,提交所述事物,直至拷贝完成该数据库表包含的所有数据块。
11.如权利要求9或10所述的装置,其特征在于,所述日志变更数据包括数据变更类型;
所述第二重放单元,具体用于根据缓存的日志变更数据对应的数据变更类型,在所述目标数据库中重放所述日志变更数据。
12.如权利要求11所述的装置,其特征在于,所述数据变更类型包括插入类型、更新类型和删除类型;以及
所述第二重放单元,具体用于针对数据变更类型为插入类型的日志变更数据,将所述日志变更数据转换为插入类型对应的第一类型操作语句,以在所述目标数据库中重放所述日志变更数据;针对数据变更类型为更新类型的日志变更数据,将所述日志变更数据转换为更新类型对应的第二类型操作语句,以在所述目标数据库中重放所述日志变更数据;针对数据变更类型为删除类型的日志变更数据,将所述日志变更数据转换为删除类型对应的第三类型操作语句,以在所述目标数据库中重放所述日志变更数据。
13.如权利要求12所述的装置,其特征在于,
所述第二重放单元,还用于针对日志变换数据为数据库表的唯一主键且数据变更类型为更新类型的日志变更数据,将所述日志变更数据转换为变更类型对应的第四操作类型语句和第五操作类型语句,以在所述目标数据库中重放所述日志变更数据。
14.一种计算装置,其特征在于,包括至少一个处理器、以及至少一个存储器,其中,所述存储器存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行权利要求1~8任一权利要求所述方法的步骤。
15.一种计算机可读介质,其特征在于,其存储有可由计算设备执行的计算机程序,当所述程序在计算设备上运行时,使得所述计算设备执行权利要求1~8任一所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810483355.9A CN108932282B (zh) | 2018-05-18 | 2018-05-18 | 一种数据库迁移方法、装置和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810483355.9A CN108932282B (zh) | 2018-05-18 | 2018-05-18 | 一种数据库迁移方法、装置和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108932282A true CN108932282A (zh) | 2018-12-04 |
CN108932282B CN108932282B (zh) | 2023-04-18 |
Family
ID=64448904
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810483355.9A Active CN108932282B (zh) | 2018-05-18 | 2018-05-18 | 一种数据库迁移方法、装置和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108932282B (zh) |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109933632A (zh) * | 2019-04-04 | 2019-06-25 | 杭州数梦工场科技有限公司 | 一种数据库的数据迁移方法、装置及设备 |
CN110008200A (zh) * | 2019-04-04 | 2019-07-12 | 杭州数梦工场科技有限公司 | 一种数据库的数据迁移方法、装置及设备 |
CN110532241A (zh) * | 2019-07-18 | 2019-12-03 | 政采云有限公司 | 利用MySQL Binlog进行不停机数据迁移方法 |
CN111241068A (zh) * | 2020-01-14 | 2020-06-05 | 阿里巴巴集团控股有限公司 | 信息处理方法、装置及设备、计算机可读存储介质 |
CN111651464A (zh) * | 2020-04-15 | 2020-09-11 | 北京皮尔布莱尼软件有限公司 | 数据处理方法、系统及计算设备 |
CN111651117A (zh) * | 2020-04-24 | 2020-09-11 | 广东睿江云计算股份有限公司 | 一种存储数据迁移的方法及其装置 |
WO2020192290A1 (zh) * | 2019-03-26 | 2020-10-01 | 阿里巴巴集团控股有限公司 | 一种数据库迁移的方法、装置、设备及计算机可读介质 |
CN111931094A (zh) * | 2020-07-16 | 2020-11-13 | 北京首汽智行科技有限公司 | 一种缓存数据动态同步方法 |
CN112363995A (zh) * | 2020-10-30 | 2021-02-12 | 北京新数科技有限公司 | 基于日志解析的增量数据比对方法、装置和电子设备 |
CN112380186A (zh) * | 2020-11-06 | 2021-02-19 | 福建亿榕信息技术有限公司 | 一种基于主动适配的国产数据库迁移方法 |
CN112818053A (zh) * | 2019-11-18 | 2021-05-18 | Sap欧洲公司 | 用于实时跨系统数据库复制的方法和系统 |
CN113051247A (zh) * | 2021-03-18 | 2021-06-29 | 福建星瑞格软件有限公司 | 一种基于日志同步的数据库迁移方法及系统 |
CN113190531A (zh) * | 2021-05-10 | 2021-07-30 | 挂号网(杭州)科技有限公司 | 一种数据库迁移方法、装置、设备和存储介质 |
CN113468509A (zh) * | 2021-07-05 | 2021-10-01 | 曙光信息产业(北京)有限公司 | 一种用户认证的迁移方法、装置、设备及存储介质 |
CN113485980A (zh) * | 2021-07-27 | 2021-10-08 | 拉扎斯网络科技(上海)有限公司 | 数据处理方法、装置、电子设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6567823B1 (en) * | 2000-08-07 | 2003-05-20 | Corigin Ltd. | Change propagation method using DBMS log files |
CN106294757A (zh) * | 2016-08-11 | 2017-01-04 | 上海交通大学 | 一种基于超图划分的分布式数据库及其集群分区方法 |
CN106294471A (zh) * | 2015-06-03 | 2017-01-04 | 中兴通讯股份有限公司 | 数据迁移处理方法及装置 |
CN107357883A (zh) * | 2017-06-30 | 2017-11-17 | 北京奇虎科技有限公司 | 数据迁移方法及装置 |
-
2018
- 2018-05-18 CN CN201810483355.9A patent/CN108932282B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6567823B1 (en) * | 2000-08-07 | 2003-05-20 | Corigin Ltd. | Change propagation method using DBMS log files |
CN106294471A (zh) * | 2015-06-03 | 2017-01-04 | 中兴通讯股份有限公司 | 数据迁移处理方法及装置 |
CN106294757A (zh) * | 2016-08-11 | 2017-01-04 | 上海交通大学 | 一种基于超图划分的分布式数据库及其集群分区方法 |
CN107357883A (zh) * | 2017-06-30 | 2017-11-17 | 北京奇虎科技有限公司 | 数据迁移方法及装置 |
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020192290A1 (zh) * | 2019-03-26 | 2020-10-01 | 阿里巴巴集团控股有限公司 | 一种数据库迁移的方法、装置、设备及计算机可读介质 |
US11308048B2 (en) | 2019-03-26 | 2022-04-19 | Beijing Oceanbase Technology Co., Ltd. | Database migration method, apparatus, device, and computer-readable medium |
CN110008200A (zh) * | 2019-04-04 | 2019-07-12 | 杭州数梦工场科技有限公司 | 一种数据库的数据迁移方法、装置及设备 |
CN109933632A (zh) * | 2019-04-04 | 2019-06-25 | 杭州数梦工场科技有限公司 | 一种数据库的数据迁移方法、装置及设备 |
CN110008200B (zh) * | 2019-04-04 | 2021-04-13 | 杭州数梦工场科技有限公司 | 一种数据库的数据迁移方法、装置及设备 |
CN109933632B (zh) * | 2019-04-04 | 2021-04-27 | 杭州数梦工场科技有限公司 | 一种数据库的数据迁移方法、装置及设备 |
CN110532241A (zh) * | 2019-07-18 | 2019-12-03 | 政采云有限公司 | 利用MySQL Binlog进行不停机数据迁移方法 |
CN112818053A (zh) * | 2019-11-18 | 2021-05-18 | Sap欧洲公司 | 用于实时跨系统数据库复制的方法和系统 |
CN111241068A (zh) * | 2020-01-14 | 2020-06-05 | 阿里巴巴集团控股有限公司 | 信息处理方法、装置及设备、计算机可读存储介质 |
CN111241068B (zh) * | 2020-01-14 | 2023-04-07 | 阿里巴巴集团控股有限公司 | 信息处理方法、装置及设备、计算机可读存储介质 |
CN111651464A (zh) * | 2020-04-15 | 2020-09-11 | 北京皮尔布莱尼软件有限公司 | 数据处理方法、系统及计算设备 |
CN111651464B (zh) * | 2020-04-15 | 2024-02-23 | 北京皮尔布莱尼软件有限公司 | 数据处理方法、系统及计算设备 |
CN111651117A (zh) * | 2020-04-24 | 2020-09-11 | 广东睿江云计算股份有限公司 | 一种存储数据迁移的方法及其装置 |
CN111651117B (zh) * | 2020-04-24 | 2023-07-21 | 广东睿江云计算股份有限公司 | 一种存储数据迁移的方法及其装置 |
CN111931094A (zh) * | 2020-07-16 | 2020-11-13 | 北京首汽智行科技有限公司 | 一种缓存数据动态同步方法 |
CN112363995A (zh) * | 2020-10-30 | 2021-02-12 | 北京新数科技有限公司 | 基于日志解析的增量数据比对方法、装置和电子设备 |
CN112380186A (zh) * | 2020-11-06 | 2021-02-19 | 福建亿榕信息技术有限公司 | 一种基于主动适配的国产数据库迁移方法 |
CN113051247A (zh) * | 2021-03-18 | 2021-06-29 | 福建星瑞格软件有限公司 | 一种基于日志同步的数据库迁移方法及系统 |
CN113190531A (zh) * | 2021-05-10 | 2021-07-30 | 挂号网(杭州)科技有限公司 | 一种数据库迁移方法、装置、设备和存储介质 |
CN113468509A (zh) * | 2021-07-05 | 2021-10-01 | 曙光信息产业(北京)有限公司 | 一种用户认证的迁移方法、装置、设备及存储介质 |
CN113468509B (zh) * | 2021-07-05 | 2024-01-30 | 曙光信息产业(北京)有限公司 | 一种用户认证的迁移方法、装置、设备及存储介质 |
CN113485980A (zh) * | 2021-07-27 | 2021-10-08 | 拉扎斯网络科技(上海)有限公司 | 数据处理方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108932282B (zh) | 2023-04-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108932282A (zh) | 一种数据库迁移方法、装置和存储介质 | |
CN109947767B (zh) | 多重租赁数据库系统中的系统共享类型 | |
CN110147369B (zh) | 多重租赁数据库系统中的数据分离和写入重新定向 | |
CN110019215B (zh) | 多重租赁数据库系统中的键模式管理 | |
CN109906448B (zh) | 用于促进可插拔数据库上的操作的方法、设备和介质 | |
US10360536B2 (en) | Implementing a consistent ordering of operations in collaborative editing of shared content items | |
US7895156B2 (en) | Method, system, and computer program product for implementing a model exchange framework generating a synchronization record in response to a model exchange request using fusion technology | |
US8453136B1 (en) | Change tracking and incremental synchronization of EDA design and technology data | |
CN100555279C (zh) | 不用快照的项同步系统和方法 | |
CN109947773A (zh) | 在多租户数据库系统中部署对键模式的改变 | |
CN106446026B (zh) | 文件管理方法及文件管理系统 | |
EP2800013B1 (en) | Integration database framework | |
JPWO2008149552A1 (ja) | データベース矛盾解消方式 | |
CN103345502A (zh) | 分布式数据库的事务处理方法和系统 | |
CN110188114A (zh) | 一种数据操作的优化方法、装置、系统、设备和存储介质 | |
CN108369588A (zh) | 数据库级别自动存储管理 | |
CN109189778A (zh) | 一种在线修改数据库表结构的方法 | |
WO2009147847A1 (ja) | データベース並行編集方式 | |
KR101989074B1 (ko) | 데이터베이스 샤딩 환경에서의 복제 로그 기반의 마이그레이션 | |
US8583600B2 (en) | Deploying directory instances | |
US9569461B2 (en) | Distributed data authority system | |
JP2011522337A (ja) | サーバクラスタに配信されるコンピュータシステムのソフトウェアモジュールの同期化方法、同期化システムおよびデータストレージへの適用 | |
WO2013096447A1 (en) | A multiphase approach to data availability | |
US8812660B2 (en) | Workflow processes and systems | |
US11416449B2 (en) | Method of synchronous deletion for distributed storage system |
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 |