1.本发明涉及数据同步技术领域,具体涉及一种数据同步方法及装置。
背景技术:
2.mysql是目前应用最为广泛的关系型数据库管理系统之一,为达到主从数据库数据一致的目的,通常需要基于mysql进行主从数据库的数据同步。
3.目前进行主从数据库的数据同步的方式为:按照定时任务,定期从主数据库中读取增量数据并将其同步至从数据库。但是,采用定时任务进行数据同步的方式的实时性较差,无法满足当前的业务实时性需求。
技术实现要素:
4.有鉴于此,本发明实施例提供一种数据同步方法及装置,以解决现有数据同步方式存在的实时性较差等问题。
5.为实现上述目的,本发明实施例提供如下技术方案:
6.本发明实施例第一方面公开一种数据同步方法,所述方法包括:
7.在主数据库的数据发生变化时,与所述主数据库建立连接并获取目标日志位置;
8.接收由所述主数据库推送的二进制日志;
9.从所述二进制日志的所述目标日志位置开始,对所述二进制日志进行解析得到数据变化信息;
10.将解析得到的数据变化信息同步至从数据库。
11.优选的,将解析得到的数据变化信息同步至从数据库之后,还包括:
12.记录所述二进制日志完成解析时所解析到达的当前日志位置并将其进行存储;
13.在所述主数据库的数据再次发生变化时,与所述主数据库建立连接并将所述当前日志位置作为目标日志位置,返回执行接收由所述主数据库推送的二进制日志步骤。
14.优选的,与所述主数据库建立连接并获取目标日志位置之前,还包括:
15.执行预设程序,启动主数据库。
16.优选的,与所述主数据库建立连接,并获取目标日志位置,包括:
17.与所述主数据库建立连接;
18.若所述主数据库为第一次启动,获取预设日志位置并将其作为目标日志位置,所述预设日志位置为:所述主数据库的二进制日志的初始日志位置,或者,第一次启动所述主数据库时所述主数据库的日志位点;
19.若所述主数据库为非第一次启动,获取所述二进制日志上一次完成解析时所解析到达的日志位置并将其作为目标日志位置。
20.优选的,接收由所述主数据库推送的二进制日志,包括:
21.向所述主数据库发送同步指令,接收由所述主数据库推送的二进制日志,其中,所述主数据库在接收到所述同步指令时推送所述二进制日志。
22.优选的,将解析得到的数据变化信息同步至从数据库,包括:
23.创建包含解析得到的数据变化信息的测试表;
24.将所述测试表发送至从数据库。
25.本发明实施例第二方面公开一种数据同步装置,所述装置包括:
26.处理单元,用于在主数据库的数据发生变化时,与所述主数据库建立连接并获取目标日志位置;
27.接收单元,用于接收由所述主数据库推送的二进制日志;
28.解析单元,用于从所述二进制日志的所述目标日志位置开始,对所述二进制日志进行解析得到数据变化信息;
29.同步单元,用于将解析得到的数据变化信息同步至从数据库。
30.优选的,所述装置还包括:
31.记录单元,用于记录所述二进制日志完成解析时所解析到达的当前日志位置并将其进行存储;
32.相应的,所述处理单元还用于:在所述主数据库的数据再次发生变化时,与所述主数据库建立连接并将所述当前日志位置作为目标日志位置,执行所述接收单元。
33.本发明实施例第三方面公开一种电子设备,所述电子设备用于运行程序,其中,所述程序运行时执行如本发明实施例第一方面公开的数据同步方法。
34.本发明实施例第四方面公开一种计算机存储介质,所述存储介质包括存储程序,其中,在所述程序运行时控制所述存储介质所在设备执行如本发明实施例第一方面公开的数据同步方法。
35.基于上述本发明实施例提供的一种数据同步方法及装置,该方法为:在主数据库的数据发生变化时,与主数据库建立连接并获取目标日志位置;接收由主数据库推送的二进制日志;从二进制日志的目标日志位置开始,对二进制日志进行解析得到数据变化信息;将解析得到的数据变化信息同步至从数据库。本方案中,主数据库的数据发送变化时,获取由主数据库推送的二进制日志。解析二进制日志获取得到数据变化信息,并将数据变化信息同步至从数据库,保证数据同步的实时性,以满足业务实时性需求。
附图说明
36.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
37.图1为本发明实施例提供的一种数据同步方法的流程图;
38.图2(a)为本发明实施例提供的新增数据的示意图;图2(b)为本发明实施例提供的获取新增数据信息的示意图;
39.图3(a)为本发明实施例提供的修改数据的示意图;图3(b)为本发明实施例提供的获取修改数据信息的示意图;
40.图4(a)为本发明实施例提供的删除数据的示意图;图4(b)为本发明实施例提供的获取删除数据信息的示意图;
41.图5为本发明实施例提供的数据同步方法的架构示意图;
42.图6为本发明实施例提供的一种数据同步装置的结构框图。
具体实施方式
43.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
44.在本技术中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
45.由背景技术可知,目前采用定时任务的方式进行主从数据库的数据同步,但是此种数据同步的方式的实时性较差,无法满足当前的业务实时性需求。
46.因此,本发明实施例提供一种数据同步方法及装置,主数据库的数据发送变化时,获取由主数据库推送的二进制日志。解析二进制日志获取得到数据变化信息,并将数据变化信息同步至从数据库,保证数据同步的实时性,以满足业务实时性需求。
47.参见图1,示出了本发明实施例提供的一种数据同步方法的流程图,该数据同步方法包括:
48.步骤s101:在主数据库的数据发生变化时,与主数据库建立连接并获取目标日志位置。
49.可以理解的是,用户可通过第三方系统、主数据库的系统和主数据库的客户端,对主数据库中的数据进行操作,如:对主数据库中的数据进行修改,新增数据至主数据库中,删除主数据库中的数据。
50.在具体实现步骤s101的过程中,当对主数据库中的数据进行修改、删除或新增时,主数据库中的数据发生变化。当主数据库的数据发生变化时,与主数据库建立连接并获取目标日志位置。
51.优选的,实现步骤s101之前,执行预设程序,启动主数据库,使主数据库开启二进制日志(binlog)。
52.在一些具体实施例中,与主数据库建立连接时,若该主数据库为第一次启动,获取预设日志位置并将其作为目标日志位置,该预设日志位置为:主数据库的二进制日志的初始日志位置(初始日志位置可指定),或者,第一次启动主数据库时主数据库的日志位点(binlog位点);若主数据库为非第一次启动,获取二进制日志上一次完成解析时所解析到达的日志位置并将其作为目标日志位置,上一次完成解析时所解析到达的日志位置指示:上一次解析二进制日志完成时所解析到达的位置(也就是表示上一次解析到达二进制日志的哪一位置)。
53.在一些具体实施例中,主数据库可以是mysql主库。
54.步骤s102:接收由主数据库推送的二进制日志。
55.在具体实现步骤s102的过程中,向主数据库发送同步指令,例如:向主数据库发送binlog_dump指令;其中,主数据库在接收到同步指令时推送二进制日志;向主数据库发送同步指令后,该主数据库开始推送二进制日志(binlog),此时接收由主数据库推送的二进制日志。
56.步骤s103:从二进制日志的目标日志位置开始,对二进制日志进行解析得到数据变化信息。
57.在具体实现步骤s103的过程中,从二进制日志的目标日志位置开始,对二进制日志进行协议解析,获取二进制日志中包含的数据变化信息。
58.例如:从二进制日志的目标日志位置开始,通过binlog parser对二进制日志进行协议解析,获取数据变化信息。
59.可以理解的是,当向主数据库中新增数据时,从二进制日志中所获取的数据变化信息为数据新增信息;当修改主数据库中的数据时,从二进制日志中所获取的数据变化信息为数据修改信息;当删除主数据库中的数据时,从二进制日志中所获取的数据变化信息为数据删除信息。为更好解释说明数据变化信息的具体内容,通过图2(a)、图2(b)、图3(a)、图3(b)、图4(a)和图4(b)进行举例说明。
60.向主数据库中增加如图2(a)的内容,图2(a)中的内容包含了各种语言对应的id、名称(name)和语言代码(lang_code);例如图2(a)的第1行数据,向主数据库增加id为“033b
……
53e065”、name为“丹麦语”和lang_code为“da”的数据。从二进制日志中获取的数据变化信息为数据新增信息,该数据新增信息如图2(b)。
61.修改主数据库中的数据时,修改内容如图3(a)所示,即将id为“033b
……
53e065”的数据对应的name修改为“汉语”,lang_code修改为“cn”。从二进制日志中获取的数据变化信息为数据修改信息,该数据修改信息如图3(b)。
62.删除主数据库中的数据,修改内容如图4(a)所示,将name为“英语”的数据从主数据库中删除。从二进制日志中获取的数据变化信息为数据删除信息,该数据删除信息如图4(b)。
63.步骤s104:将解析得到的数据变化信息同步至从数据库。
64.在具体实现步骤s104的过程中,解析二进制日志得到数据变化信息后,创建包含该数据变化信息的测试表;将所创建的测试表发送至从数据库,也就是将数据变化信息写入从数据库中,完成主数据库和从数据库之间的数据同步。
65.在一些具体实施例中,从数据库可以是redis、rocketmq、mongodb和es等。
66.优选的,将解析得到的数据变化信息同步至从数据库之后,记录二进制日志完成解析时所解析到达的当前日志位置并将其进行存储;所记录的当前日志位置也就是本次解析二进制日志完成时所解析到达的位置(也就是表示本次解析到达二进制日志的哪一位置)。
67.在一些具体实施例中,记录二进制日志本次完成解析的当前日志位置之后,在主数据库的数据再次发生变化时,与主数据库建立连接并将该当前日志位置作为目标日志位置(此时该当前日志位置可视为二进制日志上一次完成解析时所解析到达的日志位置)作为目标日志位置,继续执行步骤s102至步骤s104,再次进行主数据库和从数据库之间的数据同步。
68.也就是说,当主数据库的数据发生变化时,通过步骤s101至步骤s104进行主数据库和从数据库之间的数据同步。
69.在本发明实施例中,主数据库的数据发送变化时,与主数据库进行连接,获取由主数据库推送的二进制日志。解析二进制日志获取得到数据变化信息,并将数据变化信息同步至从数据库,保证数据同步的实时性,以满足业务实时性需求。
70.可以理解的是,本发明实施例所提及的一种数据同步方法及装置,可以应用在java端(该java端即为数据同步端),利用该java端模拟mysql的从数据库;当主数据库的数据发生变化时,由主数据库自动将变化的二进制日志推送到java端,java端采用上述本发明实施例图1各步骤的内容,解析二进制日志得到数据变化信息,再将数据变化信息同步到从数据库中。具体通过图5示出的数据同步方法的架构示意图进行举例说明。
71.图5中,用户通过系统、mysql客户端和第三方系统修改主数据库(图5中的mysql主库)的数据时,主数据库将变化的二进制日志推送到数据同步端,由数据同步端解析二进制日志得到数据变化信息,数据同步端再将数据变化信息写入redis、rocketmq、mongodb和es等从数据库。
72.与上述本发明实施例提供的一种数据同步方法相对应,参见图6,本发明实施例还提供了一种数据同步装置的结构框图,该数据同步装置包括:处理单元601、接收单元602、解析单元603和同步单元604;
73.处理单元601,用于在主数据库的数据发生变化时,与主数据库建立连接并获取目标日志位置。
74.优选的,处理单元601还用于:执行预设程序,启动主数据库。
75.相应的,在具体实现中,处理单元601具体用于:与主数据库建立连接;若主数据库为第一次启动,获取预设日志位置并将其作为目标日志位置,预设日志位置为:主数据库的二进制日志的初始日志位置,或者,第一次启动主数据库时主数据库的日志位点;若主数据库为非第一次启动,获取二进制日志上一次完成解析时所解析到达的日志位置并将其作为目标日志位置。
76.接收单元602,用于接收由主数据库推送的二进制日志。
77.在具体实现中,接收单元602具体用于:向主数据库发送同步指令,接收由主数据库推送的二进制日志,其中,主数据库在接收到同步指令时推送二进制日志。
78.解析单元603,用于从二进制日志的目标日志位置开始,对二进制日志进行解析得到数据变化信息。
79.同步单元604,用于将解析得到的数据变化信息同步至从数据库。
80.在具体实现中,同步单元604具体用于:创建包含解析得到的数据变化信息的测试表;将测试表发送至从数据库。
81.优选的,结合图6示出的内容,数据同步装置还包括:
82.记录单元,用于记录二进制日志完成解析时所解析到达的当前日志位置并将其进行存储。
83.相应的,处理单元601还用于:在主数据库的数据再次发生变化时,与主数据库建立连接并将当前日志位置作为目标日志位置,执行接收单元602。
84.在本发明实施例中,主数据库的数据发送变化时,与主数据库进行连接,获取由主
数据库推送的二进制日志。解析二进制日志获取得到数据变化信息,并将数据变化信息同步至从数据库,保证数据同步的实时性,以满足业务实时性需求。
85.优选的,本发明实施例还提供了一种电子设备,该电子设备用于运行程序,其中,程序运行时执行如上述实施例公开的数据同步方法。
86.优选的,本发明实施例还提供了一种计算机存储介质,存储介质包括存储程序,其中,在程序运行时控制存储介质所在设备执行如上述实施例公开的数据同步方法。
87.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
88.专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
89.对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
转载请注明原文地址:https://tc.8miu.com/read-1218.html