CN115617908A - 一种MySQL数据同步方法、装置、数据库终端、介质及系统 - Google Patents

一种MySQL数据同步方法、装置、数据库终端、介质及系统 Download PDF

Info

Publication number
CN115617908A
CN115617908A CN202211248602.XA CN202211248602A CN115617908A CN 115617908 A CN115617908 A CN 115617908A CN 202211248602 A CN202211248602 A CN 202211248602A CN 115617908 A CN115617908 A CN 115617908A
Authority
CN
China
Prior art keywords
database
transaction
data synchronization
mysql
storage module
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
Application number
CN202211248602.XA
Other languages
English (en)
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.)
Henan Xinghuan Zhongzhi Information Technology Co ltd
Transwarp Technology Shanghai Co Ltd
Original Assignee
Henan Xinghuan Zhongzhi Information Technology Co ltd
Transwarp Technology Shanghai 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 Henan Xinghuan Zhongzhi Information Technology Co ltd, Transwarp Technology Shanghai Co Ltd filed Critical Henan Xinghuan Zhongzhi Information Technology Co ltd
Priority to CN202211248602.XA priority Critical patent/CN115617908A/zh
Publication of CN115617908A publication Critical patent/CN115617908A/zh
Pending legal-status Critical Current

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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1438Restarting or rejuvenating
    • 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/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Quality & Reliability (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种MySQL数据同步方法、装置、数据库终端、介质及系统。所述方法包括:接收提交请求后,发送携带有确认请求的二进制日志到第二数据库,所述二进制日志中记录多个事务;接收到所述第二数据库返回的确认信息后,将事务标识发送至存储模块;在发生故障时,基于所述存储模块发送的最新事务标识完成事务回滚,以在所述第二数据库基于所述最新事务标识完成事务回滚后完成实现数据同步。本发明的技术方案通过存储模块中的事务标识进行数据同步,解决了第一数据库和第二数据库数据不一致的问题,实现MySQL无损切换的效果。

Description

一种MySQL数据同步方法、装置、数据库终端、介质及系统
技术领域
本发明实施例涉及数据库技术领域,尤其涉及一种MySQL数据同步方法、装置、数据库终端、介质及系统。
背景技术
MySQL集群通常指MySQL的主从复制架构。通常使用MySQL主从复制来解决MySQL的单点故障问题,其通过逻辑复制的方式把主库的变更同步到备库。由于主库和备库之间无法保证严格一致的模式,于是MySQL的主从复制带来了主从数据一致性的问题。
图1为MySQL半同步插件AfterSync模式的示意图,如图1所示,主库在调用binlogsync之后,commit之前需要等待从库的响应,这样只有在确认从库收到事务之后,事务才会提交,因此可以解决MySQL的主从复制带来的主从数据不一致性的问题。
上述现有技术中,在主库把二进制日志同步到从库之后,主库刷盘完成之前发生了故障,那么二进制日志内的事务在主库上是未提交成功的,但是由于从库已经接收到了二进制日志,并且执行成功,相当于在从库上多出了数据,从而会造成主库和从库数据不一致的问题。
发明内容
本发明提供了一种MySQL数据同步方法、装置、数据库终端、介质及系统,以解决第一数据库和第二数据库数据不一致的问题,实现了MySQL无损切换的效果。
根据本发明的一方面,提供了一种MySQL数据同步方法其特征在于,应用于第一数据库,所述方法包括:
接收提交请求后,发送携带有确认请求的二进制日志到第二数据库,所述二进制日志中记录多个事务;
接收到所述第二数据库返回的确认信息后,将事务标识发送至存储模块;
在发生故障时,基于所述存储模块发送的最新事务标识完成事务回滚,以在所述第二数据库基于所述最新事务标识完成事务回滚后实现数据同步。
根据本发明的另一方面,提供了一种MySQL数据同步方法,其特征在于,应用于第二数据库,所述方法包括:
接收第一数据库发送的携带有确认请求的二进制日志后,将所述二进制日志存储到中继日志中;
返回确认信息至所述第一数据库;
在发生故障时,基于所述存储模块发送的最新事务标识完成事务回滚,以在所述第一数据库基于所述最新事务标识完成事务回滚后实现数据同步。
根据本发明的另一方面,提供了一种MySQL数据同步装置,其特征在于,应用于第一数据库,所述装置包括:
第一发送模块,用于接收到提交请求后,发送携带有确认请求的二进制日志到第二数据库;
第二发送模块,用于接收到所述第二数据库返回的确认信息后,将事务标识发送至存储模块;
数据同步模块,用于在发生故障时,基于所述存储模块发送的最新事务标识完成事务回滚,以在所述第二数据库基于所述最新事务标识完成事务回滚后实现数据同步。
根据本发明的另一方面,提供了一种MySQL数据同步装置,其特征在于,应用于第二数据库,所述装置包括:
接收模块,用于接收第一数据库发送的携带有确认请求的二进制日志后,将所述二进制日志存储到中继日志中;
返回模块,用于返回确认信息至所述第一数据库;
数据同步模块,用于在发生故障时,基于所述存储模块发送的最新事务标识完成事务回滚,以在所述第一数据库基于所述最新事务标识完成事务回滚后实现数据同步。
根据本发明的另一方面,提供了一种第一数据库,其特征在于,所述第一数据库包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行应用于第一数据库的MySQL数据同步方法。
根据本发明的另一方面,提供了一种第二数据库,其特征在于,所述第二数据库包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行应用于第二数据库的MySQL数据同步方法。
根据本发明的另一方面,提供了一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行本发明任意实施例所述的MySQL数据同步方法。
根据本发明的另一方面,提供了一种MySQL数据同步系统,其特征在于,所述系统包括第一数据库、第二数据库以及存储模块,所述第一数据库分别与所述第二数据库以及所述存储模块相连;
所述第一数据库用于执行本发明一方面提供的MySQL数据同步方法;
所述第二数据库用于执行如本发明另一方面提供的MySQL数据同步方法;
所述存储模块用于存储事务标识。
本发明实施例的技术方案,通过存储模块发送的最新事务标识完成数据同步,解决了第一数据库和第二数据库数据不一致的问题,实现了MySQL无损切换的效果。
应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为MySQL半同步插件AfterSync模式的示意图;
图2为本发明实施例一提供的一种MySQL数据同步方法的流程示意图;
图3为本发明实施例二提供的一种MySQL数据同步方法的流程示意图;
图4为本发明实施例三提供的一种MySQL执行提交请求的流程示意图;
图5为本发明实施例三提供的一种MySQL数据同步方法的一种流程示意图;
图6为本发明实施例三提供的一种MySQL数据同步方法的另一种流程示意图;
图7为本发明实施例四提供的一种MySQL数据同步装置的结构示意图;
图8为本发明实施例五提供的一种MySQL数据同步装置的结构示意图;
图9为本发明实施例六提供的一种MySQL数据同步系统的结构示意图;
图10为本发明实施例六提供的一种MySQL数据同步系统的示例结构示意图;
图11示出了可以用来实施本发明的实施例的数据库终端的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。应当理解,本发明的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本发明的范围在此方面不受限制。
本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
需要注意,本发明中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
本发明实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
实施例一
图2为本发明实施例一提供的一种MySQL数据同步方法的流程示意图,该方法可适用于MySQL集群的主备数据库之间进行数据同步的情况,该方法可以由MySQL数据同步装置来执行,其中该装置可由软件和/或硬件实现,并一般集成在第一数据库终端,在本实施例中第一数据库可以为主数据库即主库。
如图2所示,本发明实施例一提供的一种MySQL数据同步方法,包括如下步骤:
S110、接收提交请求后,发送携带有确认请求的二进制日志到第二数据库,二进制日志中记录多个事务。
其中,提交请求可以为请求第一数据库将数据同步到第二数据库的请求,请求同步的数据可以包括第一数据库中新增或修改的数据。第二数据库可以为从数据库即从库,此处对第二数据库的个数不作具体限制。
其中,确认请求可以为带有确认信息的请求,此处对确认请求的具体形式不作限制。
二进制日志可以是记录第一数据库里的数据修改的相关语句即binlog。二进制日志的基本数据结构为标头和数据,标头可以包括二进制日志类型事件,创建时间,服务器信息等。数据可以是针对这个事务的具体信息所包含的所有数据修改。事务可以是访问并可能操作各种数据项的一个数据库操作序列。例如,在MySQL中,一个事务可以是一条SQL语句。本实施例中的二进制日志可以携带确认请求。
在本实施例中,对从何处接收提交请求以及接收提交请求的方式不作具体限制,例如,可以接收用户发送的提交请求。可以通过线程接收提交请求,可以通过线程将携带有确认请求的二进制日志发送到第二数据库。具体的,在第一数据库中包括用户线程UserTHD和标识处理线程Dump THD,通过用户线程接收用户发送的提交请求,通过用户线程将二进制日志写入标识处理线程,通过标识处理线程发送携带确认请求的二进制日志到第二数据库中的读写线程IO THD。
S120、接收到第二数据库返回的确认信息后,将事务标识发送至存储模块。
其中,确认信息可以由第二数据库在接收到二进制日志后发送,确认信息用以表征第二数据库已成功接收到第一数据库发送的携带有确认请求的二进制日志。每个事务都有对应的事务标识即GTID,事务标识可以为由第一数据库上生成的与事务绑定的唯一标识,唯一标识不仅在第一数据库中是唯一的,在MySQL集群内也是唯一的。可以通过标识处理线程将事务标识发送至存储模块,存储模块可以为负责存储MySQL当前事务标识的模块,存储模块可以为基于Raft协议的一致性存储。
进一步的,所述事务标识由当前MySQL实例的唯一标识和当前MySQL实例上已经提交的事务数量组成,所述事务数量随着事务提交单调递增。
其中,GTID=server_uuid:transaction_id;server_uuid表示一个MySQL实例的唯一标识,根据server_uuid可以确定出由哪个server生成的binglog,transaction_id表示该实例上已经提交的事务数量。
示例性的,事务标识3E11FA47-71CA-11E1-9E33-C80AA9429562:1由当前MySQL实例的唯一标识3E11FA47-71CA-11E1-9E33-C80AA9429562和当前MySQL实例上已经提交的事务数量1组成。
可以理解的是,一个提交的事务可以与一个事务标识对应,第一数据库仅发送事务标识给存储模块,一个事务标识一般不超过64字节,可以大大减轻存储模块的存储压力。
S130、在发生故障时,基于存储模块发送的最新事务标识完成事务回滚,以在所述第二数据库基于所述最新事务标识完成事务回滚后实现数据同步。
本实施例中,对故障的具体内容不作限制,示例性的,故障可以包括网络故障、断电故障以及宕机故障。故障发生的时机可以为在二进制日志发送给第二数据库,并且第二数据库将数据落盘成功后,但是未将确认信息成功发送至第一数据库或在第一数据库中的数据修改未来得及落盘的情况下发生故障。
其中,最新事务标识可以为故障发生前存储模块最后存储的一个事务标识。
本实施例中,在发生故障时,第一数据库和第二数据都可以从存储模块中获取最新事务标识,通过最新事务标识的最大事务数量与本地磁盘中事务标识的最大事务数量进行对比,完成多余事务的回滚,以实现第一数据库和第二数据库的数据同步。
本实施例中,将事务标识发送至存储模块存储可以在第一数据库接收到第二数据库反馈的确认信息之后,在第二数据库进行数据落盘之前,于此可以确保最新事务标识中的事务数量始终不会大于第二数据库本地保存的最大事务数量,也不会小于第一数据库本地保存的最大事务数量。
进一步的,基于所述存储模块发送的最新事务标识完成事务回滚包括:从所述存储模块获取最新事务标识,将所述最新事务标识中的最大事务数量作为第一最大事务数量;获取本地磁盘中存储的事务标识中的最大事务数量作为第二最大事务数量;若所述第二最大事务数量大于所述第一最大事务数量,则回滚掉所述事务标识中的多余部分对应的事务,所述多余部分为所述第二最大事务数量多于所述第一最大事务数量的部分;将所述第一数据库降级为第二数据库。
示例性的,若存储模块的最新事务标识为da0cd243-116a-11ed-b46d-525400bdfd18:1-699061,则最新事务标识中的最大事务数量即第一最大事务数量为699061;若本地磁盘中存储的事务标识为da0cd243-116a-11ed-b46d-525400bdfd18:1-699063则本地磁盘中存储的事务标识中的最大事务数量即第二最大事务数量为699063,此时第一最大事务数量小于第二最大事务数量,因此可以将本地磁盘中的多余事务进行回滚操作,本地磁盘中的多余事务可以为事务数量标识为699062和699063的事务。
可以理解的是,在完成多余事务的回滚操作后,需要将第一数据库降级为第二数据库。与此同时,第二数据库也可以基于最新事务标识完成多余事务的回滚操作,当第一数据库和第二数据库都完成事务回滚操作后,即可实现数据同步。
进一步的,未发生故障时,在接收到所述存储模块的响应后,将所述二进制日志落盘到本地磁盘上,将所述事务标识落盘到所述二进制日志中,落盘完成后将提交命令返回给用户。
其中,存储模块可以通过多种方式进行响应,示例性的,存储模块在接收到事务标识后通过向第一数据库发送存储确认信息的方式进行响应。
本实施例中,事务标识也会落盘到MySQL的二进制日志中,当所有数据都落盘完成后,才会返回将提交命令返回给用户,用户收到后数据才真正提交成功。
本发明实施例一提供的一种MySQL数据同步方法,首先接收提交请求后,发送携带有确认请求的二进制日志到第二数据库,所述二进制日志中记录多个事务;然后接收到第二数据库返回的确认信息后,将事务标识发送至存储模块;最后在发生故障时,基于存储模块发送的最新事务标识完成事务回滚,以在所述第二数据库基于所述最新事务标识完成事务回滚后完成实现数据同步。该方法通过比较存储模块最新事务标识的事务数量与第一数据库事务标识中的最大事务数量,回滚掉第一数据库事务标识中多余事务标识对应的事务;在第二数据库基于所述最新事务标识完成事务回滚后,实现第一数据库和第二数据库的数据同步。本方案解决了第一数据库和第二数据库数据不一致的问题,此外,该方法只同步携带有事务标识的数据达到MySQL无损切换的效果;只同步携带事务标识的数据,数据量小,可以避免其他比如类似MySQL Replication Group或者其他类似方案需要通过一致性协议同步所有MySQL数据,可以避免MySQL大事务导致同步效率低的问题。
实施例二
图3为本发明实施例二提供的一种MySQL数据同步方法的流程示意图。该方法可适用于MySQL集群的主备数据库之间进行数据同步的情况,该方法可以由MySQL数据同步装置执行,其中该装置可由软件和/或硬件实现,并一般集成在第二数据库终端,本实施例中第二数据库可以为从数据库即从库。
如图3所示,本发明实施例二提供的一种MySQL数据同步方法,包括如下步骤:
S210、接收第一数据库发送的携带有确认请求的二进制日志后,将二进制日志存储到中继日志中。
其中,中继日志可以是第二数据库中的一个中间文件,中继日志可以存放第一数据发送的二进制日志中的事务。
在本实施例中,对接收二进制日志及存储到中继日志的方式不作具体限制,例如,可以通过线程接收第一数据库发送的携带有确认请求的二进制日志并存储到中继日志中。具体的,在第二数据库中,通过I/O线程接收第一数据库发送的携带有确认请求的二进制日志并存储到中继日志。
S220、返回确认信息至第一数据库。
其中,确认信息可以由第二数据库在接收到二进制日志后发送,确认信息用以表征第二数据库已成功接收到第一数据库发送的携带有确认请求的二进制日志。
S230、在发生故障时,基于存储模块发送的最新事务标识完成事务回滚,以在所述第一数据库基于所述最新事务标识完成事务回滚后实现数据同步。
本实施例中,对故障的具体内容不作限制,示例性的,故障可以包括网络故障、断电故障以及宕机故障。故障发生的时机可以为在二进制日志发送给第二数据库,并且第二数据库将数据落盘成功后,但是未将确认信息成功发送至第一数据库或在第一数据库中的数据修改未来得及落盘的情况下发生故障。
其中,最新事务标识可以为故障发生前存储模块最后存储的一个事务标识。
本实施例中,在发生故障时,第一数据库和第二数据库都可以从存储模块中获取最新事务标识,通过最新事务标识的最大事务数量与本地磁盘中事务标识的最大事务数量进行对比,完成多余事务的回滚,以实现第一数据库和第二数据库的数据同步。
本实施例中,将事务标识发送至存储模块存储可以在第一数据库接收到第二数据库反馈的确认信息之后,在第二数据库进行数据落盘之前,于此可以确保最新事务标识中的事务数量始终不会大于第二数据库本地保存的最大事务数量,也不会小于第一数据库本地保存的最大事务数量。
进一步的,所述基于存储模块发送的最新事务标识完成事务回滚,以在所述第一数据库基于所述最新事务标识完成事务回滚后实现数据同步,包括:从所述存储模块获取最新事务标识;确定所述中继日志中存储的事务数量是否大于所述最新事务标识中的最大事务数量;若是,则回滚掉所述中继日志中存储的多余事务;升级为新的第一数据库,以完成数据同步。若否,则将所述第二数据库升级为新的第一数据库,以完成数据同步。
示例性的,若存储模块的最新事务标识为da0cd243-116a-11ed-b46d-525400bdfd18:1-699061,则最新事务标识中的最大事务数量为699061;若中继日志中存储的事务标识为da0cd243-116a-11ed-b46d-525400bdfd18:1-699063则中继日志中存储的事务标识中的最大事务数量为699063,此时中继日志中存储的事务数量大于最新事务标识中的最大事务数量,因此可以则将中继日志中的多余事务进行回滚操作,中继日志中的多余事务可以为事务数量标识为699062和699063的事务。
本实施例中,当中继日志中存储的事务数量大于最新事务标识中的最大事务数量时,回滚掉中继日志中多余的事务。与此同时,第一数据库也可以基于最新事务标识完成多余事务的回滚操作,当第一数据库和第二数据库都完成事务回滚操作后,即可实现数据同步。
可以理解的是,在发生故障后,需要将第二数据库升级为第一数据库,以继续进行数据同步。
本发明实施例二提供的一种MySQL数据同步方法,首先接收第一数据库发送的携带有确认请求的二进制日志后,将二进制日志存储到中继日志中;然后返回确认信息至第一数据库;最后在发生故障时,基于存储模块发送的最新事务标识完成事务回滚,以在所述第一数据库基于所述最新事务标识完成事务回滚后实现数据同步。该方法通过比较存储模块最新事务标识的事务数量与第二数据库事务标识中的最大事务数量,回滚掉第二数据库事务标识中多余事务标识对应的事务;在第一数据库基于所述最新事务标识完成事务回滚后实现第二数据库和第一数据库的数据同步。本方案解决了第二数据库和第一数据库数据不一致的问题,通过存储模块只同步数据库的具有事务标识的数据实现了MySQL无损切换的效果。
实施例三
本发明实施例三在上述各实施例的技术方案的基础上,提供了一种具体的实施方式。作为本实施一种具体的实施方式,图4为本发明实施例三提供的一种MySQL执行提交请求的流程示意图。如图4所示,具体包括以下过程:
MySQL Master即第一数据库通过User THD即用户线程接收Commit即用户发送的提交请求,通过Dump THD Send Events With Ack Request即标识处理线程发送携带有确认请求的二进制日志到MySQL Slave即第二数据库。
MySQL Slave接收到MySQL Master发送的Events With Ack Request后,通过读写线程IO THD返回ACK至MySQL Master。
MySQL Master中的Dump THD接收到MySQL Slave返回的ACK后,Write GTID to KV即将事务标识发送至Raft KV模块。
Raft KV模块发送Write GTID to KV Done给Dump THD即存储模块发送事务标识写入完成命令给标识处理线程。所有数据落盘后,用户的Commit命令才会返回给用户即Dump THD发送Commit Done命令给User THD,用户收到后数据才真正提交成功。
图5为本发明实施例三提供的一种MySQL数据同步方法的一种流程示意图。如图5所示,具体包括以下过程:
MySQL Master Insert Into…Commit即接收提交请求后,根据提交请求准备写入二进制日志即Write Binlog(Prepare),MySQL Master Send Binglog Events to SlaveWith Ack Request即将携带有确认请求的二进制日志发送到第二数据库。
MySQL Slave Receive Binlog Events&Save To Relaylog即第二数据库接收第一数据库发送的携带有确认请求的二进制日志后,将二进制日志存储到中继日志中后返回ACK即确认信息至MySQL Master。
MySQL master Receive Slave Ack即第一数据库接收到第二数据库返回的确认信息后,Send Current GTID To KV Store即将当前事务标识发送至存储模块。
KV GTID Store Receive GTID&Save To Disk即存储模块接收事务标识并保存到存储模块的本地磁盘中。
MySQL Maste Receive KV Store Ack即第一数据库接收存储模块的确认命令后,Sync Binlog To Disk即将二进制日志同步到本地磁盘,Commit Done即完成提交请求。
图6为本发明实施例三提供的一种MySQL数据同步方法的另一种流程示意图。如图6所示,具体包括以下流程:
MySQL Master Insert Into…Commit即第一数据库接收提交提交请,根据提交请求准备写二进制日志即Write Binlog(Prepare),Send Binglog Events to Slave WithAck Request即将携带有确认请求的二进制日志到第二数据库。
MySQL Slave Receive Binlog Events&Save To Relaylog即第二数据库接收第一数据库发送的携带有确认请求的二进制日志后,将二进制日志存储到中继日志中。将二进制日志存储到中继日志后返回Ack确认信息至MySQL Master第一数据库。
MySQL Master Receive Slave Ack即第一数据库接收到第二数据库返回的确认信息后,Send Current GTID To KV Store即将当前事务标识发送至存储模块。
MySQL Master Crash即当第一数据库将当前事务标识发送至存储模块时发生故障,执行Promote Master Recover流程,具体流程如下:Get Newest Gtid即获取最新事务标识;当前KV Store存储的Gtid记为remote gtid即将当前存储模块存储的最新事务标识记为远程事务标识;当前本地relay log接收的最大gtid记录为local gtid即将本地中继日志中接收的当前最大事务标识记为本地最大事务标识;判断remote gtid是否包含localgtid即判断远程事务标识是否包含本地最大事务标识;若远程事务标识包含本地最大事务标识,则Set Readonly=False即将数据设置为可读可写,change to new master即将原先的第二数据库升级为新的第一数据库;若远程事务标识不包含本地最大事务标识,则根据remote gtid回滚掉local gtid中多余部分,即根据远程事务标识回滚掉本地最大事务标识中多余部分对应的事务;Set Readonly=False即将数据设置为可读可写;change tonew master即将原先的第二数据库降级为新的第一数据库,以提供Master服务。
MySQL Master Crash即当第一数据库将当前事务标识发送至存储模块时发生故障,执行Old Master Recover流程,具体流程如下:Set Readonly=True即将数据设置为只读,Get Newest Gtid即获取最新的事务标识;获取remote gtid是否成功即判断获取远程事务标识是否成功,若获取失败重新返回Get Newest Gtid;若获取成功,Newest Gtid记为remote gtid,获取本地最大gtid即获取本地最大事务标识;Remote gtid截取本地server最大部分和local gtid比较即远程事务标识截取本地服务器的最大部分和本地最大事务标识比较;Local gtid是否大于remote gtid即判断本地最大事务标识是否大于远程事务标识;若是,则回滚掉多余的local gtid部分即回滚掉本地事务标识多余部分对应的事务;change to new master即将原先的第一数据库降级为第二数据库;若否,则change to newmaster,并Receive Binglog Events&Save To Relaylog即接收二进制日志中的事务,并存储到中继日志中。
本实施例中,在发生故障时,第一数据库和第二数据都可以从存储模块中获取最新事务标识,通过最新事务标识的最大事务数量与本地磁盘中事务标识的最大事务数量进行对比,完成多余事务的回滚,以实现第一数据库和第二数据库的数据同步。
实施例四
图7为本发明实施例四提供的一种MySQL数据同步装置的结构示意图。本实施例可适用于MySQL集群的主备数据库之间进行数据同步的情况,该装置可采用软件和/或硬件的方式实现,该装置应用于第一数据库,如图7所示,所述MySQL数据同步装置具体包括:
第一发送模块710,用于接收到提交请求后,发送携带有确认请求的二进制日志到第二数据库;
第二发送模块720,用于接收到所述第二数据库返回的确认信息后,将事务标识发送至存储模块;
数据同步模块730,用于在发生故障时,基于所述存储模块发送的最新事务标识完成事务回滚,以在所述第二数据库基于所述最新事务标识完成事务回滚后实现数据同步。
相应的,所述事务标识由当前MySQL实例的唯一标识和当前MySQL实例上已经提交的事务数量组成,所述事务数量随着事务提交单调递增。
可选的,所述装置,还包括:
命令提交模块,用于未发生故障时,在接收到所述存储模块的响应后,将所述二进制日志落盘到本地磁盘上,将所述事务标识落盘到所述二进制日志中,落盘完成后将提交命令返回给用户。
可选的,所述数据同步模块730,包括:
第一最大事务数量获取单元,用于从所述存储模块获取最新事务标识,将所述最新事务标识中的最大事务数量作为第一最大事务数量;
第二最大事务数量获取单元,用于获取本地磁盘中存储的事务标识中的最大事务数量作为第二最大事务数量;
回滚单元,用于若所述第二最大事务数量大于所述第一最大事务数量,则回滚掉所述事务标识中的多余部分对应的事务,所述多余部分为所述第二最大事务数量多于所述第一最大事务数量的部分;
降级单元,用于将所述第一数据库降级为第二数据库。
上述产品可执行本发明实施例一所提供的方法,具备执行方法相应的功能模块和有益效果。
实施例五
图8为本发明实施例五提供的一种MySQL数据同步装置的结构示意图。本实施例可适用于MySQL集群的主备数据库之间进行数据同步的情况,该装置可采用软件和/或硬件的方式实现,该装置应用于第二数据库,如图8所示,所述MySQL数据同步装置具体包括:接收模块810,用于接收第一数据库发送的携带有确认请求的二进制日志后,将所述二进制日志存储到中继日志中;
返回模块820,用于返回确认信息至所述第一数据库;
数据同步模块830,用于在发生故障时,基于所述存储模块发送的最新事务标识完成事务回滚,以在所述第二数据库基于所述最新事务标识完成事务回滚后实现数据同步。
可选的,所述数据同步模块,包括:
最新事务标识获取单元,用于从所述存储模块获取最新事务标识;
事务数量比较单元,用于确定所述中继日志中存储的事务数量是否大于所述最新事务标识中的最大事务数量;
回滚单元,用于若确定所述中继日志中存储的事务数量大于所述最新事务标识中的最大事务数量,则回滚掉所述中继日志中存储的多余事务;将所述第二数据库升级为新的第一数据库;
升级单元,用于若确定所述中继日志中存储的事务数量不大于所述最新事务标识中的最大事务数量,则将所述第二数据库升级为新的第一数据库,以完成数据同步。
上述产品可执行本发明实施例二所提供的方法,具备执行方法相应的功能模块和有益效果。
实施例六
图9为本发明实施例六提供的一种MySQL数据同步系统的结构示意图。如图9所示,该系统包括:第一数据库910、第二数据库920以及存储模块930,第一数据库910分别与第二数据库920以及存储模块930相连。
第一数据库910用于执行如实施例一中提供的MySQL数据同步方法;
第二数据库920用于执行如实施例二中提供的MySQL数据同步方法;
存储模块930用于存储事务标识。
其中,事务标识可以为由第一数据库上生成的与事务绑定的唯一标识,唯一标识不仅在第一数据库中是唯一的,在MySQL集群内也是唯一的。第一数据库MySQL Master可以执行实施例一中提供的MySQL数据同步方法将数据发送到第二数据库即MySQL Slave,将事务标识发送到存储模块即KV Store,保持第一数据库和第二数据库的数据一致。
本发明实施例的技术方案,通过部署MySQL数据同步系统,第一数据库910接收提交请求后发送携带有确认请求的二进制日志到第二数据库920;第二数据库920接收第一数据库910发送的携带有确认请求的二进制日志后,将二进制日志存储到中继日志中,并在将二进制日志存储到中继日志完成后返回确认信息至第一数据库910;第一数据库910接收到第二数据库920返回的确认信息后,将事务标识发送至存储模块930;在发生故障时,第一数据库910和第二数据920都可以从存储模块930中获取最新事务标识,通过最新事务标识的最大事务数量与本地磁盘中事务标识的最大事务数量进行对比,完成多余事务的回滚,以实现第一数据库910和第二数据库920的数据同步。
示例性的,图10为本发明实施例六提供的一种MySQL数据同步系统的示例结构示意图,如图10所示,MySQL Master即第一数据库分别与MySQL Slave即第二数据库以及KVStore即存储模块相连。MySQL Master发送Gtid给KV Store即第一数据库发送事务标识给存储模块。MySQL Master发送数据到Slave即第一数据库发送数据到第二数据库。
实施例七
图11示出了可以用来实施本发明的实施例的数据库终端10的结构示意图,数据库终端10可以包括第一数据库终端和第二数据库终端。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本发明的实现。
如图11所示,数据库终端10包括至少一个处理器11,以及与至少一个处理器11通信连接的存储器,如只读存储器(ROM)12、随机访问存储器(RAM)13等,其中,存储器存储有可被至少一个处理器执行的计算机程序,处理器11可以根据存储在只读存储器(ROM)12中的计算机程序或者从存储单元18加载到随机访问存储器(RAM)13中的计算机程序,来执行各种适当的动作和处理。在RAM 13中,还可存储数据库终端10操作所需的各种程序和数据。处理器11、ROM 12以及RAM 13通过总线14彼此相连。输入/输出(I/O)接口15也连接至总线14。
数据库终端10中的多个部件连接至I/O接口15,包括:输入单元16,例如键盘、鼠标等;输出单元17,例如各种类型的显示器、扬声器等;存储单元18,例如磁盘、光盘等;以及通信单元19,例如网卡、调制解调器、无线通信收发机等。通信单元19允许数据库终端10通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
处理器11可以是各种具有处理和计算能力的通用和/或专用处理组件。处理器11的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的处理器、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。处理器11执行上文所描述的各个方法和处理,例如MySQL数据同步方法,包括应用于第一数据库的MySQL数据同步方法以及应用于第二数据库的MySQL数据同步方法。
在一些实施例中,上述MySQL数据同步方法可被实现为计算机程序,其被有形地包含于计算机可读存储介质,例如存储单元18。在一些实施例中,计算机程序的部分或者全部可以经由ROM 12和/或通信单元19而被载入和/或安装到数据库终端10上。当计算机程序加载到RAM 13并由处理器11执行时,可以执行上文描述的MySQL数据同步方法中的一个或多个步骤。备选地,在其他实施例中,处理器11可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行MySQL数据同步方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本发明的方法的计算机程序可以采用一个或多个编程语言的任何组合来编写。这些计算机程序可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,使得计算机程序当由处理器执行时使流程图和/或框图中所规定的功能/操作被实施。计算机程序可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本发明的上下文中,计算机可读存储介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的计算机程序。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。备选地,计算机可读存储介质可以是机器可读信号介质。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在数据库终端上实施此处描述的系统和技术,该数据库终端具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给数据库终端。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)、区块链网络和互联网。
计算系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与VPS服务中,存在的管理难度大,业务扩展性弱的缺陷。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发明中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本发明的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (13)

1.一种MySQL数据同步方法,其特征在于,应用于第一数据库,所述方法包括:
接收提交请求后,发送携带有确认请求的二进制日志到第二数据库,所述二进制日志中记录多个事务;
接收到所述第二数据库返回的确认信息后,将事务标识发送至存储模块;
在发生故障时,基于所述存储模块发送的最新事务标识完成事务回滚,以在所述第二数据库基于所述最新事务标识完成事务回滚后实现数据同步。
2.根据权利要求1所述的方法,其特征在于,
所述事务标识由当前MySQL实例的唯一标识和当前MySQL实例上已经提交的事务数量组成,所述事务数量随着事务提交单调递增。
3.根据权利要求1所述的方法,其特征在于,
未发生故障时,在接收到所述存储模块的响应后,将所述二进制日志落盘到本地磁盘上,将所述事务标识落盘到所述二进制日志中,落盘完成后将提交命令返回给用户。
4.根据权利要求1所述的方法,其特征在于,基于所述存储模块发送的最新事务标识完成事务回滚包括:
从所述存储模块获取最新事务标识,将所述最新事务标识中的最大事务数量作为第一最大事务数量;
获取本地磁盘中存储的事务标识中的最大事务数量作为第二最大事务数量;
若所述第二最大事务数量大于所述第一最大事务数量,则回滚掉所述事务标识中的多余部分对应的事务,所述多余部分为所述第二最大事务数量多于所述第一最大事务数量的部分;
将所述第一数据库降级为第二数据库。
5.一种MySQL数据同步方法,其特征在于,应用于第二数据库,所述方法包括:
接收第一数据库发送的携带有确认请求的二进制日志后,将所述二进制日志存储到中继日志中;
返回确认信息至所述第一数据库;
在发生故障时,基于所述存储模块发送的最新事务标识完成事务回滚,以在所述第一数据库基于所述最新事务标识完成事务回滚后实现数据同步。
6.根据权利要求5所述的方法,其特征在于,基于所述存储模块发送的最新事务标识完成事务回滚,包括:
从所述存储模块获取最新事务标识;
确定所述中继日志中存储的事务数量是否大于所述最新事务标识中的最大事务数量;
若是,则回滚掉所述中继日志中存储的多余事务;
将所述第二数据库升级为新的第一数据库。
7.根据权利要求5所述的方法,其特征在于,还包括:
若否,则将所述第二数据库升级为新的第一数据库,以完成数据同步。
8.一种MySQL数据同步装置,其特征在于,应用于第一数据库,所述装置包括:
第一发送模块,用于接收到提交请求后,发送携带有确认请求的二进制日志到第二数据库;
第二发送模块,用于接收到所述第二数据库返回的确认信息后,将事务标识发送至存储模块;
数据同步模块,用于在发生故障时,基于所述存储模块发送的最新事务标识完成事务回滚,以在所述第二数据库基于所述最新事务标识完成事务回滚后实现数据同步。
9.一种MySQL数据同步装置,其特征在于,应用于第二数据库,所述装置包括:
接收模块,用于接收第一数据库发送的携带有确认请求的二进制日志后,将所述二进制日志存储到中继日志中;
返回模块,用于返回确认信息至所述第一数据库;
数据同步模块,用于在发生故障时,基于所述存储模块发送的最新事务标识完成事务回滚,以在所述第二数据库基于所述最新事务标识完成事务回滚后实现数据同步。
10.一种第一数据库终端,其特征在于,所述第一数据库终端包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-4中任一项所述的MySQL数据同步方法。
11.一种第二数据库终端,其特征在于,所述第二数据库终端包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求5-7中任一项所述的MySQL数据同步方法。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现权利要求1-7中任一项所述的MySQL数据同步方法。
13.一种MySQL数据同步系统,其特征在于,所述系统包括第一数据库、第二数据库以及存储模块,所述第一数据库分别与所述第二数据库以及所述存储模块相连;
所述第一数据库用于执行如权利要求1-4任一项所述的MySQL数据同步方法;
所述第二数据库用于执行如权利要求5-7任一项所述的MySQL数据同步方法;
所述存储模块用于存储事务标识。
CN202211248602.XA 2022-10-12 2022-10-12 一种MySQL数据同步方法、装置、数据库终端、介质及系统 Pending CN115617908A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211248602.XA CN115617908A (zh) 2022-10-12 2022-10-12 一种MySQL数据同步方法、装置、数据库终端、介质及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211248602.XA CN115617908A (zh) 2022-10-12 2022-10-12 一种MySQL数据同步方法、装置、数据库终端、介质及系统

Publications (1)

Publication Number Publication Date
CN115617908A true CN115617908A (zh) 2023-01-17

Family

ID=84863193

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211248602.XA Pending CN115617908A (zh) 2022-10-12 2022-10-12 一种MySQL数据同步方法、装置、数据库终端、介质及系统

Country Status (1)

Country Link
CN (1) CN115617908A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115994191A (zh) * 2023-03-24 2023-04-21 北京极数云舟科技有限公司 基于物理复制的ddl执行数据同步方法及装置
CN116050321A (zh) * 2023-03-24 2023-05-02 南京芯驰半导体科技有限公司 数据处理方法、装置、电子设备及存储介质

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115994191A (zh) * 2023-03-24 2023-04-21 北京极数云舟科技有限公司 基于物理复制的ddl执行数据同步方法及装置
CN116050321A (zh) * 2023-03-24 2023-05-02 南京芯驰半导体科技有限公司 数据处理方法、装置、电子设备及存储介质
CN115994191B (zh) * 2023-03-24 2023-07-07 北京极数云舟科技有限公司 基于物理复制的ddl执行数据同步方法及装置

Similar Documents

Publication Publication Date Title
EP3117349B1 (en) System and method for massively parallel processing database
US10747745B2 (en) Transaction execution commitment without updating of data row transaction status
CN109739935B (zh) 数据读取方法、装置、电子设备以及存储介质
CN106598762B (zh) 一种消息同步方法
CN110196856B (zh) 一种分布式数据读取方法及装置
CN108932338B (zh) 数据更新方法、装置、设备和介质
CN115617908A (zh) 一种MySQL数据同步方法、装置、数据库终端、介质及系统
CN101567805B (zh) 并行文件系统发生故障后的恢复方法
JP2023546249A (ja) トランザクション処理方法、装置、コンピュータ機器及びコンピュータプログラム
CN109643310B (zh) 用于数据库中数据重分布的系统和方法
CN102203779B (zh) 更新数据的方法和控制装置
US20230099664A1 (en) Transaction processing method, system, apparatus, device, storage medium, and program product
EP4276651A1 (en) Log execution method and apparatus, and computer device and storage medium
CN109726211B (zh) 一种分布式时序数据库
CN110196788B (zh) 一种数据读取方法、装置、系统及存储介质
CN113438275A (zh) 数据迁移方法、装置、存储介质及数据迁移设备
CN112800060A (zh) 数据处理方法、装置、计算机可读存储介质及电子设备
CN115421880A (zh) 事务处理方法、装置、设备及介质
CN115934742A (zh) 一种故障处理方法、装置、设备及存储介质
CN114579260A (zh) 一种事务处理方法及系统
CN107590286B (zh) 在集群文件系统中事务信息的管理方法和装置
CN115629910B (zh) 一种事务恢复方法、装置、数据库节点及介质
CN111752911A (zh) 一种基于Flume的数据传输方法、系统、终端及存储介质
CN107153699A (zh) 一种动态扩展集群服务器的方法及装置
CN116107964A (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