CN107391634B - 数据迁移方法及装置 - Google Patents

数据迁移方法及装置 Download PDF

Info

Publication number
CN107391634B
CN107391634B CN201710556354.8A CN201710556354A CN107391634B CN 107391634 B CN107391634 B CN 107391634B CN 201710556354 A CN201710556354 A CN 201710556354A CN 107391634 B CN107391634 B CN 107391634B
Authority
CN
China
Prior art keywords
data
log
migrated
location information
point location
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
Application number
CN201710556354.8A
Other languages
English (en)
Other versions
CN107391634A (zh
Inventor
刘畅
李丹
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Qihoo Technology Co Ltd
Original Assignee
Beijing Qihoo Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Qihoo Technology Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201710556354.8A priority Critical patent/CN107391634B/zh
Publication of CN107391634A publication Critical patent/CN107391634A/zh
Application granted granted Critical
Publication of CN107391634B publication Critical patent/CN107391634B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/214Database 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)
  • Computing Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种数据迁移方法及装置,其中,方法包括:获取与待迁移的数据表相对应的全量数据,并根据待迁移的数据表对应的日志文件确定与全量数据相对应的日志点位信息;从日志文件中获取在日志点位信息之后产生的日志记录,确定与日志记录相对应的数据操作;针对全量数据执行所述数据操作,得到与待迁移的数据表相对应的迁移数据。采用本方案,可以在不影响线上业务的情况下,实现数据的迁移,提高数据迁移效率,并且保证了数据的实时同步。

Description

数据迁移方法及装置
技术领域
本发明涉及通信技术领域,具体涉及一种数据迁移方法及装置。
背景技术
随着信息技术的发展,信息系统更换或调整的频率也越来越高。例如, 测试数据库转移到线上业务数据库、老旧设备更新升级、对长时间超负荷的 设备进行维护操作或机房变更等诸多情形下均需对数据进行迁移,将一个数 据库中的数据迁移至另一个数据库。
但是,发明人在实现本发明的过程中发现,现有技术中至少存在下述缺 陷:现今通常将原数据库中的数据通过第三方数据容器转移到目标数据库。 例如,可将原数据库中的数据拷贝到磁盘,再通过磁盘拷贝至目标数据库中, 但该种方法数据迁移速度慢,无法实现原数据库和目标数据库中数据的实时 同步,并且在数据迁移过程中还会影响线上数据库的正常运行,造成业务的 中断;又或者,通过对原数据库扩充从库,再从扩充得到的从库中将数据迁 移至目标数据库中,但采用该种方法时从库也需要占用存储空间,导致资源浪费大,且目标数据库与原数据库中数据的同步延时性较高。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分 地解决上述问题的数据迁移方法及装置。
根据本发明的一个方面,提供了一种数据迁移方法,包括:获取与待迁 移的数据表相对应的全量数据,并根据所述待迁移的数据表对应的日志文件 确定与所述全量数据相对应的日志点位信息;从所述日志文件中获取在所述 日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作; 针对所述全量数据执行所述数据操作,得到与待迁移的数据表相对应的迁移 数据。
根据本发明的另一方面,提供了一种数据迁移装置,包括:获取模块, 适于获取与待迁移的数据表相对应的全量数据,并根据所述待迁移的数据表 对应的日志文件确定与所述全量数据相对应的日志点位信息;确定模块,适 于从所述日志文件中获取在所述日志点位信息之后产生的日志记录,确定与 所述日志记录相对应的数据操作;操作模块,适于针对所述全量数据执行所 述数据操作,得到与待迁移的数据表相对应的迁移数据。
根据本发明的又一方面,提供了一种电子设备,包括:处理器、存储器、 通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通 信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可 执行指令使所述处理器执行上述数据迁移方法对应的操作。
根据本发明的再一方面,提供了一种计算机存储介质,所述存储介质中 存储有至少一可执行指令,所述可执行指令使处理器执行如上述数据迁移方 法对应的操作。
根据本发明的数据迁移方法及装置,首先获取与待迁移的数据表相对应 的全量数据,实现数据的全量同步,并通过与该数据表对应的日志文件确定 与全量数据相对应的日志点位信息,从日志文件中获取在日志点位信息之后 产生的日志记录,确定与日志记录相对应的数据操作;最终针对全量数据执 行所述数据操作,实现数据的增量同步,从而得到与待迁移的数据表相对应 的迁移数据。由此可见,本方案可以在不影响线上业务的情况下,实现数据 的迁移,提高了数据迁移效率,并且保证了数据的实时同步,并避免了现有技术中扩充从库而带来的资源浪费。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技 术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它 目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本 领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的, 而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示 相同的部件。在附图中:
图1示出了根据本发明一个实施例提供的一种数据迁移方法的流程图;
图2示出了根据本发明另一个实施例提供的一种数据迁移方法的流程图;
图3示出了根据本发明一个实施例提供的一种数据迁移装置的结构框图;
图4示出了根据本发明一个实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示 了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不 应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地 理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例提供的一种数据迁移方法的流程图。 如图1所示,该方法包括:
步骤S110,获取与待迁移的数据表相对应的全量数据,并根据待迁移的 数据表对应的日志文件确定与所述全量数据相对应的日志点位信息。
其中,待迁移的数据表的数量可以为一个,也可以为多个,其与待迁移 的数据量有关。数据表中记录有一条或多条数据,待迁移的数据表相对应的 全量数据为待迁移的数据表中所有的数据。另外,由于实际业务中,数据表 中的数据是随时间动态变化的,因此,本步骤中获取的待迁移的数据表相对 应的全量数据实质上是指:在开始执行步骤S110的时刻,待迁移的数据表中 存储的全部数据。
其中,获取与待迁移的数据表相对应的全量数据时,可通过多种方式实 现。例如,可以直接将待迁移的数据表相对应的全量数据拷贝至目标数据库; 或者,也可以通过对全量数据中的每条数据进行解析,并生成相应的操作命 令(如执行插入操作的sql语句等),然后将该操作命令发送至目标数据库, 通过在目标数据库中执行该操作命令的方式将待迁移的数据表所对应的全量 数据迁移至目标数据库。并且,在本实施例中,不仅可以通过单线程实现上 述过程,也可以通过多线程实现上述过程。通过多个并行执行的线程能够大幅提升全量数据的迁移效率。
另外,数据库中含有记录数据库信息的各类日志文件,如查询日志、错 误日志、事务日志、和/或二进制日志等,其中某类日志中按照时间顺序和/ 或操作顺序记录有针对数据库中的各个数据表执行的数据操作(如,事务日 志或二进制日志等)。由于数据表中的每一条数据都是通过执行相应的数据 操作而录入的,因此,通过该类日志能够确定数据表在各个时刻所对应的数 据存储状态。为了便于确定各个数据操作的执行时间和/或执行顺序,该类日 志文件中包含多个按照时间顺序和/或操作顺序排列的日志点位信息,每个日志点位信息对应于一条或多条日志记录,一条日志记录对应于数据库中针对 至少一条数据执行的数据操作。相应地,在获取与待迁移的数据表相对应的 全量数据时,进一步通过该类日志文件确定与本步骤中获取的全量数据相对 应的日志点位信息。
可选的,本步骤中还可以通过获取原数据库相对应的备份数据(具体地, 可获取与待迁移数据相对应的备份数据),在目标数据库中创建与该备份数 据相对应的全量数据。进一步可选的,可通过确定备份数据的备份时间点, 根据原数据库对应的日志文件确定与该备份时间点相对应的日志点位信息, 并将该备份时间点相对应的日志点位信息作为与全量数据相对应的日志点位 信息。
步骤S120,从日志文件中获取在与全量数据相对应的日志点位信息之后 产生的日志记录,确定与所述日志记录相对应的数据操作。
具体地,日志文件中在与全量数据相对应的日志点位信息之后,记录有 在上述全量数据的基础上新增的操作信息。该新增的操作信息中包含对全量 数据的删除、更改、和/或插入等信息。
根据与全量数据相对应的日志点位信息之后产生的日志记录,可以获知 在该日志点位之后对原数据库中该全量数据执行的数据操作。可选的,可实 时获取原数据库中全量数据相对应的日志点位信息之后的每条日志记录,在 对该日志记录进行解析后获得原数据库执行过的数据操作信息,从而确定与 该日志记录相对应的数据操作。举例来说,根据一条bin_log日志信息:
“Query OK,0 rowsaffected(0.44sec)
insertinto yong.tb1 values(1,′tom′)”
可判断出其相应的数据操作为“insertinto yong.tb1 values(1,′tom′)”,即在yong.tb1表中插入数据“(1,′tom′)”。
步骤S130,针对全量数据执行上述数据操作,得到与待迁移的数据表相 对应的迁移数据。
根据步骤S120中确定的数据操作,对全量数据执行该数据操作,从而得 到与待迁移的数据表相对应的迁移数据,使目标数据库与待迁移数据库中的 数据实现同步更新。
由此可见,本实施例提供的数据迁移方法,首先获取与待迁移的数据表 相对应的全量数据,实现数据的全量同步,并通过与该数据表对应的日志文 件确定与全量数据相对应的日志点位信息,从日志文件中获取在日志点位信 息之后产生的日志记录,确定与日志记录相对应的数据操作;最终针对全量 数据执行所述数据操作,实现数据的增量同步,从而最终得到与待迁移的数 据表相对应的迁移数据。采用本方案可以在不影响线上业务的情况下,实现 数据的迁移,提高了数据迁移效率,保证了数据的实时同步,并避免了现有技术中扩充从库而带来的资源浪费。
图2示出了根据本发明另一个实施例提供的一种数据迁移方法的流程图。 如图2所示,该方法包括:
步骤S210,针对待迁移的数据表执行加锁操作,开启用于针对待迁移的 数据表执行快照处理的事务,并根据待迁移的数据表对应的日志文件确定与 待迁移的数据表相对应的全量数据相对应的日志点位信息。
其中,本实施例中的数据迁移方法可应用于原数据库向目标数据库的数 据迁移,其中,原数据库及目标数据库可以为关系型数据库,和/或原数据库 及目标数据库的类型可以相同,如可同为mysql数据库等。可选的,为了避 免由于临时文件而耗费大量的资源,也为了提高迁移效率,本实施例提供的 数据迁移方法在内存中执行。
本实施例中待迁移的数据表的数量可以为一个,也可以为多个,其与待 迁移的数据量有关。数据表中记录有1条或多条数据,待迁移的数据表相对 应的全量数据为待迁移的数据表中所有的数据。另外,由于实际业务中,数 据表中的数据是随时间动态变化的,因此,本步骤中确定的待迁移的数据表 相对应的全量数据实质上是指:在开始执行步骤S210的时刻,待迁移的数据 表中存储的全部数据。
具体地,为保证数据的一致性,在获取全量数据(对应后续步骤S220) 之前,需对待迁移的数据表执行加锁操作,加锁期间对待迁移的数据表无法 执行写操作。具体的锁的类型本领域人员可根据实际业务自行设置,例如可 对待迁移的数据表执行加表级锁,也可对待迁移的数据表执行加行级锁等, 本实施例对加锁的具体类型不做具体限定。
并且,根据待迁移的数据表对应的日志文件确定与待迁移的数据表相对 应的全量数据相对应的日志点位信息,具体地,将执行加锁操作后对应的日 志点位信息确定为与全量数据相对应的日志点位信息。数据库中含有记录数 据库信息的各类日志文件,如查询日志、错误日志、事务日志、和/或二进制 日志等。以bin_log日志(二进制日志)为例,其记录了对数据发生或潜在发 生更改的SQL语句,该日志文件的每个点位对应于一条或多条日志信息,一 条日志信息对应于对数据的一条或多条操作信息。
在对待迁移的数据表执行加锁操作后,开启用于针对待迁移的数据表执 行快照处理的事务。其中,快照为对数据库数据的只读静态视图,执行快照 处理后生成的快照数据与执行快照处理时的数据库中的数据状态保持一致。 所以,在对待迁移的数据表执行快照处理后,快照数据与待迁移的数据表所 对应的全量数据保持一致。可选的,当待迁移的数据表为多个时,开启用于 针对待迁移的数据表执行快照处理的事务可以由多个线程(或进程)并行处 理,从而提高快照处理速度,其中,一个线程(或进程)可对应一个或多个 待迁移数据表的快照处理事务,具体对应关系本领域技术人员可根据开设的 工作线程数及待迁移的数据表个数及容量等进行设定,本实施例不做具体限 定。
步骤S220,当执行快照处理的事务开启完毕后,针对待迁移的数据表执 行解锁操作,并根据与待迁移的数据表相对应的快照数据获取全量数据。
可选的,当由多个线程(或进程)执行快照处理的事务时,可对各个线 程(或进程)设置反馈信号,在执行快照处理的事务开启完毕后,反馈给主 线程(或进程)该事务开启完毕的信息。本步骤中当所有线程(或进程)快 照处理事务开启完毕后,视为执行快照处理的事务开启完毕。
当执行快照处理事务开启完毕后,对待迁移的数据表执行解锁操作,从 而原数据库可以对待迁移的数据表进行写操作。由于快照处理事务开启速度 快,对待迁移的数据表的锁定过程时间极短,所以不影响原数据库线上业务 的处理。
进一步地,可根据与待迁移的数据表相对应的快照数据获取全量数据。 可选的,在读取与待迁移的数据表相对应的快照数据后,对数据进行解析, 生成相应的操作命令,并将该操作命令发送至目标数据库,在目标数据库中 执行该操作命令,从而将待迁移的数据表所对应的全量数据同步至目标数据 库。例如,可从快照数据中读取预设数目数据(如1条,1万条,或快照数据 所有数据条数等),在对数据进行解析后,生成将该预设数目数据写入的SQL 语句,并将该SQL语句发送至目标数据库,在目标数据库中执行该SQL语句, 从而将数据同步至目标数据库,重复此操作直至与待迁移的数据表相对应的 快照数据中的所有数据均同步至目标数据库后,完成将待迁移的数据表所对 应的全量数据同步至目标数据库。可选的,根据与待迁移的数据表相对应的 快照数据获取全量数据可由多个线程并行处理,从而提高全量数据的获取效 率。
可选的,在根据与待迁移的数据表相对应的快照数据获取全量数据过程 中,可将当前已获取的数据记录在快照数据中对应的位置信息记录在预设的 第一进度表中,当获取全量数据的过程中断后再次执行时,可根据第一进度 表中记录的位置信息从快照数据中获取数据记录,从而可以实现全量数据的 断点续传。可选的,当由多个线程根据与待迁移的数据表相对应的快照数据 获取全量数据时,可在第一进度表中分别记录各个线程所获取的数据记录在 快照数据中对应的位置信息。例如,线程1已获取到Table1中第20条数据, 线程2已获取到Table2中第10条数据,线程3已获取到Table3中第4条数 据,则第一进度表rows_log中记录有:(worker1,Table1_20),(worker2, Table2_10),以及(worker3,Table3_4),随着工作线程对数据的不断获取,第 一进度表rows_log各个工作线程对应的进度值不断刷新。当某一、某几个、 或全部线程中断后,可根据rows_log记录的位置信息继续获取数据,如当 worker1中断后,rows_log记录的相应的位置信息为(worker1,Table1_23),则 worker1中断后再次执行时可继续获取Table1表中的第24条数据。
步骤S230,从日志文件中获取在与全量数据相对应的日志点位信息之后 产生的日志记录,确定与所述日志记录相对应的数据操作。
其中,原数据库日志文件中记录有对原数据库数据的操作信息。该操作 信息中包含对全量数据的删除、更改、和/或插入等信息。根据与全量数据相 对应的日志点位信息之后产生的日志记录,可以获知在该日志点位之后原数 据库中对全量数据执行的数据操作信息。
可选的,可优先从内存中获取与全量数据相对应的日志点位信息之后产 生的日志记录。以bin_log为例,其在内存中存在binlog_cache,binlog_cache 记录了对数据发生或潜在发生更改的SQL语句,当binlog_cache达到预设容 量,或预设时间时,需将binlog_cache中的数据写入磁盘,但由于磁盘数据读 写速度较慢,所以本步骤中可优选地从binlog_cache中读取日志文件中的日志 记录,以提高读取速度。
可选的,可实时获取原数据库中全量数据相对应的日志点位信息之后的 每条日志记录,并在获取后将该日志记录复制到目标数据库中,或者目标数 据库直接通过I/O线程从原数据库中获取日志记录。在对每条日志记录进行解 析后,获得原数据库中在步骤S210记录日志点位信息之后对全量数据的数据 操作信息,从而确定与该日志记录相对应的数据操作。举例来说,根据一条 bin_log日志信息:
“Query OK,0 rowsaffected(0.44sec)
insertinto yong.tb1 values(1,′tom′)”
可判断出其相应的数据操作为“insertinto yong.tb1 values(1,′tom′)”,即在yong.tb1表中插入数据“(1,′tom′)”。
由于日志文件中的日志点位通常对应于一条或多条日志记录,当与全量 数据相对应的日志点位信息对应于多条日志记录时,(其中,各个日志点位 信息根据预设的时间间隔进行设置,或者根据预设的日志记录条数进行设置, 如每隔5分钟设置一个日志点位,或每隔10条日志记录设置一个日志点位), 确定与全量数据相对应的日志点位信息所对应的多条日志记录中产生时间最 早的日志记录,并获取产生时间最早的日志记录以及在产生时间最早的日志 记录之后产生的各条日志记录。并且,当确定与日志记录相对应的数据操作 的操作类型为插入类型时,在后续的步骤S240中,进一步获取该数据操作对 应的主键信息,并判断全量数据中是否包含与该主键信息相同的数据记录, 若是,则根据该数据操作对与主键信息相同的数据记录进行替换。举例来说, 全量数据相对应的日志点位为102点位,102点位对应于10条日志记录,则 确定出102点位对应的10条日志记录中最早的日志记录为102-1,则获取 102-1之后的所有日志记录。若根据日志记录102-4确定是对主键为“1”的 数据执行插入操作时,则判断全量数据中是否包含与该主键信息相同的数据记录,若有,则将全量数据中的主键为“1”的数据进行替换,从而保证数据 库系统的幂等性。
可选的,在获取与全量数据相对应的日志点位信息之后产生的日志记录 时,可将当前已获取的日志记录在日志文件中对应的日志点位信息记录在预 设的第二进度表中,当获取在该日志点位信息之后产生的日志记录的过程中 断后再次执行时,可根据第二进度表中记录的日志点位信息从日志文件中获 取日志记录,从而可以实现数据的断点续传。进一步可选的,当第二进度表 中记录的日志点位信息对应于多条日志记录时,可确定第二进度表中记录的 日志点位信息所对应的多条日志记录中产生时间最早的日志记录,并获取产 生时间最早的日志记录以及在产生时间最早的日志记录之后产生的各条日志 记录。并且,在后续的步骤S240中,当确定与日志记录相对应的数据操作的 操作类型为插入类型时,获取所述数据操作对应的主键信息,并判断全量数 据中是否包含与所述主键信息相同的数据记录,若是,则根据所述数据操作 对与所述主键信息相同的数据记录进行替换。此处,本领域技术人员能够理 解的是,由于全量数据相对应的日志点位信息之后产生的日志记录往往为多 条,相应地,在后续的步骤S240中,通常会针对全量数据依次执行各条日志记录所对应的数据操作。相应地,在判断全量数据中是否包含与主键信息相 同的数据记录时,该全量数据是指:截至当前时刻,针对全量数据执行与当 前已获取的日志记录相对应的数据操作后的数据内容。例如,假设当前已经 在步骤S220获取的全量数据的基础上执行了N条日志记录所对应的数据操作 (N为大于或等于1的自然数),那么,当确定与第N+1条日志记录相对应 的数据操作的操作类型为插入类型时,获取与第N+1条日志记录相对应的数据操作对应的主键信息,并且,在步骤S220获取的全量数据的基础上执行了 N条日志记录所对应的数据操作后得到的数据中,判断是否包含与第N+1条 日志记录相对应的数据操作对应的主键信息相同的数据记录,若是,则根据 与第N+1条日志记录相对应的数据操作对与该主键信息相同的数据记录进行 替换。
举例来说,第二进度表position_log中的一个日志点位对应于10条日志 记录,当在102点位的第3条日志记录后发生中断时,position_log中记录的 当前已获取的日志记录在日志文件中对应的日志点位为102点位。当再次执 行时确定102点位所对应的多条日志记录中产生时间最早的日志记录为102-1 (102点位对应的第一条日志记录),则获取102-1之后产生的各条日志记录。 由上述可知,当在102点位的第3条日志记录后发生中断时,在再次执行时 获取的是102点位的第1条及其以后的日志记录,则使得获取的日志记录中 出现冗余数据,即102点位的第1条至第3条日志记录重复获取。若确定与 冗余日志记录102-2相对应的数据操作的操作类型为插入类型时,由于已执行 过该插入操作,碍于数据库中主键的唯一性,使得在对同一主键数据进行插 入时出现故障,所以当确定与日志记录102-2相对应的数据操作的操作类型为 插入类型时,获取数据操作对应的主键信息,并判断全量数据中是否已存在 与所述主键信息相同的数据记录,若是,则根据数据操作对与所述信息相同 的数据记录进行替换。例如,在mysql数据库中,当全量数据中已存在与主 键信息相同的数据记录时,可直接应用“replace_into”命令将所述主键信息 相同的数据记录进行替换。
步骤S240,针对全量数据执行所述数据操作,得到与待迁移的数据表相 对应的迁移数据。
具体地,根据步骤S230中确定的数据操作,对目标数据库中的全量数据 执行该数据操作,从而得到与待迁移的数据表相对应的迁移数据,使迁移数 据从原数据库中同步到目标数据库。例如,若步骤S230中确定与日志记录相 对应的数据操作为对table1中的主键值为“1”的数据进行删除,则在目标数 据库的全量数据中对table1中的主键值为“1”的数据执行删除操作。
具体实施时,步骤S230和步骤S240可以依次循环执行,直至符合预设 的结束条件。该预设的结束条件可以是原数据库与目标数据库精确同步,或 者,也可以是达到预设的同步点位。例如,每当通过步骤S230获取到至少一 条日志记录相对应的数据操作后,即通过步骤S240执行对应的数据操作,即: 步骤S230和步骤S240循环执行多次,从而实现实时更新的目的。或者,步 骤S240也可以在步骤S230获取到符合预设的结束条件时的全部日志记录所 对应的数据操作后执行一次。本发明对步骤S230和步骤S240的具体执行方 式不做限定。
可选的,当原数据库中包括多个数据表,且原数据库对应的日志文件的 数量为多个时,可创建多个并行执行的进程(多个并行执行的进程的数量可 根据原数据库对应的日志文件的数量和/或大小、以及同步完成时间等中的至 少一个来确定),每个进程分别对应于至少一个日志文件。则步骤S210中根 据待迁移的数据表对应的日志文件确定与待迁移的数据表相对应的全量数据 相对应的日志点位信息具体为:分别针对每个日志文件,确定该日志文件中 与所述备份时间点相对应的日志点位信息;将该日志文件中与所述备份时间 点相对应的日志点位信息提供给与该日志文件相对应的进程;而步骤S230具 体为:每个进程从该进程对应的日志文件中获取在所述日志点位信息之后产 生的日志记录,确定与所述日志记录相对应的数据操作;步骤S240则为每个 进程根据步骤S230中确定的数据操作,针对目标数据库中存储的全量数据执 行所述数据操作。
另外,本实施例中的数据迁移方法可应用于各类场景中,既可以实现两 个数据库之间的全部或部分数据的迁移,也可以实现同一数据库内部的数据 迁移。可选的,当本实施例中的原数据库作为主数据库,且该方法应用于快 速创建与主数据库同步的从数据库(即目标数据库)时,可根据预设的同步 判断条件确定目标数据库与原数据库中的数据是否同步,若判断目标数据库 与原数据库中的数据已同步,则不再对数据进行迁移,本方法结束;或者, 在判断出目标数据库与原数据库中的数据已同步时,根据原数据库和目标数据库的类型选择与其类型相对应的其他数据库同步方式(例如传统的或官方 的数据库同步方式)继续同步后续过程中新增的增量数据。其中,预设的同 步判断条件可以为:将当前执行的数据操作所对应的日志记录在日志文件中 的日志点位信息确定为第一日志点位信息;将当前产生时间最晚的日志记录 在所述日志文件中的日志点位信息确定为第二日志点位信息;若第一日志点 位信息与第二日志点位信息之间的间隔小于预设阈值,则确定目标数据库与 原数据库中的数据同步。预设的同步判断条件还可以为:将当前执行的数据操作所对应的日志记录在日志文件中的日志点位信息确定为第一日志点位信 息;若第一日志点位信息与预设的同步点位信息相同,则确定目标数据库与 原数据库中的数据同步;其中,预设的同步点位信息根据以下中的至少一项 确定:原数据库对应的日志文件的文件大小、与全量数据相对应的日志点位 信息等。在此,预设的同步判断条件本领域技术人员可自行设置,例如预设 的同步判断条件还可以为精准同步,即当原数据库与目标数据库中待迁移的 数据表完全同步时,本方法结束。
可选的,当目标数据库为包含多个存储节点的分布式数据库时,在步骤 步骤S210及步骤S220获取全量数据之后,可为全量数据中的各条数据记录 设置分布列;并根据所述分布列,将所述全量数据中的各条数据记录分别迁 移至目标数据库的各个存储节点中,具体地,针对全量数据中的每条数据记 录,根据分布列确定该数据记录中包含的分布键,并按照预设的分布规则确 定目标数据库中与分布键相对应的存储节点,并将该数据记录迁移到目标数 据库中与所述分布键相对应的存储节点中。并根据待迁移的数据表对应的日志文件确定与全量数据相对应的日志点位信息。在步骤S230从日志文件中获 取在所述日志点位信息之后产生的日志记录,确定与日志记录相对应的数据 操作之后,步骤S240针对目标数据库的各个存储节点中存储的全量数据执行 所述数据操作。具体地,与日志记录相对应的数据操作具体为多个按照时间 顺序依次排列的数据操作,则步骤S240进一步针对每个数据操作,根据分布 列确定与该数据操作相对应的数据记录中包含的分布键,并按照预设的分布 规则确定目标数据库中与所述分布键相对应的存储节点,针对与分布键相对应的存储节点中存储的全量数据执行所述数据操作。在此,预设的分布规则 可以为范围规则、和/或哈希规则等,本实施例不做具体限定。
可选的,当原数据库与目标数据库类型不同时,可将全量数据的各条数 据记录中符合预设的字段转换规则的字段进行转换,则步骤S240在执行每个 数据操作时,确定与该数据操作相对应的数据记录中包含的各个字段,针对 其中符合预设的字段转换规则的字段进行转换。进一步可选的,当目标数据 库为多个存储节点的分布式数据库时,将转换后的各条数据记录分别迁移至 所述目标数据库的各个存储节点中。
由此可见,本实施例提供的数据迁移方法,针对待迁移的数据表执行加 锁操作,从而保证数据的一致性,并在执行快照处理的事务开启完毕后,针 对待迁移的数据表执行解锁操作,由于快照处理的事务开启速度快,对待迁 移的数据表的锁定时间极短,从而不影响原数据库线上业务的处理;并且, 通过从快照数据中获取全量数据,避免了现有技术中从线上数据库获取数据 时对线上数据库业务的影响;并且可通过多个线程获取全量数据,提高了数 据迁移效率;并通过从日志文件中获取在与全量数据相对应的日志点位信息之后产生的日志记录,确定与日志记录相对应的数据操作,并针对全量数据 执行所述数据操作,从而实现数据的增量及实时同步。最终实现在不影响线 上业务的情况下,实现数据的迁移,提高了数据迁移效率,保证了数据的实 时同步,并避免了现有技术中扩充从库而带来的资源浪费;此外,本实施例 提供的数据迁移方法在内存中执行,从而进一步地提高了数据迁移效率,并 且本方法在执行过程中无临时文件的产生,从而进一步减少了系统资源的浪 费。
图3示出了根据本发明一个实施例提供的一种数据迁移装置的结构框图。 如图3所示,该装置包括:获取模块31、确定模块32、以及操作模块33。
获取模块31,适于获取与待迁移的数据表相对应的全量数据,并根据所 述待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信 息。
其中,获取模块31具体适于从原数据库中获取与待迁移的数据表相对应 的全量数据。
具体地,获取模块31适于针对待迁移的数据表执行加锁操作,开启用于 针对待迁移的数据表执行快照处理的事务;当所述事务开启完毕后,针对待 迁移的数据表执行解锁操作,并根据与待迁移的数据表相对应的快照数据获 取全量数据。
其中,将执行加锁操作后对应的日志点位信息确定为与全量数据相对应 的日志点位信息。数据库中含有记录数据库信息的各类日志文件,如查询日 志、错误日志、事务日志、和/或二进制日志等。以bin_log日志(二进制日志) 为例,其记录了对数据发生或潜在发生更改的SQL语句,该日志文件的每个 点位对应于一条或多条日志信息,一条日志信息对应于对数据的一条或多条 操作信息。
本实施例中待迁移的数据表的数量可以为一个,也可以为多个,其与待 迁移的数据量有关。数据表中记录有1条或多条数据,待迁移的数据表相对 应的全量数据为待迁移的数据表中所有的数据。另外,由于实际业务中,数 据表中的数据是随时间动态变化的,因此,本模块中确定的待迁移的数据表 相对应的全量数据实质上是指:在获取模块31执行获取与待迁移的数据表相 对应的全量数据的时刻,待迁移的数据表中存储的全部数据。
可选的,为保证数据的一致性,在获取全量数据之前,需对待迁移的数 据表执行加锁操作,加锁期间对待迁移的数据表无法执行写操作。具体的锁 的类型本领域人员可根据实际业务自行设置,例如可对待迁移的数据表执行 加表级锁,也可对待迁移的数据表执行加行级锁等,本实施例对加锁的具体 类型不做具体限定。
在对待迁移的数据表执行加锁操作后,开启用于针对待迁移的数据表执 行快照处理的事务。其中,快照为对数据库数据的只读静态视图,执行快照 处理后生成的快照数据与执行快照处理时的数据库中的数据状态保持一致。 所以,在对待迁移的数据表执行快照处理后,快照数据与待迁移的数据表所 对应的全量数据保持一致。
当执行快照处理事务开启完毕后,对待迁移的数据表执行解锁操作,从 而原数据库可以对待迁移的数据表进行写操作。由于快照处理事务开启速度 快,对待迁移的数据表的锁定过程时间极短,所以不影响原数据库线上业务 的处理。
进一步地,可根据与待迁移的数据表相对应的快照数据获取全量数据。 可选的,在读取与待迁移的数据表相对应的快照数据后,对数据进行解析, 生成相应的操作命令,并将该操作命令发送至目标数据库,在目标数据库中 执行该操作命令,从而将待迁移的数据表所对应的全量数据同步至目标数据 库。例如,可从快照数据中读取预设数目数据(如1条,1万条,或快照数据 所有数据条数等),在对数据进行解析后,生成将该预设数目数据写入的SQL 语句,并将该SQL语句发送至目标数据库,在目标数据库中执行该SQL语句, 从而将数据同步至目标数据库,重复此操作直至与待迁移的数据表相对应的 快照数据中的所有数据均同步至目标数据库后,完成将待迁移的数据表所对 应的全量数据同步至目标数据库
当待迁移的数据表为多个时,获取模块31进一步包括:多个并行处理的 线程,分别用于针对各个数据表开启对该数据表执行快照处理的事务,并根 据与该数据表相对应的快照数据获取所述全量数据。
采用多个线程(或进程)并行进行快照处理及根据快照数据获取权利数 据,可以大幅提高快照处理速度及全量数据的获取速度。其中,一个线程(或 进程)可对应一个或多个待迁移数据表的快照处理事务,具体对应关系本领 域技术人员可根据开设的线程(或进程)数及待迁移的数据表个数及容量等 进行设定,本实施例不做具体限定。可选的,当由多个线程(或进程)执行 快照处理的事务时,可对各个线程设置反馈信号,在执行快照处理的事务开 启完毕后,反馈给主线程该事务开启完毕的信息。本模块中当所有线程(或 进程)快照处理事务开启完毕后,视为执行快照处理的事务开启完毕。
可选的,获取模块31进一步适于:将当前已获取的数据记录在快照数据 中对应的位置信息记录在预设的第一进度表中;当获取全量数据的过程中断 后再次执行时,根据第一进度表中记录的位置信息从所述快照数据中获取数 据记录。
具体地,通过第一进度表可以实现全量数据的断点续传。可选的,当由 多个线程根据与待迁移的数据表相对应的快照数据获取全量数据时,可在第 一进度表中分别记录各个线程所获取的数据记录在快照数据中对应的位置信 息。
确定模块32,适于从日志文件中获取在所述日志点位信息之后产生的日 志记录,确定与日志记录相对应的数据操作。
其中,原数据库日志文件中记录有对原数据库数据的操作信息。该操作 信息中包含对全量数据的删除、更改、和/或插入等信息。根据与全量数据相 对应的日志点位信息之后产生的日志记录,可以获知在该日志点位之后原数 据库中对全量数据执行的数据操作信息。
可选的,可优先从内存中获取与全量数据相对应的日志点位信息之后产 生的日志记录。以bin_log为例,其在内存中存在binlog_cache,binlog_cache 记录了对数据发生或潜在发生更改的SQL语句,当binlog_cache达到预设容 量,或预设时间时,需将binlog_cache中的数据写入磁盘,但由于磁盘数据读 写速度较慢,所以本步骤中可优选地从binlog_cache中读取日志文件中的日志 记录,以提高读取速度。
可选的,可实时获取原数据库中全量数据相对应的日志点位信息之后的 每条日志记录,并在获取后将该日志记录复制到目标数据库中,或者目标数 据库直接通过I/O线程从原数据库中获取日志记录。在对每条日志记录进行解 析后,获得原数据库中在步骤S210记录日志点位信息之后对全量数据的数据 操作信息,从而确定与该日志记录相对应的数据操作。
当与全量数据相对应的日志点位信息对应于多条日志记录时,确定模块 32进一步适于:确定与全量数据相对应的日志点位信息所对应的多条日志记 录中产生时间最早的日志记录;获取产生时间最早的日志记录以及在所述产 生时间最早的日志记录之后产生的各条日志记录。其中,各个日志点位信息 根据预设的时间间隔进行设置,或者根据预设的日志记录条数进行设置。
并且,当确定与日志记录相对应的数据操作的操作类型为插入类型时, 操作模块33适于:当确定模块32确定的数据操作的操作类型为插入类型时, 获取所述数据操作对应的主键信息;判断全量数据中是否包含与所述主键信 息相同的数据记录,若是,则根据所述数据操作对所述与所述主键信息相同 的数据记录进行替换。
可选的,确定模块32进一步适于:将当前已获取的日志记录在日志文件 中对应的日志点位信息记录在预设的第二进度表中;当获取在日志点位信息 之后产生的日志记录的过程中断后再次执行时,根据第二进度表中记录的日 志点位信息从日志文件中获取日志记录。通过第二进度表可以实现数据的断 点续传。
进一步可选的,当第二进度表中记录的日志点位信息对应于多条日志记 录时,确定模块32进一步适于:确定第二进度表中记录的日志点位信息所对 应的多条日志记录中产生时间最早的日志记录;获取产生时间最早的日志记 录以及在产生时间最早的日志记录之后产生的各条日志记录。
并且,当确定与日志记录相对应的数据操作的操作类型为插入类型时, 操作模块33适于:获取数据操作对应的主键信息,并判断全量数据中是否包 含与所述主键信息相同的数据记录,若是,则根据所述数据操作对与所述主 键信息相同的数据记录进行替换。
操作模块33,适于针对全量数据执行确定模块32确定的数据操作,得到 与待迁移的数据表相对应的迁移数据。
其中,操作模块33适于将迁移数据从原数据库中同步到目标数据库。
具体地,根据确定模块32中确定的数据操作,对目标数据库中的全量数 据执行该数据操作,从而得到与待迁移的数据表相对应的迁移数据,使迁移 数据从原数据库中同步到目标数据库。
具体实施时,确定模块32和操作模块33可以依次循环执行,直至符合 预设的结束条件。该预设的结束条件可以是原数据库与目标数据库精确同步, 或者,也可以是达到预设的同步点位。例如,每当通过确定模块32获取到至 少一条日志记录相对应的数据操作后,即通过操作模块32执行对应的数据操 作,即:确定模块32和操作模块33循环执行多次,从而实现实时更新的目 的。或者,操作模块33也可以在确定模块32获取到符合预设的结束条件时 的全部日志记录所对应的数据操作后执行一次。本发明对确定模块32和操作 模块33的具体执行方式不做限定。
可选的,当原数据库中包括多个数据表,且原数据库对应的日志文件的 数量为多个时,则可创建多个并行执行的进程(多个并行执行的进程的数量 可根据原数据库对应的日志文件的数量和/或大小、以及同步完成时间等中的 至少一个来确定),每个进程分别对应于至少一个日志文件。则获取模块31 中根据待迁移的数据表对应的日志文件确定与待迁移的数据表相对应的全量 数据相对应的日志点位信息具体为:分别针对每个日志文件,确定该日志文 件中与所述备份时间点相对应的日志点位信息;将该日志文件中与所述备份 时间点相对应的日志点位信息提供给与该日志文件相对应的进程;而确定模 块32具体为:每个进程从该进程对应的日志文件中获取在所述日志点位信息 之后产生的日志记录,确定与所述日志记录相对应的数据操作;操作模块33 则为每个进程根据确定模块32中确定的数据操作,针对目标数据库中存储的 全量数据执行所述数据操作。进一步可选的,可根据预设的同步判断条件确 定目标数据库与原数据库中的数据是否同步,若判断目标数据库与原数据库 中的数据已同步,则本装置停止执行。其中,预设的同步判断条件可以为:将当前执行的数据操作所对应的日志记录在日志文件中的日志点位信息确定 为第一日志点位信息;将当前产生时间最晚的日志记录在所述日志文件中的 日志点位信息确定为第二日志点位信息;若第一日志点位信息与第二日志点 位信息之间的间隔小于预设阈值,则确定目标数据库与原数据库中的数据同 步。预设的同步判断条件还可以为:将当前执行的数据操作所对应的日志记 录在日志文件中的日志点位信息确定为第一日志点位信息;若第一日志点位 信息与预设的同步点位信息相同,则确定目标数据库与原数据库中的数据同 步;其中,预设的同步点位信息根据以下中的至少一项确定:原数据库对应 的日志文件的文件大小、与全量数据相对应的日志点位信息等。在此,预设 的同步判断条件本领域技术人员可自行设置,例如预设的同步判断条件还可 以为精准同步,即当原数据库与目标数据库中待迁移的数据表完全同步时, 本方法结束。
可选的,当目标数据库为包含多个存储节点的分布式数据库时,在获取 模块31获取全量数据之后,可为全量数据中的各条数据记录设置分布列;并 根据所述分布列,将所述全量数据中的各条数据记录分别迁移至所述目标数 据库的各个存储节点中,具体地,针对全量数据中的每条数据记录,根据分 布列确定该数据记录中包含的分布键,并按照预设的分布规则确定目标数据 库中与分布键相对应的存储节点,并将该数据记录迁移到目标数据库中与所 述分布键相对应的存储节点中。并根据待迁移的数据表对应的日志文件确定 与全量数据相对应的日志点位信息。在确定模块32从日志文件中获取在所述 日志点位信息之后产生的日志记录,确定与日志记录相对应的数据操作之后, 操作模块33针对目标数据库的各个存储节点中存储的全量数据执行所述数据 操作。具体地,与所述日志记录相对应的数据操作具体为多个按照时间顺序 依次排列的数据操作,则操作模块33进一步针对每个数据操作,根据分布列 确定与该数据操作相对应的数据记录中包含的分布键,并按照预设的分布规 则确定目标数据库中与所述分布键相对应的存储节点,针对与分布键相对应 的存储节点中存储的全量数据执行所述数据操作。在此,预设的分布规则范 围规则、和/或哈希规则等,本实施例不做具体限定。
可选的,当原数据库与目标数据库类型不同时,可将全量数据的各条数 据记录中符合预设的字段转换规则的字段进行转换,则操作模块33在执行每 个数据操作时,确定与该数据操作相对应的数据记录中包含的各个字段,针 对其中符合预设的字段转换规则的字段进行转换。进一步可选的,当目标数 据库为多个存储节点的分布式数据库时,将转换后的各条数据记录分别迁移 至所述目标数据库的各个存储节点中。
可选的,当目标数据库为多个不同类型的数据库时,可设置多个数据迁 移模块,用于针对不同类型的数据库提供相应的数据迁移方法,调用模块可 通过预设的调用接口对多个数据迁移模块进行调用。其中,预设的调用接口 可以为一个,其可以通过虚函数来实现。
由此可见,本实施例提供的数据迁移装置,针对待迁移的数据表执行加 锁操作,从而保证数据的一致性,并在执行快照处理的事务开启完毕后,针 对待迁移的数据表执行解锁操作,由于快照处理的事务开启速度快,对待迁 移的数据表的锁定时间极短,从而不影响原数据库线上业务的处理;并且, 通过从快照数据中获取全量数据,避免了现有技术中从线上数据库获取数据 时对线上数据库业务的影响;并且可通过多个线程获取全量数据,提高了数 据迁移效率;并通过从日志文件中获取在与全量数据相对应的日志点位信息之后产生的日志记录,确定与日志记录相对应的数据操作,并针对全量数据 执行所述数据操作,从而实现数据的增量及实时同步。最终实现在不影响线 上业务的情况下,实现数据的迁移,提高了数据迁移效率,保证了数据的实 时同步,并避免了现有技术中扩充从库而带来的资源浪费;此外,本实施例 提供的数据迁移方法在内存中执行,从而进一步地提高了数据迁移效率,并 且本方法在执行过程中无临时文件的产生,从而进一步减少了系统资源的浪 费。
根据本发明一个实施例提供了一种非易失性计算机存储介质,所述计算 机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意 方法实施例中的数据迁移方法。
图4示出了根据本发明一个实施例提供的一种电子设备的结构示意图, 本发明具体实施例并不对电子设备的具体实现做限定。
如图4所示,该电子设备可以包括:处理器(processor)402、通信接口(Communications Interface)404、存储器(memory)406、以及通信总线408。
其中:处理器402、通信接口404、以及存储器406通过通信总线408完 成相互间的通信。
通信接口404,用于与其它设备比如客户端或其它服务器等的网元通 信。
处理器402,用于执行程序410,具体可以执行上述数据迁移方法实施例 中的相关步骤。
具体地,程序410可以包括程序代码,该程序代码包括计算机操作指 令。
处理器402可能是中央处理器CPU,或者是特定集成电路ASIC (ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例 的一个或多个集成电路。电子设备包括的一个或多个处理器,可以是同一类 型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多 个CPU以及一个或多个ASIC。
存储器406,用于存放程序410。存储器406可能包含高速RAM存储 器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁 盘存储器。
程序410具体可以用于使得处理器402执行以下操作:
获取与待迁移的数据表相对应的全量数据,并根据所述待迁移的数据表 对应的日志文件确定与所述全量数据相对应的日志点位信息;
从所述日志文件中获取在所述日志点位信息之后产生的日志记录,确定 与所述日志记录相对应的数据操作;
针对所述全量数据执行所述数据操作,得到与待迁移的数据表相对应的 迁移数据。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固 有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描 述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何 特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的 内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本 发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未 详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个 或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时 被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开 的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求 中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映 的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循 具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自 适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以 把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可 以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者 单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴 随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或 者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴 随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相 似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其 它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组 合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权 利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使 用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理 器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当 理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本 发明实施例的数据迁移装置中的一些或者全部部件的一些或者全部功能。本 发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者 装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程 序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。 这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以 任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制, 并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实 施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要 求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件 之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括 有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干 装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具 体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单 词解释为名称。

Claims (22)

1.一种数据迁移方法,包括:
获取与待迁移的数据表相对应的全量数据,并根据所述待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息;
从所述日志文件中获取在所述日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作;
针对所述全量数据执行所述数据操作,得到与待迁移的数据表相对应的迁移数据;其中,所述获取与待迁移的数据表相对应的全量数据,并根据所述待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息的步骤具体包括:针对所述待迁移的数据表执行加锁操作,开启用于针对所述待迁移的数据表执行快照处理的事务;当所述事务开启完毕后,针对所述待迁移的数据表执行解锁操作,并根据与所述待迁移的数据表相对应的快照数据获取所述全量数据;其中,将执行加锁操作后对应的日志点位信息确定为与所述全量数据相对应的日志点位信息;
其中,所述获取与待迁移的数据表相对应的全量数据,并根据所述待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息,包括:
获取与待迁移的数据表对应的备份数据,并创建与所述备份数据对应的全量数据;
根据所述待迁移的数据表对应的日志文件确定与所述备份数据的备份时间点相对应的日志点位信息,并将所述备份时间点相对应的日志点位信息作为与全量数据相对应的日志点位信息。
2.根据权利要求1所述的方法,其中,当所述待迁移的数据表为多个时,所述开启用于针对所述待迁移的数据表执行快照处理的事务的步骤和/或所述根据与所述待迁移的数据表相对应的快照数据获取所述全量数据的步骤由多个线程并行处理。
3.根据权利要求1所述的方法,其中,所述根据与所述待迁移的数据表相对应的快照数据获取所述全量数据的步骤具体包括:
将当前已获取的数据记录在所述快照数据中对应的位置信息记录在预设的第一进度表中;
当获取所述全量数据的过程中断后再次执行时,根据所述第一进度表中记录的位置信息从所述快照数据中获取数据记录。
4.根据权利要求1-3任一所述的方法,其中,当所述与所述全量数据相对应的日志点位信息对应于多条日志记录时,所述从所述日志文件中获取在所述日志点位信息之后产生的日志记录的步骤具体包括:
确定与所述全量数据相对应的日志点位信息所对应的多条日志记录中产生时间最早的日志记录;
获取所述产生时间最早的日志记录以及在所述产生时间最早的日志记录之后产生的各条日志记录;
且所述针对所述全量数据执行所述数据操作的步骤具体包括:
当所述数据操作的操作类型为插入类型时,获取所述数据操作对应的主键信息;
判断所述全量数据中是否包含与所述主键信息相同的数据记录,若是,则根据所述数据操作对所述与所述主键信息相同的数据记录进行替换。
5.根据权利要求4所述的方法,其中,所述日志文件中包括多个日志点位信息;其中,各个日志点位信息根据预设的时间间隔进行设置,或者根据预设的日志记录条数进行设置。
6.根据权利要求1-3任一所述的方法,其中,所述从所述日志文件中获取在所述日志点位信息之后产生的日志记录的步骤具体包括:
将当前已获取的日志记录在所述日志文件中对应的日志点位信息记录在预设的第二进度表中;
当获取在所述日志点位信息之后产生的日志记录的过程中断后再次执行时,根据所述第二进度表中记录的日志点位信息从所述日志文件中获取日志记录。
7.根据权利要求6所述的方法,其中,当所述第二进度表中记录的日志点位信息对应于多条日志记录时,所述根据所述第二进度表中记录的日志点位信息从所述日志文件中获取日志记录的步骤具体包括:
确定所述第二进度表中记录的日志点位信息所对应的多条日志记录中产生时间最早的日志记录;
获取所述产生时间最早的日志记录以及在所述产生时间最早的日志记录之后产生的各条日志记录;
且所述针对所述全量数据执行所述数据操作的步骤具体包括:
当所述数据操作的操作类型为插入类型时,获取所述数据操作对应的主键信息;
判断所述全量数据中是否包含与所述主键信息相同的数据记录,若是,则根据所述数据操作对所述与所述主键信息相同的数据记录进行替换。
8.根据权利要求1-3任一所述的方法,其中,所述获取与待迁移的数据表相对应的全量数据的步骤具体为:从原数据库中获取与待迁移的数据表相对应的全量数据;
且所述得到与待迁移的数据表相对应的迁移数据的步骤进一步包括:将所述迁移数据从所述原数据库中同步到目标数据库。
9.根据权利要求8所述的方法,其中,所述原数据库与所述目标数据库的类型相同。
10.根据权利要求1-3任一所述的方法,其中,所述方法在内存中执行,应用于关系型数据库。
11.一种数据迁移装置,包括:
获取模块,适于获取与待迁移的数据表相对应的全量数据,并根据所述待迁移的数据表对应的日志文件确定与所述全量数据相对应的日志点位信息;
确定模块,适于从所述日志文件中获取在所述日志点位信息之后产生的日志记录,确定与所述日志记录相对应的数据操作;
操作模块,适于针对所述全量数据执行所述数据操作,得到与待迁移的数据表相对应的迁移数据;其中,所述获取模块具体适于:
针对所述待迁移的数据表执行加锁操作,开启用于针对所述待迁移的数据表执行快照处理的事务;
当所述事务开启完毕后,针对所述待迁移的数据表执行解锁操作,并根据与所述待迁移的数据表相对应的快照数据获取所述全量数据;
其中,将执行加锁操作后对应的日志点位信息确定为与所述全量数据相对应的日志点位信息;
其中,所述获取模块,具体适于:
获取与待迁移的数据表对应的备份数据,并创建与所述备份数据对应的全量数据;
根据所述待迁移的数据表对应的日志文件确定与所述备份数据的备份时间点相对应的日志点位信息,并将所述备份时间点相对应的日志点位信息作为与全量数据相对应的日志点位信息。
12.根据权利要求11所述的装置,其中,当所述待迁移的数据表为多个时,所述获取模块进一步包括:多个并行处理的线程,分别用于针对各个数据表开启对该数据表执行快照处理的事务,并根据与该数据表相对应的快照数据获取所述全量数据。
13.根据权利要求11所述的装置,其中,所述获取模块具体适于:
将当前已获取的数据记录在所述快照数据中对应的位置信息记录在预设的第一进度表中;
当获取所述全量数据的过程中断后再次执行时,根据所述第一进度表中记录的位置信息从所述快照数据中获取数据记录。
14.根据权利要求11-13任一所述的装置,其中,当所述与所述全量数据相对应的日志点位信息对应于多条日志记录时,所述确定模块具体适于:
确定与所述全量数据相对应的日志点位信息所对应的多条日志记录中产生时间最早的日志记录;
获取所述产生时间最早的日志记录以及在所述产生时间最早的日志记录之后产生的各条日志记录;
且所述操作模块具体适于:
当所述数据操作的操作类型为插入类型时,获取所述数据操作对应的主键信息;
判断所述全量数据中是否包含与所述主键信息相同的数据记录,若是,则根据所述数据操作对所述与所述主键信息相同的数据记录进行替换。
15.根据权利要求14所述的装置,其中,所述日志文件中包括多个日志点位信息;其中,各个日志点位信息根据预设的时间间隔进行设置,或者根据预设的日志记录条数进行设置。
16.根据权利要求11-13任一所述的装置,其中,所述确定模块具体适于:
将当前已获取的日志记录在所述日志文件中对应的日志点位信息记录在预设的第二进度表中;
当获取在所述日志点位信息之后产生的日志记录的过程中断后再次执行时,根据所述第二进度表中记录的日志点位信息从所述日志文件中获取日志记录。
17.根据权利要求16所述的装置,其中,当所述第二进度表中记录的日志点位信息对应于多条日志记录时,所述确定模块具体适于:
确定所述第二进度表中记录的日志点位信息所对应的多条日志记录中产生时间最早的日志记录;
获取所述产生时间最早的日志记录以及在所述产生时间最早的日志记录之后产生的各条日志记录;
且所述操作模块具体适于:
当所述数据操作的操作类型为插入类型时,获取所述数据操作对应的主键信息;
判断所述全量数据中是否包含与所述主键信息相同的数据记录,若是,则根据所述数据操作对所述与所述主键信息相同的数据记录进行替换。
18.根据权利要求11-13任一所述的装置,其中,所述获取模块具体适于:从原数据库中获取与待迁移的数据表相对应的全量数据;
且所述操作模块具体适于:将所述迁移数据从所述原数据库中同步到目标数据库。
19.根据权利要求18所述的装置,其中,所述原数据库与所述目标数据库的类型相同。
20.根据权利要求11-13任一所述的装置,其中,所述装置应用于关系型数据库。
21.一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如权利要求1-10中任一项所述的数据迁移方法对应的操作。
22.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如权利要求1-10中任一项所述的数据迁移方法对应的操作。
CN201710556354.8A 2017-06-30 2017-06-30 数据迁移方法及装置 Active CN107391634B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710556354.8A CN107391634B (zh) 2017-06-30 2017-06-30 数据迁移方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710556354.8A CN107391634B (zh) 2017-06-30 2017-06-30 数据迁移方法及装置

Publications (2)

Publication Number Publication Date
CN107391634A CN107391634A (zh) 2017-11-24
CN107391634B true CN107391634B (zh) 2021-04-09

Family

ID=60335459

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710556354.8A Active CN107391634B (zh) 2017-06-30 2017-06-30 数据迁移方法及装置

Country Status (1)

Country Link
CN (1) CN107391634B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108647270A (zh) * 2018-04-28 2018-10-12 尚谷科技(天津)有限公司 一种基于容错时间日志的数据迁移的方法
CN111625396B (zh) * 2019-02-27 2023-05-26 阿里云计算有限公司 备份数据的校验方法、服务器及存储介质
CN110688370A (zh) * 2019-10-12 2020-01-14 新奥(中国)燃气投资有限公司 一种数据迁移的方法及装置
CN111651426A (zh) * 2020-04-30 2020-09-11 平安科技(深圳)有限公司 数据迁移方法、装置及计算机可读存储介质
CN111813760B (zh) * 2020-05-29 2024-03-26 阿里巴巴集团控股有限公司 数据迁移方法以及装置
CN112417033A (zh) * 2020-10-19 2021-02-26 中国科学院计算机网络信息中心 一种分布式图数据库多节点数据一致性实现方法和系统
CN116414907A (zh) * 2021-12-30 2023-07-11 中兴通讯股份有限公司 数据库表的复制方法、装置、电子设备及存储介质
CN115129661B (zh) * 2022-08-30 2022-11-22 东方电气风电股份有限公司 一种风场监控系统服务器断电重启后数据迁移方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102981857A (zh) * 2012-12-04 2013-03-20 天津神舟通用数据技术有限公司 数据库集群的并行压缩海量数据装载方法
CN105528368A (zh) * 2014-09-30 2016-04-27 北京金山云网络技术有限公司 一种数据库迁移方法及装置
CN106293998A (zh) * 2015-05-29 2017-01-04 北京中科同向信息技术有限公司 一种基于快照技术的系统备份方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102982085B (zh) * 2012-10-31 2017-05-31 北京奇虎科技有限公司 数据迁移系统和方法
CN104424283A (zh) * 2013-08-30 2015-03-18 阿里巴巴集团控股有限公司 一种数据迁移的系统和数据迁移的方法
US9405643B2 (en) * 2013-11-26 2016-08-02 Dropbox, Inc. Multi-level lookup architecture to facilitate failure recovery
CN105183852B (zh) * 2015-09-08 2018-05-22 网易(杭州)网络有限公司 一种数据库迁移方法和装置
CN105718570B (zh) * 2016-01-20 2019-12-31 北京京东尚科信息技术有限公司 用于数据库的数据迁移方法和装置
CN106055698A (zh) * 2016-06-14 2016-10-26 智者四海(北京)技术有限公司 数据迁移方法、代理节点及数据库实例

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102981857A (zh) * 2012-12-04 2013-03-20 天津神舟通用数据技术有限公司 数据库集群的并行压缩海量数据装载方法
CN105528368A (zh) * 2014-09-30 2016-04-27 北京金山云网络技术有限公司 一种数据库迁移方法及装置
CN106293998A (zh) * 2015-05-29 2017-01-04 北京中科同向信息技术有限公司 一种基于快照技术的系统备份方法

Also Published As

Publication number Publication date
CN107391634A (zh) 2017-11-24

Similar Documents

Publication Publication Date Title
CN107391634B (zh) 数据迁移方法及装置
CN107391628B (zh) 数据同步方法及装置
CN104881494B (zh) 与Redis服务器进行数据同步的方法、装置和系统
CN108121782B (zh) 查询请求的分配方法、数据库中间件系统以及电子设备
US20180329930A1 (en) Upgrading systems with changing constraints
JP3779263B2 (ja) 共同作業システムのためのコンフリクトの解決
CN106933703B (zh) 一种数据库数据备份的方法、装置及电子设备
US8756196B2 (en) Propagating tables while preserving cyclic foreign key relationships
CN110309161B (zh) 一种数据同步方法、装置及服务器
CN108509462B (zh) 一种同步活动事务表的方法及装置
CN106874281B (zh) 实现数据库读写分离的方法和装置
CN109325016B (zh) 数据迁移方法、装置、介质及电子设备
JP2018200683A (ja) 自動化された試験システムの方法及び設計
CN107423404B (zh) 流程实例数据同步处理方法和装置
CN113094430B (zh) 一种数据处理方法、装置、设备以及存储介质
CN112596762A (zh) 一种滚动升级方法及装置
CN111930850A (zh) 数据校验方法、装置、计算机设备和存储介质
US20170011075A1 (en) Database system, information processing device, method and medium
CN111459913B (zh) 分布式数据库的容量扩展方法、装置及电子设备
WO2021082925A1 (zh) 一种交易处理的方法及装置
CN112035418A (zh) 多机房同步方法、计算设备及计算机存储介质
CN109710698B (zh) 一种数据汇聚方法、装置、电子设备及介质
CN111159020A (zh) 一种应用于同步软件测试的方法和装置
CN115956240B (zh) 基于增量克隆的数据库升级
CN113672591A (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
GR01 Patent grant
GR01 Patent grant