CN111190883A - 数据迁移方法、装置、计算机可读存储介质和计算机设备 - Google Patents
数据迁移方法、装置、计算机可读存储介质和计算机设备 Download PDFInfo
- Publication number
- CN111190883A CN111190883A CN201911221733.7A CN201911221733A CN111190883A CN 111190883 A CN111190883 A CN 111190883A CN 201911221733 A CN201911221733 A CN 201911221733A CN 111190883 A CN111190883 A CN 111190883A
- Authority
- CN
- China
- Prior art keywords
- data
- data table
- source
- target
- database
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
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)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及一种数据迁移方法、装置、计算机可读存储介质和计算机设备,方法包括:获取源数据库中对应的原始全量数据;根据原始全量数据中的数据位置插入与数据对应的源数据表的标识,得到目标全量数据;将目标全量数据中的数据对应的原始主键修改为更新主键,更新主键由数据对应的原始主键与数据对应的源数据表的标识确定;将目标全量数据迁移至目标数据库的目标数据表中;获取源数据库的增量数据,将增量数据迁移至目标数据表中,并根据增量数据中的数据位置插入与数据对应的源数据表的标识。本申请提供的方案可以降低数据库迁移过程对数据库正常访问操作的影响。
Description
技术领域
本申请涉及数据库技术领域,特别是涉及一种数据迁移方法、装置、计算机可读存储介质和计算机设备。
背景技术
在实际的应用场景中,经常需要对数据库的数据进行合并和拆分,例如游戏的拆服和合服:在游戏的快速扩张阶段,数据库的压力过大,会不断的进行拆分;在游戏稳定运营或萎缩阶段,又会进行服务合并,降低运营成本。在对服务进行合并时,需要将源数据库中多张数据表的数据进行迁移,并合并至另外一个数据库的数据表中。
传统技术中,在对源数据库进行迁移时,通常需要将所有访问数据库的服务先停掉,然后将该数据库中的数据导出,手动或者用工具整理好数据后,导入到一个集中的数据库中。当业务读写访问量都很大时,停掉服务时间可能非常长,在这段时间内,数据库基本不可用,不能执行任何写操作,甚至不能执行读操作。
由此可见,如何在数据库迁移过程中,尽可能的降低对数据库正常访问操作的影响,成为亟待解决的技术问题之一。
发明内容
基于此,有必要针对背景技术中引出的技术问题,提供一种数据迁移方法、装置、计算机可读存储介质和计算机设备,以降低数据库迁移过程对数据库正常访问操作的影响。
一种数据迁移方法,包括:
获取源数据库中各个源数据表的数据组成所述源数据库对应的原始全量数据;
根据所述原始全量数据中的数据位置插入与数据对应的源数据表的标识,得到目标全量数据;
将所述目标全量数据中的数据对应的原始主键修改为更新主键,所述更新主键由数据对应的原始主键与数据对应的源数据表的标识组合确定;
将所述目标全量数据迁移至目标数据库的目标数据表中;
获取所述源数据库的相对于所述原始全量数据的增量数据,将所述增量数据迁移至所述目标数据表中,并根据所述增量数据中的数据位置插入与数据对应的源数据表的标识。
一种数据迁移装置,所述装置包括:
全量数据获取模块,用于获取源数据库中各个源数据表的数据组成所述源数据库对应的原始全量数据;
插入模块,用于根据所述原始全量数据中的数据位置插入与数据对应的源数据表的标识,得到目标全量数据;
主键更新模块,用于将所述目标全量数据中的数据对应的原始主键修改为更新主键,所述更新主键由数据对应的原始主键与数据对应的源数据表的标识组合确定;
迁移模块,用于将所述目标全量数据迁移至目标数据库的目标数据表中;
增量数据获取模块,用于获取所述源数据库的相对于所述原始全量数据的增量数据,将所述增量数据迁移至所述目标数据表中,并根据所述增量数据中的数据位置插入与数据对应的源数据表的标识。
一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行上述数据迁移方法所述的步骤。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行上述数据迁移方法所述的步骤。
上述数据迁移方法、装置、计算机可读存储介质和计算机设备,在对源数据库的数据进行迁移时,首先获取原始全量数据,对原始全量数据进行数据迁移,然后获取相对于所述原始全量数据的增量数据,对增量数据进行迁移,保证了在不停止服务访问地情况下,源数据库的数据能够不遗漏地迁移至目标数据库中,同时,在对数据迁移的过程中,通过在迁移的数据中插入源数据表的标识,并对原始全量数据的原始主键进行了修改,将原始主键与数据表的标识设置为联合主键,可以避免在迁移至目标数据库时产生主键冲突,从而顺利地将数据迁移至目标数据库,本申请提供的方案,由于在整个迁移过程中,不需要停掉源数据的服务访问,就能够将数据顺利地将源数据库所有数据不遗漏地迁移至目标数据库,从而降低了数据库迁移过程对数据库正常访问操作的影响。
附图说明
图1为一个实施例中数据迁移方法的应用环境图;
图2为一个实施例中数据迁移方法的流程示意图;
图3为另一个实施例中数据迁移方法的流程示意图;
图4为一个实施例中步骤S312的流程示意图;
图5为一个实施例中日志流的流程示意图;
图6为另一个实施例中数据迁移方法的流程示意图;
图7为一个实施例中数据迁移装置的结构框图;
图8为一个实施例中增量数据获取模块的结构框图;
图9为另一个实施例中数据迁移装置的结构框图;
图9A为一个实施例中日志解析模块的结构框图;
图9B为另一个实施例中日志解析模块的结构框图;
图10为一个实施例中计算机设备的结构框图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
图1为一个实施例中数据迁移方法的应用环境图。参照图1,该方法应用于数据迁移系统中,该系统包括第一服务器110和第二服务器120,其中,第一服务器110为源数据库对应的服务器,第二服务器120为目标数据库对应的服务器。第一服务器110和第二服务器120通过网络连接。第一服务器110、第二服务器120可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
如图2所示,在一个实施例中,提供了一种数据迁移方法。本实施例主要以该方法应用于上述图1中的第一服务器110来举例说明。参照图2,该数据迁移方法具体包括如下步骤:
S202,获取源数据库中各个源数据表的数据组成源数据库对应的原始全量数据。
其中,源数据库指的是需要迁移数据的数据库。源数据库中包括多张源数据表。这些源数据表可以是基于同一个数据表水平分表得到。各个源数据表的结构均相同。
具体地,第一服务器获取源数据库中各个源数据表的在特定时间点及特定时间点之前的所有数据,将这些数据组成原始全量数据。其中,特定时间点可以根据需要进行设定。
在一个实施例中,第一服务器在获取源数据库中各个源数据表的同时,会获取源数据表对应的建表语句。
在一个实施例中,该特定时间点可以是当前时间点。第一服务器获取源数据库中各个源数据表在当前时间点及当前时间点之前的所有数据,将这些数据组成原始全量数据。
在一个实施例中,第一服务器可以通过开源工具mydumper或者myqldump从源数据库中各个源数据表导出数据。
在一个实施例中,第一服务器在获取各个源数据表的数据组成原始全量数据之前,会检查各个源数据表配置信息,包括IP地址、端口号及数据表名称,以及检查各个源数据表的结构是否一致。
S204,根据原始全量数据中的数据位置插入与数据对应的源数据表的标识,得到目标全量数据。
其中,数据位置指的是数据在源数据库中的位置,根据该位置可确定该数据属于哪一张源数据表。这里的数据指的是原始全量数据中的一条数据记录,其中,一条数据记录例如可以是数据表中的一行数据。
具体地,第一服务器在得到原始全量数据后,根据原始全量数据中的数据位置在每一条数据记录中插入其所属的源数据表的标识,得到目标全量数据。
在一个实施例中,源数据表的标识可以用数据库名称和该源数据表对应的数据表名称组合得到。
S206,将目标全量数据中的数据对应的原始主键修改为更新主键,更新主键由数据对应的原始主键与数据对应的源数据表的标识组合确定。
其中,原始主键指的是数据在源数据库中的主键。更新主键由数据对应的原始主键与数据对应的源数据表的标识组合确定。
具体地,第一服务器将目标全量数据中原始主键字段与源数据表的标识字段设置为联合主键,从而重新确定目标全量数据对应的主键字段。
在一个实施例中,第一服务器在导出原始全量数据时,会同时导出源数据库对应的建表语句,第一服务器可以对导出的建表语句进行修改,将建表语句中的原始主键修改为更新主键,从而实现对目标全量数据的主键修改。
S208,将目标全量数据迁移至目标数据库的目标数据表中。
具体地,第一服务器可以将目标全量数据发送至第二服务器,第二服务器将目标全量数据导入至目标数据表中。
S210,获取源数据库的相对于原始全量数据的增量数据,将增量数据迁移至目标数据表中,并根据增量数据中的数据位置插入与数据对应的源数据表的标识。
其中,增量数据是相对于是原始全量数据而言的,也就是在原始全量数据对应的特定时间点之后对源数据进行更改操作对应的数据。增量数据中的数据位置指的是增量数据中的数据在源数据库中的位置,根据该位置可确定增量数据中的数据属于哪一张源数据表。
具体地,第一服务器在获取到各个源数据表的增量数据后,可以根据增量数据中的数据位置确定增量数据中每一条数据记录对应的源数据表的标识,将该标识插入至该条数据记录中,并将该增量数据迁移至第二服务器的目标数据表中。
在一个实施例中,第一服务器可以获取源数据库对应的日志文件,该日志文件中记录了源数据所有的数据变更操作,根据该日志文件可以确定增量数据并迁移至目标数据表中。其中,日志文件可以是事务日志。
在一个实施例中,当源数据库与目标数据库的差异不超过预设阈值时,保持源数据库与目标数据库的数据同步。
其中,差异可以是数据大小差异或者时间差异。数据大小差异指的是源数据库对应的数据量大小与目标数据库对应的数据量大小之间的差异;时间差异指的是源数据库对应的最新一次变更操作对应的时间与目标数据库对应的最新一次变更操作对应的时间之间的差异。
具体地,由于源数据库的访问服务没有被停止,源数据库中会不断地数据写入操作,因此,第一服务器会持续地去获取源数据库的增量数据,每一次将增量数据迁移至目标数据库后,都会判断源数据与目标数据库的差异是否不超过预设阈值,若是,则说明此时源数据库和目的数据库中的数据基本一致,那么就到了保持同步阶段,第一服务器保持源数据库与目标数据库的数据同步;若否,则继续去获取源数据库的增量数据,直至差异不超过预设阈值。
上述数据迁移方法,在对源数据库的数据进行迁移时,首先获取原始全量数据,对原始全量数据进行数据迁移,然后获取相对于原始全量数据的增量数据,对增量数据进行迁移,保证了在不停止服务访问地情况下,源数据库的数据能够不遗漏地迁移至目标数据库中,同时,在对数据迁移的过程中,通过在迁移的数据中插入源数据表的标识,并对原始全量数据的原始主键进行了修改,将原始主键与数据表的标识设置为联合主键,可以避免在迁移至目标数据库时产生主键冲突,从而顺利地将数据迁移至目标数据库,本申请提供的方案,由于在整个迁移过程中,不需要停掉源数据的服务访问,就能够将数据顺利地将源数据库所有数据不遗漏地迁移至目标数据库,从而降低了数据库迁移过程对数据库正常访问操作的影响。
在一个实施例中,获取源数据库的相对于原始全量数据的增量数据,将增量数据迁移至目标数据表中,包括:获取源数据库对应的事务日志;解析事务日志,根据解析结果得到源数据库对应的变更语句,将变更语句重放至目标数据表中。
其中,事务日志指的是binglog日志,binglog日志为数据库的二进制日志,事务日志中记录了数据库所有的数据变更,并以二进制的形式存储在磁盘上。重放指的是将针对源数据库的操作,在目标数据库中再执行一次。
本实施例中,第一服务器在获取到各个源数据表对应的事务日志后,对事务日志进行解析,根据解析结果可得到源数据库对应的变更语句。
其中,变更语句指的是在原始全量数据对应的特定时间点之后对源数据库进行数据变更操作的语句,包括DDL(data definition language)语句、DML(data manipulationlanguage)中的至少一种。其中,DDL语句用于定义或改变数据表的结构、数据类型、数据表之间的链接和约束等,包括CREATE、ALTER、DROP等操作。DML语句用于对数据库的数据进行操作,包括SELECT、UPDATE、INSERT、DELETE等操作。
第一服务器在得到变更语句后,将变更语句重放至目标数据库。具体来说,可以将变更语句发送至第二服务器,第二服务器根据接收到的变更语句对目标数据执行对应的变更操作。
在一个实施例中,可通过“--base64-output=decode-rows–v”解析事务日志,其中,base64-output,可以控制输出语句输出base64编码的BINLOG语句;decode-rows:把基于行的事件解码成一个SQL语句。
本实施例中,通过获取事务日志,解析事务日志得到变更语句并重放至目标数据库来实现对增量数据的迁移,可以提高对增量数据的迁移效率。
在一个实施例中,如图3所示,提供了一种数据迁移方法,包括:
S302,获取源数据库中各个源数据表的数据组成源数据库对应的原始全量数据,记录原始全量数据对应的目标位点。
其中,目标位点指的是原始全量数据对应的事务日志的位点。位点(position)也就是事务日志的位置点,可以由事务日志对应的文件名称及对应的位置偏移量组成,例如,mysql-bin.001,154。
S304,根据原始全量数据中的数据位置插入与数据对应的源数据表的标识,得到目标全量数据。
S306,将目标全量数据中的数据对应的原始主键修改为更新主键,更新主键由数据对应的原始主键与数据对应的源数据表的标识组合确定。
S308,将目标全量数据迁移至目标数据库的目标数据表中。
S310,获取源数据库对应的事务日志。
S312,从目标位点处开始解析事务日志,根据解析结果得到源数据库对应的变更语句,将变更语句重放至目标数据表中,并根据变更语句对应的增量数据的数据位置插入与数据对应的源数据表的标识。
具体地,由于记录了原始全量数据对应的目标位点,第一服务器在获取到事务日志后,可根据目标位点对应的文件名及偏移量在事务日志中精确定位到对应的日志位置处。由于从该目标位点处开始的日志数据即为增量数据对应的日志数据,因此,从该目标位点处开始解析得到的解析结果,可以直接确定为各个源数据表对应的变更语句。
在一个实施例中,第一服务器每解析完一个事务对应的日志数据后,将该事务对应的变更语句重放至目标数据库的目标数据表中,实现该事务对应的增量数据的迁移,同时判断此时的源数据库与目标数据库的差异是否不超过预设阈值,若是,则说明源数据库与目标数据库基本一致,保持源数据库与目标数据库的数据同步;否则,第一服务器继续解析下一个事务对应的日志,直至源数据库与目标数据库的差异不超过预设阈值。
本实施例中,通过记录原始全量数据对应的目标位点,在解析事务日志时,可以直接从目标位点处开始解析,避免对全部的事务日志进行解析,提高了解析效率。
在一个实施例中,该方法还包括:当所述源数据库与所述目标数据库的差异不超过预设阈值时,检测所述事务日志的更新状态;当检测到事务日志更新时,解析事务日志对应的当前更新日志数据,得到当前更新变更语句;将当前更新变更语句重放至目标数据表中。
其中,当前更新日志数据指的是在源数据库与目标数据库的差异不超过预设阈值后,事务日志中当前更新的日志数据。当前更新变更语句指的是根据当前更新的事务日志解析得到的变更语句。
本实施例中,第一服务器可以实时检测事务日志的更新状态,当检测到有更新时,获取当前更新日志数据进行解析,得到当前更新变更语句,将当前更新变更语句重放至目标数据表中,从而实现源数据库与目标数据库的数据同步。
本实施例中,第一服务器通过对事务日志的更新进行检测,可以及时将源数据库中更新的数据迁移至目标数据表中,从而保持源数据库与目标数据库的数据同步。
在一个实施例中,在所述将所述当前更新变更语句重放至所述目标数据表中之后,还包括:当源数据库中各个源数据表的写入操作被停止且当前更新变更语句在目标数据表中重放完成时,获取目标数据库的访问地址;将当前服务访问地址由源数据库对应的访问地址切换至目标数据库的访问地址。
其中,当前服务访问地址指的是用户在访问当前服务时的地址。这里的当前服务指的是源数据当前提供的业务服务。
本实施例中,第一服务器可以首先停止对源数据库中各个源数据表的写入操作,将当前更新变更语句在目标数据表中进行重放,重放完成时,获取目标数据库的访问地址,将当前服务访问地址由源数据库对应的访问地址切换至目标数据库对应的访问地址,从而实现业务访问的切换。
本实施例中,由于源数据库和目标数据库中的数据一直保持同步,在进行业务访问的切换时,只需要短暂的停止服务即可,相较于传统技术中要长时间的暂停服务,从而大大降低了对业务访问的影响。
在一个实施例中,所述从所述目标位点处开始解析所述事务日志,根据解析结果得到所述源数据库对应的变更语句,将所述变更语句重放至所述目标数据表中,包括:从所述目标位点处开始解析所述事务日志,当解析得到第一源数据表对应的结构变更语句时,将所述第一源数据表确定为当前源数据表;记录当前源数据表对应的结构变更语句;继续解析所述事务日志;当解析得到的变更语句中包括第一数据变更语句时,重放至目标数据表;所述第一数据变更语句为当前源数据表之后的源数据表对应的数据变更语句;当解析得到的数据变更语句中包括下一个源数据表对应的结构变更语句时,将下一个源数据表确定为当前源数据表,并进入所述记录当前源数据表对应的结构变更语句及对应的位点的步骤,直至当前源数据表为末尾源数据表;将记录的结构变更语句重放至目标数据表。
在一个实施例中,如图4所示,从目标位点处开始解析事务日志,根据解析结果得到源数据库对应的变更语句,将变更语句重放至目标数据表中,包括:
S402,从目标位点处开始解析事务日志,当解析得到第一源数据表对应的结构变更语句时,将第一源数据表确定为当前源数据表。
由于源数据库中各个源数据表是水平分表得到的,可以按照位置关系自上而下对各个源数据表进行排序,则排在第一的为第一源数据表,排在第二的第二源数据表,依次类推。第一源数据表对应的结构变更语句指的是对第一源数据表进行结构变更的DDL语句。可以理解的是,由于源数据库中的多个源数据表为结构相同的数据表,对第一源数据表进行结构变更后,其他源数据表的结构必然会变更,只是变更的时间点不同而已。
具体来说,会按照各个源数据表的位置排序先后进行变更,即先变更第一个源数据表,再变更第二个源数据表,再变更第三个源数据表,……,依次类推,直至末尾源数据表。这里的末尾源数据表指的是最后一个源数据表,也就是位置在源数据库最下方的一个源数据表。
S404,记录当前源数据表对应的结构变更语句及对应的位点。
S406,判断当前源数据表是否为末尾源数据表,若否,则进入步骤S408;若是,则进入步骤S416。
S408,继续解析事务日志。
由于源数据库中源数据表的数量是已知的,因此,最终能解析到的结构变更语句的数量也是已知的,第一服务器可以判断当前接收到的结构变更语句数量与源数据表的数量是否相同,若是,则说明当前源数据表为末尾源数据表,否则,当前源数据库不是末尾源数据表,则从当前源数据表对应的位点处开始继续解析事务日志。
S410,当解析得到的变更语句中包括第一数据变更语句时,重放至目标数据表,重复S408继续解析事务日志。第一数据变更语句为当前源数据表之后的源数据表对应的数据变更语句。
S412,当解析得到的变更语句中包括第二数据变更语句时,丢弃第二数据变更语句,重复S408继续解析事务日志。第二数据变更语句为当前源数据表或当前源数据表之前的源数据表对应的数据变更语句。
其中,当前源数据表之后的源数据表指的是位置在当前源数据表下方的数据表。由于对各个源数据表的结构变更是按照位置排序先后进行的,在解析到当前源数据表对应的结构变更语句时,说明当前源数据表及当前源数据表之前的源数据表都进行了结构变更,而当前源数据表之后的源数据表还未进行结构变更。由于此前解析到的结构变更语句都只是进行了记录保存,并未重放至目标数据库,也就是说此时的目标数据库的结构也是未变更的。因此,第一服务器在解析得到的变更语句中包括第一数据变更语句也就是当前源数据表之后的源数据表对应的数据变更语句时,可以正常重放至目标数据库;而在在解析得到的变更语句中包括第二数据变更语句也就是当前源数据表或当前源数据表之前的源数据表对应的数据变更语句时,由于当前源数据表或当前源数据表之前的源数据表进行了结果变更,第二数据变更语句无法重放至目标数据库中,所以,对这些第二数据变更语句进行丢弃。
S414,当解析得到的数据变更语句中包括下一个源数据表对应的结构变更语句时,将下一个源数据表确定为当前源数据表,并进入步骤S404。
其中,下一个源数据表为根据位置关系排序在当前源数据表之后的第一个源数据表,如,当前源数据表为第一源数据表,则下一个源数据为第二源数据表,依次类推。
在解析得到的数据变更语句中包括下一个源数据表对应的结构变更语句时,将下一个源数据表确定为当前源数据表,并进入步骤S404。
S416,将记录的结构变更语句重放至目标数据表。
在一个实施例中,由于各个源数据表的结构是相同的,对各个源数据的结构进行变更的结构变更语句也是相同的,第一服务器可以从记录的所有结构变更语句选取其中一条重放至目标数据库,对目标数据库进行结构变更。
S418,从第一源数据表对应的位点开始重新解析事务日志直至末尾源数据表对应的位点。
具体地,由于在之前的解析过程中,从解析得到一个结构变更语句到最后一个结构变更语句的过程中,部分数据变更语句由于无法重放至目标数据库中,被丢弃了,因此,第一服务器从第一个结构变更语句对应的位点开始重新解析直至最后一个结构变更语句对应的位点,将这个过程中解析得到的所有第三数据变更语句重放至目标数据库,这里的第三数据变更语句为与之前丢弃的第二数据变更语句相同的语句,当前,在这个过程也会再次解析得到之前记录的结构变更语句,这部分结构变更语句由于已经被记录,因此,在这一轮的解析过程中可以进行丢弃。
S420,继续解析事务日志,对解析得到的数据变更语句,重放至目标数据库中。
具体地,由于所有的结构变更语句都已经解析完成,并重放至目标数据库中了,此时,目标数据库的结构也进行了变更,可以从当前源数据表对应的位点处开始正常解析事务日志,对解析得到的数据变更语句,重放至目标数据库中。
可以理解的是,若是在之后的解析过程中,再次解析到第一源数据表对应的结构变更语句,则按照上述步骤重复执行。
本实施例中,当源数据库中的源数据表在数据迁移过程中发生了结构变更时,通过上述步骤对事务日志进行两次解析,可以保证源数据库对应的所有的变更语句都顺利地重放至目标数据库中,避免了重放过程出现差错。
为使得上述日志解析过程更加清晰明了,下面结合图5的日志流(binlog stream)来进行举例说明,本实施例中,源数据库MySQL Instance中包括两张源数据表table1和table2,其中,第一服务器在t1时刻解析得到table1的DDL语句,在t3时刻解析得到的table2的DDL语句,整个解析过程具体包括以下步骤:
1、在t1时刻解析得到table1的DDL语句,记录DDL语句及对应的binlog位点;
此时,table1为当前源数据表。第一服务器根据源数据库中源数据表的数量判断出当前源数据表并不是末尾源数据表,故进入步骤2;
2、继续向前解析t2时刻到t3时刻的binlog;
3、对于属于table1的schema V2 DML语句,丢弃;对于属于table2的schema V1DML语句,重放至目标数据库中;其中,schema V2表示为table1发生结构变更,schema V2DML语句为结构变更后的DML语句;
4、继续解析,在t3时刻解析得到table2的DDL语句,记录该DDL语句及对应的binlog位点;
此时,table2为当前源数据表。第一服务器根据源数据库中源数据表的数量,判定该源数据库上所有的DDL语句都已经解析得到,即table2为末尾源数据表。
5、将记录的DDL语句重放至目标数据库中;
6、设置新的binlog流的解析起始位置点为步骤1时保存的位点;
7、重新开始解析从t2时刻到t3时刻的binlog;
8、对于属于table1的schema V2 DML语句,正常重放至目标数据库;对于属于table2的shema V1 DML语句,丢弃;
9、解析到达步骤4时保存的binlog位点,可得知在步骤3时被丢弃的所有DML语句都已经重放至目标数据库中;
10、继续从t4时刻对应的binlog位点正常解析。
由于所有的结构变更语句都已经重放至目标数据库中,对目标数据库进行了结构变更,且后续解析到的数据变更语句都是结构变更后的数据变更语句,因此,可以直接重放至目标数据库中。
在一个实施例中,当解析得到的变更语句中包括第二数据变更语句时,还可以对第二变更语句进行缓存,在所述将记录的结构变更语句重放至目标数据表之后,可以获取缓存的第二变更语句,并重放至目标数据中。由于对第二变更语句进行了缓存,可以避免对事务日志进行二次解析。
在一个实施例中,如图6所示,提供了一种数据迁移方法,包括以下步骤:
S602,获取源数据库中各个源数据表的数据组成源数据库对应的原始全量数据,记录原始全量数据对应的目标位点。
S604,根据原始全量数据中的数据位置插入与数据对应的源数据表的标识,得到目标全量数据。
S606,将目标全量数据中的数据对应的原始主键修改为更新主键,更新主键由数据对应的原始主键与数据对应的源数据表的标识组合确定。
S608,将目标全量数据迁移至目标数据库的目标数据表中。
S610,获取源数据库对应的事务日志。
S612,从目标位点处开始解析事务日志,根据解析结果得到源数据库对应的变更语句,将变更语句重放至目标数据表中,并根据变更语句对应的增量数据的数据位置插入与数据对应的源数据表的标识。
S614,当源数据库与目标数据库的差异不超过预设阈值时,检测事务日志的更新状态。
S616,当检测到事务日志更新时,解析事务日志对应的当前更新日志数据,得到当前更新变更语句。
S618,将当前更新变更语句重放至目标数据表中。
S620,当源数据库中各个源数据表的写入操作被停止且当前更新变更语句在目标数据表中重放完成时,获取目标数据库的访问地址。
S622,将当前服务访问地址由源数据库对应的访问地址切换至目标数据库的访问地址。
本实施例中,可以在不停止服务访问的情况下,将源数据库中多张源数据表的数据迁移至目标数据库并合并至同一张数据表中,并且在数据迁移完后服务在瞬间就可以切换至目标数据库,减少了在数据库迁移的过程中对数据库正常访问操作的影响。
可以理解的是,本申请的数据迁移方法还可以在第二服务器上执行,在第二服务器上执行时,步骤与在第一服务器上执行时相同,本申请在此不赘述。
应该理解的是,虽然图2-图4以及图6的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-图4以及图6中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图7所示,提供了一种数据迁移装置700,包括:
全量数据获取模块702,用于获取源数据库中各个源数据表的数据组成源数据库对应的原始全量数据;
插入模块704,用于根据原始全量数据中的数据位置插入与数据对应的源数据表的标识,得到目标全量数据;
主键更新模块706,用于将目标全量数据中的数据对应的原始主键修改为更新主键,更新主键由数据对应的原始主键与数据对应的源数据表的标识组合确定;
迁移模块708,用于将目标全量数据迁移至目标数据库的目标数据表中;
增量数据获取模块710,用于获取源数据库的相对于原始全量数据的增量数据,将增量数据迁移至目标数据表中,并根据增量数据中的数据位置插入与数据对应的源数据表的标识。
上述数据迁移装置,在对源数据库的数据进行迁移时,首先获取原始全量数据,对原始全量数据进行数据迁移,然后获取相对于原始全量数据的增量数据,对增量数据进行迁移,保证了在不停止服务访问地情况下,源数据库的数据能够不遗漏地迁移至目标数据库中,同时,在对数据迁移的过程中,通过在迁移的数据中插入源数据表的标识,并对原始全量数据的原始主键进行了修改,将原始主键与数据表的标识设置为联合主键,可以避免在迁移至目标数据库时产生主键冲突,从而顺利地将数据迁移至目标数据库,本申请提供的方案,由于在整个迁移过程中,不需要停掉源数据的服务访问,就能够将数据顺利地将源数据库所有数据不遗漏地迁移至目标数据库,从而降低了数据库迁移过程对数据库正常访问操作的影响。
在一个实施例中,如图8所示,增量数据获取模块710包括:
日志获取模块710A,用于获取源数据库对应的事务日志;
日志解析模块710B,用于解析事务日志,根据解析结果得到源数据库对应的变更语句,将变更语句重放至目标数据表中。
在一个实施例中,如图9所示,该装置还包括:目标位点记录模块712,用于记录原始全量数据对应的目标位点;日志解析模块710B还用于从目标位点处开始解析事务日志,根据解析结果得到源数据库对应的变更语句,将变更语句重放至目标数据表中。
在一个实施例中,该装置还包括:数据同步模块,用于当检测到事务日志更新时,解析事务日志对应的当前更新日志数据,得到当前更新变更语句;将当前更新变更语句重放至目标数据表中。
在一个实施例中,该装置还包括:切换模块,用于当源数据库中各个源数据表的写入操作被停止且当前更新变更语句在目标数据表中重放完成时,获取目标数据库的访问地址;将当前服务访问地址由源数据库对应的访问地址切换至目标数据库的访问地址。
在一个实施例中,如图9A所示,日志解析模块710B包括:
第一解析模块902,用于从所述目标位点处开始解析所述事务日志,当解析得到第一源数据表对应的结构变更语句时,将所述第一源数据表确定为当前源数据表;
记录模块904,用于记录当前源数据表对应的结构变更语句;
第二解析模块906,用于继续解析所述事务日志;
第一重放模块908,用于当解析得到的变更语句中包括第一数据变更语句时,重放至目标数据表;所述第一数据变更语句为当前源数据表之后的源数据表对应的数据变更语句;
循环模块910,用于当解析得到的数据变更语句中包括下一个源数据表对应的结构变更语句时,将下一个源数据表确定为当前源数据表,并进入所述第二解析模块,直至当前源数据表为末尾源数据表;
第二重放模块912,用于将记录的结构变更语句重放至目标数据表。
在一个实施例中,记录模块904用于记录当前源数据表对应的结构变更语句及对应的位点;如图9B所示,日志解析模块710B还包括:丢弃模块914,用于当解析得到的变更语句中包括第二数据变更语句时,丢弃所述第二数据变更语句;所述第二数据变更语句为当前源数据表或当前源数据表之前的源数据表对应的数据变更语句;第三解析模块916,用于从第一源数据表对应的位点开始重新解析所述事务日志直至末尾源数据表对应的位点,当解析得到的数据变更语句中包括第三数据变更语句时,将所述第三数据变更语句重放至所述目标数据表;所述第三数据变更语句为丢弃的所述第二数据变更语句相同的数据变更语句。
图10示出了一个实施例中计算机设备的内部结构图。该计算机设备具体可以是图1中的第一服务器110或第二服务器120。如图10所示,该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、输入装置和显示屏。其中,存储器包括非易失性存储介质和内存储器。该计算机设备的非易失性存储介质存储有操作系统,还可存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现数据迁移方法。该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行数据迁移方法。计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图10中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,本申请提供的数据迁移装置可以实现为一种计算机程序的形式,计算机程序可在如图10所示的计算机设备上运行。计算机设备的存储器中可存储组成该数据迁移装置的各个程序模块,比如,图7所示的全量数据获取模块、插入模块、主键更新模块、迁移模块和增量数据获取模块。各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本申请各个实施例的数据迁移方法中的步骤。
例如,图10所示的计算机设备可以通过如图7所示的数据迁移装置中的全量数据获取模块执行步骤S202。计算机设备可通过插入模块执行步骤S204。计算机设备可通过主键更新模块执行步骤S206。计算机设备可通过迁移模块执行步骤S208。计算机设备可通过增量数据获取模块执行步骤S210。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述数据迁移方法的步骤。此处数据迁移方法的步骤可以是上述各个实施例的数据迁移方法中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述数据迁移方法的步骤。此处数据迁移方法的步骤可以是上述各个实施例的数据迁移方法中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指示相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种数据迁移方法,包括:
获取源数据库中各个源数据表的数据组成所述源数据库对应的原始全量数据;
根据所述原始全量数据中的数据位置插入与数据对应的源数据表的标识,得到目标全量数据;
将所述目标全量数据中的数据对应的原始主键修改为更新主键,所述更新主键由数据对应的原始主键与数据对应的源数据表的标识组合确定;
将所述目标全量数据迁移至目标数据库的目标数据表中;
获取所述源数据库的相对于所述原始全量数据的增量数据,将所述增量数据迁移至所述目标数据表中,并根据所述增量数据中的数据位置插入与数据对应的源数据表的标识。
2.根据权利要求1所述的方法,其特征在于,所述获取所述源数据库的相对于所述原始全量数据的增量数据,将所述增量数据迁移至所述目标数据表中,包括:
获取所述源数据库对应的事务日志;
解析所述事务日志,根据解析结果得到所述源数据库对应的变更语句,将所述变更语句重放至所述目标数据表中。
3.根据权利要求2所述的方法,其特征在于,在所述获取源数据库中各个源数据表的数据组成所述源数据库对应的原始全量数据之后,还包括:
记录所述原始全量数据对应的目标位点;
解析所述事务日志,根据解析结果得到所述源数据库对应的变更语句,将所述变更语句重放至所述目标数据表中,包括:
从所述目标位点处开始解析所述事务日志,根据解析结果得到所述源数据库对应的变更语句,将所述变更语句重放至所述目标数据表中。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当所述源数据库与所述目标数据库的差异不超过预设阈值时,检测所述事务日志的更新状态;
当检测到所述事务日志更新时,解析所述事务日志对应的当前更新日志数据,得到当前更新变更语句;
将所述当前更新变更语句重放至所述目标数据表中。
5.根据权利要求4所述的方法,其特征在于,在所述将所述当前更新变更语句重放至所述目标数据表中之后,还包括:
当所述源数据库中各个源数据表的写入操作被停止且所述当前更新变更语句在所述目标数据表中重放完成时,获取所述目标数据库的访问地址;
将当前服务访问地址由所述源数据库对应的访问地址切换至所述目标数据库的访问地址。
6.根据权利要求2所述的方法,其特征在于,所述从所述目标位点处开始解析所述事务日志,根据解析结果得到所述源数据库对应的变更语句,将所述变更语句重放至所述目标数据表中,包括:
从所述目标位点处开始解析所述事务日志,当解析得到第一源数据表对应的结构变更语句时,将所述第一源数据表确定为当前源数据表;
记录当前源数据表对应的结构变更语句;
继续解析所述事务日志;
当解析得到的变更语句中包括第一数据变更语句时,重放至目标数据表;所述第一数据变更语句为当前源数据表之后的源数据表对应的数据变更语句;
当解析得到的数据变更语句中包括下一个源数据表对应的结构变更语句时,将下一个源数据表确定为当前源数据表,并进入所述记录当前源数据表对应的结构变更语句及对应的位点的步骤,直至当前源数据表为末尾源数据表;
将记录的结构变更语句重放至目标数据表。
7.根据权利要求6所述的方法,其特征在于,所述记录当前源数据表对应的结构变更语句,包括:
记录当前源数据表对应的结构变更语句及对应的位点;
在所述继续解析所述事务日志之后,还包括:
当解析得到的变更语句中包括第二数据变更语句时,丢弃所述第二数据变更语句;所述第二数据变更语句为当前源数据表或当前源数据表之前的源数据表对应的数据变更语句;
在所述将记录的结构变更语句重放至目标数据表之后,还包括:
从第一源数据表对应的位点开始重新解析所述事务日志直至末尾源数据表对应的位点;
当解析得到的数据变更语句中包括第三数据变更语句时,将所述第三数据变更语句重放至所述目标数据表;所述第三数据变更语句为丢弃的所述第二数据变更语句相同的数据变更语句。
8.一种数据迁移装置,其特征在于,所述装置包括:
全量数据获取模块,用于获取源数据库中各个源数据表的数据组成所述源数据库对应的原始全量数据;
插入模块,用于根据所述原始全量数据中的数据位置插入与数据对应的源数据表的标识,得到目标全量数据;
主键更新模块,用于将所述目标全量数据中的数据对应的原始主键修改为更新主键,所述更新主键由数据对应的原始主键与数据对应的源数据表的标识组合确定;
迁移模块,用于将所述目标全量数据迁移至目标数据库的目标数据表中;
增量数据获取模块,用于获取所述源数据库的相对于所述原始全量数据的增量数据,将所述增量数据迁移至所述目标数据表中,并根据所述增量数据中的数据位置插入与数据对应的源数据表的标识。
9.一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行如权利要求1至7中任一项所述方法的步骤。
10.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如权利要求1至7中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911221733.7A CN111190883A (zh) | 2019-12-03 | 2019-12-03 | 数据迁移方法、装置、计算机可读存储介质和计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911221733.7A CN111190883A (zh) | 2019-12-03 | 2019-12-03 | 数据迁移方法、装置、计算机可读存储介质和计算机设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111190883A true CN111190883A (zh) | 2020-05-22 |
Family
ID=70707247
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911221733.7A Pending CN111190883A (zh) | 2019-12-03 | 2019-12-03 | 数据迁移方法、装置、计算机可读存储介质和计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111190883A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112328573A (zh) * | 2020-11-03 | 2021-02-05 | 杭州朗澈科技有限公司 | kubernetes集群中数据库迁移方法和系统 |
CN112527777A (zh) * | 2020-12-18 | 2021-03-19 | 福建天晴数码有限公司 | 一种基于追日志的数据库扩展的方法及其装置 |
CN112732679A (zh) * | 2021-01-20 | 2021-04-30 | 维沃移动通信有限公司 | 数据迁移方法、装置、电子设备及可读存储介质 |
CN113239012A (zh) * | 2021-05-17 | 2021-08-10 | 挂号网(杭州)科技有限公司 | 一种数据库迁移方法、装置、电子设备和存储介质 |
CN113515364A (zh) * | 2021-09-14 | 2021-10-19 | 腾讯科技(深圳)有限公司 | 一种数据迁移的方法及装置、计算机设备和存储介质 |
CN113868188A (zh) * | 2021-08-25 | 2021-12-31 | 苏州浪潮智能科技有限公司 | 一种修改数据库文件存储位置的方法、系统、设备和介质 |
-
2019
- 2019-12-03 CN CN201911221733.7A patent/CN111190883A/zh active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112328573A (zh) * | 2020-11-03 | 2021-02-05 | 杭州朗澈科技有限公司 | kubernetes集群中数据库迁移方法和系统 |
CN112527777A (zh) * | 2020-12-18 | 2021-03-19 | 福建天晴数码有限公司 | 一种基于追日志的数据库扩展的方法及其装置 |
CN112732679A (zh) * | 2021-01-20 | 2021-04-30 | 维沃移动通信有限公司 | 数据迁移方法、装置、电子设备及可读存储介质 |
CN113239012A (zh) * | 2021-05-17 | 2021-08-10 | 挂号网(杭州)科技有限公司 | 一种数据库迁移方法、装置、电子设备和存储介质 |
CN113868188A (zh) * | 2021-08-25 | 2021-12-31 | 苏州浪潮智能科技有限公司 | 一种修改数据库文件存储位置的方法、系统、设备和介质 |
CN113515364A (zh) * | 2021-09-14 | 2021-10-19 | 腾讯科技(深圳)有限公司 | 一种数据迁移的方法及装置、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111190883A (zh) | 数据迁移方法、装置、计算机可读存储介质和计算机设备 | |
US11068449B2 (en) | Data migration method, apparatus, and storage medium | |
CN108769212B (zh) | 数据同步方法、装置、计算机设备和存储介质 | |
CN108319719B (zh) | 数据库数据校验方法、装置、计算机设备和存储介质 | |
CN110209652A (zh) | 数据表迁移方法、装置、计算机设备和存储介质 | |
CN108205560B (zh) | 一种数据同步方法以及装置 | |
CN106899654B (zh) | 一种序列值生成方法、装置及系统 | |
WO2018177205A1 (zh) | 回归测试方法、装置、计算机设备和存储介质 | |
KR20160100216A (ko) | 대량 오디오 지문 데이터베이스의 온라인 실시간 업데이트를 구축하는 방법과 장치 | |
CN111008241A (zh) | 数据同步方法、装置、存储介质和计算机设备 | |
CN111090701B (zh) | 业务请求处理方法、装置、可读存储介质和计算机设备 | |
CN107544894B (zh) | 一种日志处理的方法、装置及服务器 | |
CN112231324B (zh) | 一种实现增量数据比对的系统及方法 | |
CN110502574B (zh) | 跨系统的信息同步方法、用户设备、存储介质及装置 | |
CN110647421B (zh) | 数据库处理方法、装置、系统以及电子设备 | |
US11151157B2 (en) | Database management method | |
CN115827777A (zh) | 一种多数据源的自适应同步与差异识别方法、装置及设备 | |
CN112860585B (zh) | 一种测试脚本断言生成方法及装置 | |
CN113190531A (zh) | 一种数据库迁移方法、装置、设备和存储介质 | |
CN108897794B (zh) | 无主键数据表的同步方法、装置、存储介质和电子设备 | |
CN109947727B (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN113076068B (zh) | 一种数据存储方法、装置、电子设备及可读存储介质 | |
CN112052644A (zh) | 一种文档编辑的方法、装置、计算机存储介质及终端 | |
CN117349088B (zh) | 数据库增量回切方法、装置、设备及存储介质 | |
CN114969200B (zh) | 数据同步方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20230920 Address after: 100089 Beijing Haidian District Zhichun Road 49 No. 3 West 309 Applicant after: TENCENT CLOUD COMPUTING (BEIJING) Co.,Ltd. Address before: 518000 Tencent Building, No. 1 High-tech Zone, Nanshan District, Shenzhen City, Guangdong Province, 35 Floors Applicant before: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd. |