一种基于追日志的数据库扩展的方法及其装置
文献发布时间:2023-06-19 10:19:37
技术领域
本发明涉及数据库管理技术领域,特别是一种基于追日志的数据库扩展的方法及其装置。
背景技术
目前数据库扩展,主要包括:底层表结构变更、水平扩展,分库个数变化、底层存储介质变化等,常用的解决数据库扩展问题方案主要有2类:一、停服扩展,一般步骤是挂公告,暂停服务;离线迁移数据;最后恢复服务。存在的缺点是,这是一种离线的,非高可用方案,另外这个方案还有一个很大缺点,就是必须在指定的时间完成升级,一旦出现问题,比如数据不一致,必须在规定的时间内解决,否则只能回滚,也不能保证能按计划完成。二、采用“pt-online-schema-change的工具”进行扩展,这个是互联网公司中相对成熟的方案,缺点是只适用于MySQL数据库,也只适用于表结构变更,对于分库个数的变化等无法适用;同时需要用到数据库的触发器,因为触发器性能比较低,所以这个操作必须在流量的低峰期进行。
发明内容
为克服上述问题,本发明的目的是提供一种基于追日志的数据库扩展的方法,能异步地根据修改日志进行数据追平至完全一致,不会导致数据丢失。
本发明采用以下方案实现:一种基于追日志的数据库扩展的方法,所述方法包括如下步骤:
步骤S1、对旧服务进行升级,让服务同时操作新旧两库,记录数据修改的日志;
步骤S2、设置离线的数据迁移工具,将异步的数据进行同步;
步骤S3、根据修改的日志,进行日志追溯,根据日志补充增量的变化数据到新库;
步骤S4、同时进行数据校验,保证完全一致性后进行数据库流量迁移,对数据库的流量从旧库迁移到新库,改为由新库提供线上服务。
进一步的,所述步骤S1进一步具体为:对旧服务进行升级,记录数据修改的日志,该数据修改是对数据增、删、改的访问接口需要升级日志,这个日志要记录哪一个库、哪一个表、哪一个主键在什么时间被修改,该旧服务升级风险系数低,即第一、写接口的数量有限,则改动点相对比较少;第二、升级过程只是增加了一些日志,对业务功能没有任何影响。
进一步的,所述步骤S2进一步具体为:数据迁移工具将数据从旧库迁移到新库,整个过程中依然是旧库对线上提供服务;迁移任何时间发现问题,能把新库中的数据清掉重来;数据迁移工具的实现方式为:将旧库与新库进行数据对应起来,然后进行数据解析服务,将旧库的数据解析生成目标数据,将目标数据保存到新库中。
进一步的,所述步骤S3进一步具体为:旧库对线上提供服务,则会存在增量的变化数据,而这些数据都记录在所述日志里,记录具体时间、库、表、主键发生了写操作,由此,读取日志发现具体库、表、Key发生了变化,并将这些Key对应的数据从旧库中再次覆盖到新库中,来对迁移数据过程中产生的数据差异进行追平,该追平即为将读取日志发现具体库、表、Key发生了变化,并将这些Key对应的数据从旧库中再次覆盖到新库中形成一个执行事件,定时循环操作这个执行事件根据日志变化情况,将变化结果同步到新库中;迁移过程中当发生冲突时,以旧库中的数据为准,读日志、读Key、覆盖,中间出现问题能进行重来。
进一步的,所述步骤S4进一步具体为:将旧库中的数据与新库进行比较,进行数据质量检查,直到数据完全一致,才能进行修改配置迁库,服务对数据库的流量从旧库迁移到新库,由新库提供线上服务,此时能对数据库就行秒级的读操作,等日志重复程序完全追上之后,进行一个流量的切换。
本发明还提供了一种基于追日志的数据库扩展的装置,所述系统包括修改日志模块、数据迁移模块、数据补充模块、数据校验模块;
所述修改日志模块,用于对旧服务进行升级,让服务同时操作新旧两库,记录数据修改的日志;
所述数据迁移模块,用于设置离线的数据迁移工具,将异步的数据进行同步;
所述数据补充模块,用于根据修改的日志,进行日志追溯,根据日志补充增量的变化数据到新库;
所述数据校验模块,进行数据校验,保证完全一致性后进行数据库流量迁移,对数据库的流量从旧库迁移到新库,改为由新库提供线上服务。
进一步的,所述修改日志模块的实现方式进一步具体为:对旧服务进行升级,记录数据修改的日志,该数据修改是对数据增、删、改的访问接口需要升级日志,这个日志要记录哪一个库、哪一个表、哪一个主键在什么时间被修改,该旧服务升级风险系数低,即第一、写接口的数量有限,则改动点相对比较少;第二、升级过程只是增加了一些日志,对业务功能没有任何影响。
进一步的,所述数据迁移模块的实现方式进一步具体为:数据迁移工具将数据从旧库迁移到新库,整个过程中依然是旧库对线上提供服务;迁移任何时间发现问题,能把新库中的数据清掉重来;数据迁移工具的实现方式为:将旧库与新库进行数据对应起来,然后进行数据解析服务,将旧库的数据解析生成目标数据,将目标数据保存到新库中。
进一步的,所述数据补充模块的实现方式进一步具体为:旧库对线上提供服务,则会存在增量的变化数据,而这些数据都记录在所述日志里,记录具体时间、库、表、主键发生了写操作,由此,读取日志发现具体库、表、Key发生了变化,并将这些Key对应的数据从旧库中再次覆盖到新库中,来对迁移数据过程中产生的数据差异进行追平,该追平即为将读取日志发现具体库、表、Key发生了变化,并将这些Key对应的数据从旧库中再次覆盖到新库中形成一个执行事件,定时循环操作这个执行事件根据日志变化情况,将变化结果同步到新库中;迁移过程中当发生冲突时,以旧库中的数据为准,读日志、读Key、覆盖,中间出现问题能进行重来。
进一步的,所述数据校验模块的实现方式进一步具体为:将旧库中的数据与新库进行比较,进行数据质量检查,直到数据完全一致,才能进行修改配置迁库,服务对数据库的流量从旧库迁移到新库,由新库提供线上服务,此时能对数据库就行秒级的读操作,等日志重复程序完全追上之后,进行一个流量的切换。
本发明的有益效果在于:本发明的一种基于追日志的数据库扩展的方法及其装置,是高可用的平滑迁移方案,不影响线上业务,异步地根据修改日志进行数据追平至完全一致,同时任何一个步骤出现问题,均可退回重来,风险系数极低。
附图说明
图1是本发明的方法流程示意图。
图2是本发明的一实施例的流程示意图。
图3是本发明的一实施例中数据迁移工具的工作流程示意图。
图4是本发明的一实施例中数据迁移工具和数据校验的具体实现原理图。
图5是本发明的一实施例中数据库流量迁移的原理图。
图6是本发明的系统原理框图。
具体实施方式
下面结合附图对本发明做进一步说明。
请参阅图1所示,本发明的一种基于追日志的数据库扩展的方法,所述方法包括如下步骤:
步骤S1、对旧服务进行升级,让服务同时操作新旧两库,记录数据修改的日志;
步骤S2、设置离线的数据迁移工具,将异步的数据进行同步;
步骤S3、根据修改的日志,进行日志追溯,根据日志补充增量的变化数据到新库;
步骤S4、同时进行数据校验,保证完全一致性后进行数据库流量迁移,对数据库的流量从旧库迁移到新库,改为由新库提供线上服务。
下面结合一具体实施例对本发明作进一步说明:
请参阅图2所示,本发明的一种基于追日志的数据库扩展的方法,
步骤1:升级服务,记录日志
对旧服务进行升级,记录数据修改的日志,这里的修改主要是对数据增删改的访问接口需要升级日志,这个日志不需要记录详细的数据,只需要记录哪一个库、哪一个表、哪一个主键在什么时间被修改就可以了,所以日志的格式是相对标准化的,保证方案的通用性。其服务升级风险系数很低,第一,写接口的数量非常的有限,所以改动点相对比较少(系统业务大部分是读请求);第二,升级过程只是增加了一些日志,对业务功能没有任何影响。
步骤2:设置离线迁移数据工具,将异步的数据进行同步;
参阅图3所示,将数据从旧库迁移到新库,风险低,因为整个过程中,依然是旧库对线上提供服务;任何时间发现问题,可以把新库中的数据清掉重来,它是一个可以缓慢迁移的过程。数据迁移工具的实现方式为:将旧库与新库进行数据对应起来,然后进行数据解析服务,将旧库的数据解析生成目标数据,将目标数据保存到新库中。
步骤3:追日志,补充增量
因为是旧库对线上提供服务,所以会存在增量的变化数据,而这些数据都记录在“步骤1”中的日志里,具体时间、库、表、主键发生了写操作,基于此,研发一个读取日志发现具体库、表、Key发生了变化,并将这些Key对应的数据从旧库中再次覆盖到新库中,来对步骤2中迁移数据过程中产生的数据差异进行追平,该追平即为将读取日志发现具体库、表、Key发生了变化,并将这些Key对应的数据从旧库中再次覆盖到新库中形成一个执行事件,定时循环操作这个执行事件根据日志变化情况,将变化结果同步到新库中;这个追平,是一个无限逼近的过程;无论如何单发生冲突时,以旧库中的数据为准。读日志、读Key、覆盖,中间出现问题可以重来。
步骤4:校验数据
参阅图4所示,在持续步骤3的过程中,进行数据校验,将旧库中的数据与新库进行比较,直到数据完全一致,才能进行修改配置迁库。
步骤5:迁移流量
参阅图5所示,将旧库中的数据与新库进行比较,进行数据质量检查,直到数据完全一致,才能进行修改配置迁库,服务对数据库的流量从旧库迁移到新库,由新库提供线上服务,此时能对数据库就行秒级的读操作,等日志重复程序完全追上之后,秒级的进行一个流量的切换。
参阅图6所示,本发明还提供了一种基于追日志的数据库扩展的装置,所述系统包括修改日志模块、数据迁移模块、数据补充模块、数据校验模块;
所述修改日志模块,用于对旧服务进行升级,让服务同时操作新旧两库,记录数据修改的日志;
所述数据迁移模块,用于设置离线的数据迁移工具,将异步的数据进行同步;
所述数据补充模块,用于根据修改的日志,进行日志追溯,根据日志补充增量的变化数据到新库;
所述数据校验模块,进行数据校验,保证完全一致性后进行数据库流量迁移,对数据库的流量从旧库迁移到新库,改为由新库提供线上服务。
所述修改日志模块的实现方式进一步具体为:对旧服务进行升级,记录数据修改的日志,该数据修改是对数据增、删、改的访问接口需要升级日志,这个日志要记录哪一个库、哪一个表、哪一个主键在什么时间被修改,该旧服务升级风险系数低,即第一、写接口的数量有限,则改动点相对比较少;第二、升级过程只是增加了一些日志,对业务功能没有任何影响。
所述数据迁移模块的实现方式进一步具体为:数据迁移工具将数据从旧库迁移到新库,整个过程中依然是旧库对线上提供服务;迁移任何时间发现问题,能把新库中的数据清掉重来;数据迁移工具的实现方式为:将旧库与新库进行数据对应起来,然后进行数据解析服务,将旧库的数据解析生成目标数据,将目标数据保存到新库中。
所述数据补充模块的实现方式进一步具体为:旧库对线上提供服务,则会存在增量的变化数据,而这些数据都记录在所述日志里,记录具体时间、库、表、主键发生了写操作,由此,读取日志发现具体库、表、Key发生了变化,并将这些Key对应的数据从旧库中再次覆盖到新库中,来对迁移数据过程中产生的数据差异进行追平,该追平即为将读取日志发现具体库、表、Key发生了变化,并将这些Key对应的数据从旧库中再次覆盖到新库中形成一个执行事件,定时循环操作这个执行事件根据日志变化情况,将变化结果同步到新库中;这个追平,是一个无限逼近的过程;迁移过程中当发生冲突时,以旧库中的数据为准,读日志、读Key、覆盖,中间出现问题能进行重来。
其中,所述数据校验模块的实现方式进一步具体为:将旧库中的数据与新库进行比较,进行数据质量检查,直到数据完全一致,才能进行修改配置迁库,服务对数据库的流量从旧库迁移到新库,由新库提供线上服务,此时能对数据库就行秒级的读操作,等日志重复程序完全追上之后,秒级的进行一个流量的切换。
总之,本发明是一个高可用的平滑迁移方案,即能对旧服务进行升级,记录数据修改日志;研发离线的数据迁移工具,进行异步的数据同步;根据修改日志,进行日志追溯,补充增量到新库;同时进行数据校验,保证完全一致性后进行数据库流量迁移,改为新库提供线上服务。
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
- 一种基于追日志的数据库扩展的方法及其装置
- 一种基于日志解析的数据库修改列同步方法和装置