一种数据库的同步方法及装置与流程

专利2022-06-30  69


本申请涉及数据库管理领域,具体涉及一种数据库的同步方法,同时涉及一种数据库的同步装置。



背景技术:

数据库同步技术是目前应用系统处理的核心,不但应用系统需要向数据库进行增/删/改/查操作,同样数据仓库也需要从众多的数据库中获取不同交易数据来完善自身的数据集。数据同步主要有两个层面,一是通过后台程序编码实现数据同步,二是直接作用于数据库,在数据库层面实现数据的同步。

目前常用的一些数据库同步的方法:a、通过发布/订阅的方式实现同步,发布/订阅是sqlserver自带的一种数据库备份的机制,通过该机制可以快速的实现数据的备份同步,不用编写任何的代码;b、通过sqljob方式实现数据同步,通过sqljob定时作业的方式实现同步其基本原理就是通过目标服务器和源服务器的连接,然后通过编写sql语句,从源服务器中读取数据,再更新到目标服务器;c、通过servicebroker消息队列的方式实现数据同步,sqlserverservicebroker是数据库引擎的组成部分,为sqlserver提供队列和可靠的消息传递。既可用于使用单个sqlserver实例的应用程序,也可用于在多个实例间分发工作的应用程序。

从目前常用的一些数据库同步的方法可知,目前,不同类型的数据库之间的数据同步需要通过编写代码或通过应用程序实现。



技术实现要素:

本申请提供一种数据库的同步方法,解决了不同类型的数据库之间的数据同步不需要通过编写代码或通过应用程序实现的问题。

本申请提供一种数据库的同步方法,包括:

获取源数据库的二进制日志文件;

配置源数据库和目标数据库,解析所述二进制日志文件,生成对应的源数据库操作指令;将所述源数据库操作指令转换为目标数据库的操作指令;

执行所述目标数据库的操作指令完成数据库的同步操作。

优选的,所述获取源数据库的二进制日志文件,包括:

若数据库为mysql数据库,则获取binlog日志。

优选的,所述配置源数据库和目标数据库,包括:

配置源数据库的二进制日志文件的存放路径;

读取源数据库上次的同步位置;

在源数据库建立缓存区,将源数据库的二进制日志文件转换成文本并写入缓存区;

记录源数据库当前的同步位置;

建立目标数据库与源数据库的映射。

优选的,所述解析所述二进制日志文件,生成对应的源数据库操作指令,将所述源数据库操作指令转换为目标数据库的操作指令,具体的包括:

若源数据库为mysql数据库,则解析所述binlog日志;

根据所述binlog日志提取sql语句,并将所述sql语句转换为目标数据库sql语句;

将所述目标数据库sql语句转换成cmd指令。

优选的,根据所述binlog日志提取sql语句,包括:

按照mysql数据库的二进制日志的格式,提取关键的sql语句。

优选的,在将所述目标数据库sql语句转换成cmd指令的步骤之前,还包括:

加密所述目标数据库sql语句中的关键字段值。

优选的,所述执行所述目标数据库的操作指令完成数据库的同步操作,包括:

在所述目标数据库执行cmd指令,完成源数据库到目标数据库的同步操作。

优选的,在执行所述目标数据库的操作指令完成数据库的同步操作的步骤之后,还包括:

将执行过程写入日志;

将执行失败的命令保存至错误数据存放路径;

备份同步的数据。

优选的,所述源数据库和目标数据库,可以为不同类型的数据库。

本申请同时提供一种数据库的同步装置,包括;

日志获取单元,用于获取源数据库的二进制日志文件:

操作指令获取单元,用于配置源数据库和目标数据库,解析所述二进制日志文件,生成对应的源数据库操作指令;将所述源数据库操作指令转换为目标数据库的操作指令;

同步单元,用于执行所述目标数据库的操作指令完成数据库的同步操作。

本申请提供一种数据库的同步方法,通过解析源数据库的二进制日志文件,获得数据库的操作指令,使用操作指令完成源数据库至目标数据库的同步操作,解决了不同类型的数据库之间的数据同步不需要通过编写代码或通过应用程序实现的问题。

附图说明

图1是本申请实施例提供的一种数据库的同步方法流程示意图;

图2是本申请实施例涉及的一种基于二进制日志的数据库同应用架构图;

图3是本申请实施例涉及的源数据库到目标数据库的同步操作步骤示意图;

图4是本申请实施例提供的一种数据库的同步装置示意图。

具体实施方式

在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。

请参看图1,图1是本申请实施例提供的一种数据库的同步方法流程示意图,下面结合图1对本申请实施例提供方法进行详细说明。

步骤s101,获取源数据库的二进制日志文件。

数据库的日志通常都是以二进制编码格式存储的,数据库日志记录数据库的相关操作,包括增/删/改/查,所以,通过日志就可以了解数据库都执行了什么操作,在本申请中,将mysql数据库作为源数据库,greenplum数据库作为目标数据库,完成源数据库向目标数据库的同步操作,本申请的操作方法也适用于其他类型的数据库。

为了完成数据库的同步操作,首先是获取源数据库的二进制日志文件,源数据库为mysql数据库,那么就获取binlog日志。

步骤s102,配置源数据库和目标数据库,解析所述二进制日志文件,生成对应的源数据库操作指令;将所述源数据库操作指令转换为目标数据库的操作指令。

在获取了源数据库的二进制日志文件后,接下来就是配置源数据库,配置mysql数据库的二进制日志文件的存放路径,同时读取mysql数据库上次的同步位置,上次同步的位置也就是这次同步的开始位置,如果没有读取到上次的同步位置,那么就需要将整个数据库进行同步。然后在源数据库建立缓存区,将将源数据库的二进制日志文件转换成文件并写入缓存区,同时记录源数据库当前的同步位置。也就是日志文件的结束位置。配置完源数据库后,还需要配置目标数据库,配置目标数据库主要是建立目标数据库greenplum与源数据库mysql的映射。

配置完源数据库和目标数据库后,解析源数据库mysql的二进制日志文件,在解析之前,按照mysql二进制日志的格式将多余信息剔除,然后再根据所述binlog日志提取sql语句,具体的,按照mysql数据库的二进制日志的格式,提取关键的sql语句。sql语句就包括对数据库的增/删/改/查操作,这样提取了关键的sql语句,但是,提取的关键sql语句还需要根据实际需求进行加工处理,如图2中,有a银行接口模块、b银行接口模块、新银行接口模块,a银行接口模块和b银行接口模块是现有的,可以通过a银行系统或b银行系统的二进制日志提取的关键sql语句同步新银行系统,但是,各银行的接口模块只能完成特定的功能,而且a银行系统或b银行系统一些其他的数据对新银行系统来说,也是没有用处的,例如,新银行需要获取某个用户在银行的信誉度,而在其他银行的交易记录对新银行来说是没有用处的,所以,在其他银行的交易记录就不需要同步到新银行系统,而且银行接口也是为了完成用户信誉度而开设的,所以,需要根据实际需求进行加工处理,包括舍弃不必要字段,对部分字段值做特殊处理等。

在对源数据库mysql的sql语句处理完成后,将处理完成后的sql语句转换为目标数据库greenplum的sql语句,因为不同类型的数据库,sql语句的写法也会有所不同,所以需要进行转换,同时,如果数据库字段中包含一些关键字段值,例如,发票代码,发票号码等,为了保证数据的安全性,需要加密所述目标数据库greenplum的sql语句中的关键字段值。然后,将所述目标数据库greenplum的sql语句转换成cmd指令。

步骤s103,执行所述目标数据库的操作指令完成数据库的同步操作。

通过前面两个步骤,通过解析源目标数据库mysql的二进制日志文件,获得了目标数据库greenplum的同步操作的cmd指令,接下来就是执行cmd指令,完成源数据库mysql到目标数据库greenplum的同步操作。

在执行同步操作的同时,将执行过程写入日志。如果有执行失败的cmd指令,那么将执行失败的cmd指令保存至错误数据存放路径,通过执行过程的日志分析执行失败的cmd指令,找出错误原因,确定是否再次进行同步。在同步操作执行完成后,备份同步数据,完成源数据库mysql到目标数据库greenplum的同步操作。

源数据库到目标数据库的同步操作,其主要操作步骤见图3,其中mysql数据库和greenplum数据库作为源数据库和目标数据库可以进行对调,但源数据库和目标数据库不仅局限于这两种数据库,然后读取binlog日志文件,根据binlog日志文件生成对应的cmd指令或是命令,接着就执行cmd指令或命令,完成对目标数据库的同步操作。

另外,图2是本申请提供的一种基于二进制日志的数据库同应用架构图,如图2所示,在原有架构的基础上,增加了数据同步模块,完成新接入数据源向新银行系统的数据同步。

本申请同时提供一种数据库的同步装置400,请参看图4,其特征在于,包括;

日志获取单元410,用于获取源数据库的二进制日志文件:

操作指令获取单元420,用于配置源数据库和目标数据库,解析所述二进制日志文件,生成对应的源数据库操作指令;将所述源数据库操作指令转换为目标数据库的操作指令;

同步单元430,用于执行所述目标数据库的操作指令完成数据库的同步操作。

本申请提供的一种数据库的同步方法,通过解析源数据库的二进制日志文件,获得数据库的操作指令,使用操作指令完成源数据库至目标数据库的同步操作,解决了不同类型的数据库之间的数据同步不需要通过编写代码或通过应用程序实现的问题。

以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员依然可以对本发明的具体实施方式进行修改或者等同替换,而这些未脱离本发明精神和范围的任何修改或者等同替换,其均在申请待批的本发明的权利要求保护范围之内。


技术特征:

1.一种数据库的同步方法,其特征在于,包括:

获取源数据库的二进制日志文件;

配置源数据库和目标数据库,解析所述二进制日志文件,生成对应的源数据库操作指令;将所述源数据库操作指令转换为目标数据库的操作指令;

执行所述目标数据库的操作指令完成数据库的同步操作。

2.根据权利要求1所述的方法,其特征在于,所述获取源数据库的二进制日志文件,包括:

若数据库为mysql数据库,则获取binlog日志。

3.根据权利要求1所述的方法,其特征在于,所述配置源数据库和目标数据库,包括:

配置源数据库的二进制日志文件的存放路径;

读取源数据库上次的同步位置;

在源数据库建立缓存区,将源数据库的二进制日志文件转换成文本并写入缓存区;

记录源数据库当前的同步位置;

建立目标数据库与源数据库的映射。

4.根据权利要求1所述的方法,其特征在于,所述解析所述二进制日志文件,生成对应的源数据库操作指令,将所述源数据库操作指令转换为目标数据库的操作指令,具体的包括:

若源数据库为mysql数据库,则解析所述binlog日志;

根据所述binlog日志提取sql语句,并将所述sql语句转换为目标数据库sql语句;

将所述目标数据库sql语句转换成cmd指令。

5.根据权利要求4所述的方法,其特征在于,根据所述binlog日志提取sql语句,包括:

按照mysql数据库的二进制日志的格式,提取关键的sql语句。

6.根据权利要求4所述的方法,其特征在于,在将所述目标数据库sql语句转换成cmd指令的步骤之前,还包括:

加密所述目标数据库sql语句中的关键字段值。

7.根据权利要求1所述的方法,其特征在于,所述执行所述目标数据库的操作指令完成数据库的同步操作,包括:

在所述目标数据库执行cmd指令,完成源数据库到目标数据库的同步操作。

8.根据权利要求1或7所述的方法,其特征在于,在执行所述目标数据库的操作指令完成数据库的同步操作的步骤之后,还包括:

将执行过程写入日志;

将执行失败的命令保存至错误数据存放路径;

备份同步的数据。

9.根据权利要求1所述的方法,其特征在于,所述源数据库和目标数据库,可以为不同类型的数据库。

10.一种数据库的同步装置,其特征在于,包括;

日志获取单元,用于获取源数据库的二进制日志文件:

操作指令获取单元,用于配置源数据库和目标数据库,解析所述二进制日志文件,生成对应的源数据库操作指令;将所述源数据库操作指令转换为目标数据库的操作指令;

同步单元,用于执行所述目标数据库的操作指令完成数据库的同步操作。

技术总结
本发明公开了一种数据库的同步方法,包括:获取源数据库的二进制日志文件;配置源数据库和目标数据库,解析所述二进制日志文件,生成对应的源数据库操作指令;将所述源数据库操作指令转换为目标数据库的操作指令;执行所述目标数据库的操作指令完成数据库的同步操作,解决了不同类型的数据库之间的数据同步不需要通过编写代码或通过应用程序实现的问题。

技术研发人员:刘倞;朱兴;吴磊
受保护的技术使用者:航天信息股份有限公司
技术研发日:2019.12.31
技术公布日:2020.06.05

转载请注明原文地址: https://bbs.8miu.com/read-57834.html

最新回复(0)