一种数据库的数据同步方法和装置制造方法

文档序号:6549767阅读:147来源:国知局
一种数据库的数据同步方法和装置制造方法
【专利摘要】本发明公开了一种数据库的数据同步方法和装置,其包括:监听至少1个主数据库服务器的数据库事件;当所述主数据库服务器执行数据库事件时,从所述主数据库服务器读取所述数据库事件并存储于一事件队列;从所述事件队列读取所述数据库事件,并将所读取的数据库事件发送给一从数据库服务器;所述从数据库服务器执行所接收到的数据库事件。本发明的方法和装置,实现了MySQL数据库的多主数据库服务器向单从数据库服务器的数据同步,进而解决了无法进行多个MySQL主数据库服务器向单个从数据库服务器备份的问题,也解决了多个从数据库服务器进行备份所造成的资源浪费问题,解决了MySQL数据库中分库分表项目没有一个集中式的地方提供查询的问题。
【专利说明】一种数据库的数据同步方法和装置
【技术领域】
[0001]本发明涉及数据库技术,特别涉及一种数据库的数据同步方法和装置。
【背景技术】
[0002]MySQL是一种关系型数据库管理系统,由于其体积小、速度快、总体拥有成本低,以及开放源码等特点,广泛地应用于中小型网站的开发和使用。
[0003]为防止系统运行过程中的数据损坏、丢失等问题,数据库系统需要定期和/或不定期的维护、备份等工作。另外,为保障系统的稳定,数据库系统也采用了数据同步方案,例如采用主从数据库形式,主数据库与从数据库分别位于不同服务器中,主数据库与从数据库存储相同的数据内容,在正常工作状态下,主数据库和从数据库之间进行数据同步操作,而使主数据库与从数据库存储的数据保持一致,一旦主数据库因为某种意外而损坏可立即采用从数据库替代主数据库而继续保持系统的稳定运行。
[0004]对于MySQL数据库系统来说,是采用异步复制或者同步复制的方式实现主数据库(Master)和从数据库(Slave)之间数据同步的。该种方式是一个主数据库将其中的数据复制到I个或者多个从数据库中。对于一个从数据库来说,它只能有一个对应的主数据库,而对于主数据库来说,它可以有多个从数据库。
[0005]对于一个大型的数据库系统来说,其中会具有多个主数据库,同时一个主数据库还具有多个从数据库,主数据库越多则从数据库也越多。该种状况下,数据存储分散,无法进行集中查询,并且只有主数据库提供生产服务,而从数据库不提供服务,进而造成了大量系统资源的浪费。

【发明内容】

[0006]有鉴于此,本发明提供一种数据库的数据同步方法和装置,以实现MySQL数据库的多主数据库向单从数据库的数据同步。
[0007]本申请的技术方案是这样实现的:
[0008]一种数据库的数据同步方法,包括:
[0009]监听至少I个主数据库服务器的数据库事件;
[0010]当所述主数据库服务器执行数据库事件时,从所述主数据库服务器读取所述数据库事件并存储于一事件队列;
[0011]从所述事件队列读取所述数据库事件,并将所读取的数据库事件发送给一从数据库服务器;
[0012]所述从数据库服务器执行所接收到的数据库事件。
[0013]进一步:
[0014]所述主数据库服务器中具有至少I个主数据库;
[0015]所述从数据库服务器中具有至少I个从数据库;
[0016]所述从数据库服务器中的每个从数据库与每个主数据库服务器中的每个主数据库--对应。
[0017]进一步,当新增主数据库服务器时,所述方法还包括:
[0018]配置新增主数据库服务器源信息;
[0019]根据所述新增主数据库服务器源信息创建新增主数据库服务器的复制线程。
[0020]进一步,所述主数据库服务器源信息包括:主数据库服务器的IP地址、主数据库服务器的连接账户、主数据库服务器的连接密码、主数据库服务器的连接端口、主数据库服务器的日志文件名称和主数据库服务器的日志偏移量。
[0021]进一步,所述创建新增主数据库服务器的复制线程包括:
[0022]根据所述新增主数据库服务器源信息,建立所述新增主数据库服务器的连接;
[0023]根据所述新增主数据库服务器的复制起始点确定新增主数据库服务器的日志文件和日志偏移量;
[0024]从所述复制起始点开始,读取所述新增主数据库服务器的数据库事件并存储于所述事件队列;
[0025]从所述事件队列读取所述新增主数据库服务器的数据库事件,并将所读取的新增主数据库服务器的数据库事件发送给所述从数据库服务器;
[0026]所述从数据库 服务器执行所接收到的新增主数据库服务器的数据库事件。
[0027]进一步,所述主数据库和从数据库均为MySQL数据库。
[0028]一种数据库的数据同步装置,包括:
[0029]至少I个主数据库服务器,用于执行数据库事件;
[0030]事件监听模块,用于监听所述至少I个主数据库服务器的数据库事件;
[0031]事件队列模块,用于从所述至少I个主数据库服务器读取数据库事件并存储于一事件队列;
[0032]事件处理模块,用于从所述事件队列读取数据库事件,并将所读取的数据库事件发送给一从数据库服务器;
[0033]从数据库服务器,用于执行接收到的数据库事件。
[0034]进一步:
[0035]所述主数据库服务器中具有至少I个主数据库;
[0036]所述从数据库服务器中具有至少I个从数据库;
[0037]所述从数据库服务器中的每个从数据库与每个主数据库服务器中的每个主数据
库--对应。
[0038]进一步,所述主数据库和从数据库均为MySQL数据库。
[0039]从上述方案可以看出,本发明的数据库的数据同步方法和装置,实现了 MySQL数据库的多主数据库服务器(Master)向单从数据库服务器(Slave)的数据同步。对于使用MySQL数据库的分库分表项目而言,传统MySQL数据库备份仅仅支持单一主数据库服务器向一个或者多个从数据库服务器的备份,无法实现多个MySQL主数据库服务器向一个从数据库服务器的备份,而本发明的数据库的数据同步方法和装置,由于实现了 MySQL数据库的多主数据库服务器(Master)向单从数据库服务器(Slave)的数据同步,进而解决了无法进行多个MySQL主数据库服务器向一个从数据库服务器的备份的问题。并且由于本发明的数据库的数据同步方法和装置中仅仅采用I个从数据库服务器进行多个主数据库服务器的数据备份,也解决了多个从数据库服务器进行备份所造成了资源浪费问题,解决了 MySQL数据库中分库分表项目没有一个集中式的地方提供查询的问题,仅在I个从数据库服务器中便可集中完成多个主数据库服务器的分库分表项目的数据查询。
【专利附图】

【附图说明】
[0040]图1为本发明的数据库数据同步方法的流程图;
[0041]图2为本发明的数据库数据同步方法的实施例示意图;
[0042]图3为本发明的数据库数据同步方法中新增主数据库的实施例流程图;
[0043]图4为本发明数据库的数据同步装置实施例示意图。
【具体实施方式】
[0044]为了使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步详细说明。
[0045]如图1所示,本发明的数据库的数据同步方法,包括:
[0046]步骤1、监听至少I个主数据库服务器的数据库事件;
[0047]步骤2、当所述主数据库服务器执行数据库事件时,从所述主数据库服务器读取所述数据库事件并存储 于一事件队列;
[0048]步骤3、从所述事件队列读取所述数据库事件,并将所读取的数据库事件发送给一从数据库服务器;
[0049]步骤4、所述从数据库服务器执行所接收到的数据库事件。
[0050]其中,所述主数据库服务器中具有至少I个主数据库;所述从数据库服务器中保存有至少I个从数据库;所述从数据库服务器中所保存的从数据库与每个主数据库服务器
中的每个主数据库--对应。本发明中,所有主数据库和从数据库均为MySQL数据库,本发
明的数据库的数据同步方法,对于MySQL数据库而言,可实现从多个主数据库服务器向I个从数据库服务器的数据同步。
[0051]本发明的方法中,每当新增主数据库服务器时,在新增主数据库服务器向从数据库服务器进行同步之前需要进行如下过程:
[0052]配置新增主数据库服务器源信息;
[0053]根据所述新增主数据库服务器源信息创建新增主数据库服务器的复制线程。
[0054]具体地,其中新增的主数据库服务器源信息包括:主数据库服务器的IP地址、主数据库服务器的连接账户、主数据库服务器的连接密码、主数据库服务器的连接端口、主数据库服务器的日志文件名称和主数据库服务器的日志偏移量等。
[0055]创建新增主数据库服务器的复制线程包括:
[0056]根据所述新增的主数据库服务器源信息,建立所述新增的主数据库服务器的连接;
[0057]根据所述新增的主数据库服务器的复制起始点确定新增的主数据库服务器的日志文件和日志偏移量;
[0058]从所述复制起始点开始,读取所述新增主数据库服务器的数据库事件并存储于所述事件队列;[0059]从所述事件队列读取所述新增主数据库服务器的数据库事件,并将所读取的新增主数据库服务器的数据库事件发送给所述从数据库服务器;
[0060]所述从数据库服务器执行所接收到的新增主数据库服务器的数据库事件。
[0061]以下结合图2所示的具体实施例,对本发明的数据库的数据同步方法进行说明。
[0062]如图2所示,其中共有3个主数据库服务器,分别为主数据库服务器Ml、主数据库服务器M2和主数据库服务器M3,其中有I个从数据库服务器S。3个主数据库服务器用于提供生产服务,例如网站系统的数据库服务器,从数据库服务器S用于和3个主数据库服务器进行数据同步,3个主数据库服务器的生产数据(例如网站运营数据)均同步备份于从数据库S中。
[0063]主数据库服务器Ml中具有3个主数据库,分别为主数据库M1-1、主数据库M1-2、主数据库M1-3,主数据库服务器M2中具有2个主数据库,分别为主数据库M2-1、主数据库M2-2,主数据库服务器M3中具有I个主数据库,为主数据库M3-1 ;从数据库服务器S中具有6个从数据库,分别为从数据库S1-1、从数据库S1-2、从数据库S1-3、从数据库S2-1、从
数据库S2-2、从数据库S3-1 ;每个从数据库与每个主数据库服务器中的每个主数据库--
对应,具体地,从数据库Sl-1与主数据库Ml-1对应、从数据库S1-2与主数据库M1-2对应、从数据库S1-3与主数据库M1-3、从数据库S2-1与主数据库M2-1对应、从数据库S2-2与主数据库M2-2对应、从数据库S3-1与主数据库M3-1对应,即主数据库Ml-1的数据同步于从数据库Sl-1中、主数据库M1-2的数据同步于从数据库S1-2中、主数据库M1-3的数据同步于从数据库S1-3中、 主数据库M2-1的数据同步于从数据库S2-1中、主数据库M2-2的数据同步于从数据库S2-2中、主数据库M3-1的数据同步于从数据库S3-1中。所有的主数据库和从数据库均为MySQL数据库。该数据同步方法包括以下步骤。
[0064]步骤al、监听3个主数据库服务器的数据库事件。
[0065]对于MySQL来说,数据库事件均记载于日志文件中,当执行数据库事件(例如建立表格、更新表格等事件)时,所执行的数据库事件均记录于日志文件中,本发明中所使用的MySQL的日志文件为binlog文件,binlog文件为二进制日志文件,其记录所有更改数据库的语句,可用于复制、恢复数据库,当任意一个主数据库服务器发生数据库事件时,均会同时记录于该主数据库服务器的binlog文件中,因此在本发明数据库的数据同步方法中,监听主数据库服务器的数据库事件,是监听每个主数据库服务器的binlog文件中所记录的事件。
[0066]步骤a2、3个主数据库服务器中任意一个主数据库服务器执行数据库事件。
[0067]本步骤a2中,是指主数据库服务器Ml、主数据库服务器M2、主数据库服务器M3中的任意一个主数据库服务器执行数据库事件。对于主数据库服务器Ml来说,所执行数据库事件可能是主数据库M1-1、主数据库M1-2和主数据库M1-3中任何一个主数据库的数据库事件,对于主数据库服务器M2来说,所执行数据库事件可能是主数据库M2-1和主数据库M2-2中任何一个主数据库的数据库事件,对于主数据库服务器M3来说,所执行数据库事件是主数据库M3-1的数据库事件。
[0068]步骤a3、从执行数据库事件的主数据库服务器读取所执行的数据库事件,并将其存储于事件队列。
[0069]当数据库服务器执行数据库事件时,所执行的数据库事件记录于其日志文件中,本步骤a3中,所执行的数据库事件是从主数据库服务器的日志文件(即binlog文件)中进行读取。例如,当主数据库服务器Ml执行数据库事件时,则从主数据库服务器Ml的日志文件中读取所执行的数据库事件,并将其存储于事件队列,当主数据库服务器M2执行数据库事件时,从主数据库服务器M2的日志文件中读取所执行的数据库事件,并将其存储于事件队列,等等,此处不再列举。
[0070]步骤a4、从事件队列中读取数据库事件,并将所读取的数据库事件发送给从数据库服务器S。
[0071]事件队列用于存储各个主数据库所执行的数据库事件,由于在事件队列中所存储的各个数据库事件都是从主数据库服务器的日志文件中读取的,因此每个数据库事件的信息均可对应到执行该数据库事件的主数据库。例如,主数据库服务器Ml的某条数据库事件是主数据库Ml-1的数据库事件,则在该条数据库事件的信息中可以得知是主数据库Ml-1的数据库事件,进而在从数据库服务器S执行该条数据库事件时,可直接对应到从数据库Sl-1 (主数据库Ml-1的备份数据库)。
[0072]步骤a5、从数据库服务器S执行所接收到的数据库事件。
[0073]本步骤a5中,从数据库服务器S从事件队列接收到数据库事件后,从数据库服务器S直接执行所接收到的数据库事件。因为从数据库服务器S中具有与各个主数据库服务器相同的备份,所以,从数据库服务器S直接执行所接收到的数据库事件,其实就是在从数据库服务器S中执行了一次与相应的主数据库服务器相同的数据库事件。
[0074]例如,主数据库服务器Ml执行一条数据库事件,该数据库事件是针对主数据库Ml-1的数据库事件,在主数据库服务器Ml执行该条数据库事件时,该条数据库事件写入了主数据库服务器Ml的日志文件中,在该条数据库事件写入主数据库服务器Ml的日志文件时便被监听到了,进而将该条数据库事件从主数据库服务器Ml的日志文件中读取出来并存储于事件队列,之后,从事件队列中读取该条数据库事件并发送给从数据库服务器S,从数据库服务器S接收到该条数据库事件后直接执行该条数据库事件,便是执行与主数据库服务器Ml相同的数据库事件,因为从数据库服务器Ml中具有主数据库服务器Ml中主数据库Ml-1的备份从数据库Sl-1 (从数据库Sl-1事实上和主数据库Ml-1是内容完全一样的数据库),进而执行上述与主数据库服务器Ml相同的数据库事件后,从数据库Sl-1的内容与主数据库Ml-1的内容保持了一致。
[0075]对于其它主数据库服务器向该从数据库服务器S的数据同步,同样采用上述方法,可保证从数据库服务器S中的每个从数据库均与其所对应的主数据库(位于相同或者不同的主数据库服务器中)的内容的一致性。这样便实现了多个主数据库服务器向单个从数据库服务器的数据同步。
[0076]若要进一步增加主数据库服务器,例如再增加一个新的主数据库服务器M4,则需要进行以下过程,参见图3所示。
[0077]步骤bl、配置主数据库服务器M4源信息。
[0078]主数据库服务器M4源信息,主要用于进行主数据库服务器M4的连接、监听和同步数据的起始点等。主数据库服务器M4源信息包括主数据库服务器M4的IP地址、主数据库服务器M4的连接账户、主数据库服务器M4的连接密码、主数据库服务器M4的连接端口、主数据库服务器M4的日志文件名称和主数据库服务器M4的日志偏移量等。其中,主数据库服务器M4的IP地址、主数据库服务器M4的连接账户、主数据库服务器M4的连接密码和主数据库服务器M4的连接端口主要用于进行主数据库服务器M4的连接和监听;主数据库服务器M4的日志文件名称和主数据库服务器M4的日志偏移量,主要用于监听和确定同步数据的起始点等。
[0079]步骤b2、根据主数据库服务器M4源信息创建主数据库服务器M4的复制线程。步骤b2主要包括以下步骤b21至步骤b25的内容。
[0080]步骤b21、根据主数据库服务器M4源信息,建立主数据库服务器M4的连接。主数据库服务器M4的连接主要根据主数据库服务器M4源信息中的主数据库服务器M4的IP地址、连接账户、连接密码和连接端口等信息进行建立的。
[0081]步骤b22、根据主数据库服务器M4的复制起始点确定主数据库服务器M4的日志文件和日志偏移量。
[0082]对于新增加的主数据库服务器来说,需要确定其复制起始点,即起始的时间点,从哪一时刻开始进行新增加的主数据库服务器中哪些主数据库的同步。一般来说,要保证主数据库服务器和从数据库服务器的一致,新增加的主数据库服务器(主数据库服务器M4)的内容需要全部同步于从数据库服务器S中。作为一个具体实施例,新增加的主数据库服务器M4的复制起始点为主数据库服务器M4中用户最开始创建新的数据库的时间点,其中不含有主数据库服务器自动生成的库表(这些主数据库服务器自动生成的库表不需要进行数据备份)。根据复制起始点确定日志文件和日志偏移量后便可以进行日志文件的读取过程,以进行数据的同步工作。
[0083]步骤b23、从主数据库服务器M4的复制起始点开始,读取主数据库服务器M4的数据库事件并存储于事件队列。
[0084]步骤b24、从所述事件队列读取主数据库服务器M4的数据库事件,并将所读取的主数据库服务器M4的数据库事件发送给从数据库服务器S。
[0085]步骤b25、从数据库服务器S执行所接收到的主数据库服务器M4的数据库事件。
[0086]经过上述步骤b21至步骤b25便完成了步骤b2的创建主数据库服务器M4的复制线程。上述复制线程,就是将主数据库服务器M4中曾经执行的数据库时间,在从数据库服务器S中重新呈现一遍,进而在从数据库服务器S中建立出与主数据库服务器M4中的主数据库内容一致的从数据库(即备份数据库)。
[0087]本发明中,采用数据队列进行中间数据库事件的存储缓冲,是考虑到本发明的方法是将多个主数据库服务器的内容备份于一个从数据库服务器中,这样在并发数量很大的情况下,一个从数据库服务器不可能同时完成多个主数据库服务器的数据库事件,因此,采用数据队列后,可将多个主数据库服务器的数据库事件先后在数据队列中进行缓存,进而减轻I个从数据库服务器同步多个主数据库服务器数据的负担。
[0088]如图4所示,为本发明数据库的数据同步装置实施例示意图,其包括至少I个主数据库服务器1、事件监听模块2、事件队列模块3、事件处理模块4和从数据库服务器5。其中,至少I个主数据库服务器I用于执行各自的数据库事件;事件监听模块2,用于监听所述至少I个主数据库服务器I的数据库事件;事件队列模块3,用于从所述至少I个主数据库服务器I读取数据库事件并存储于一事件队列;事件处理模块4,用于从事件队列读取数据库事件,并将所读取的数据库事件发送给从数据库服务器5 ;从数据库服务器5,用于执行接收到的数据库事件。
[0089]其中,所述主数据库服务器I中具有至少I个主数据库,所述从数据库服务器5中具有至少I个从数据库,所述从数据库服务器5中的每个从数据库与每个主数据库服务器I中的每个主数据库—对应。所述主数据库服务器和从数据库服务器中的数据库均为MySQL数据库。
[0090]本发明的数据库的数据同步装置,采用上述数据库的数据同步方法即可实现MySQL数据库中多个主数据库服务器到I个从数据库服务器的数据同步。
[0091]本发明的数据库的数据同步方法和装置,实现了 MySQL数据库的多主数据库服务器(Master)向单从数据库服务器(Slave)的数据同步。对于使用MySQL数据库的分库分表项目而言,传统MySQL数据库备份仅仅支持单一主数据库服务器向一个或者多个从数据库服务器的备份,无法实现多个MySQL主数据库服务器向一个从数据库服务器的备份,而本发明的数据库的数据同步方法和装置,由于实现了 MySQL数据库的多主数据库服务器(Master)向单从数据库服务器(Slave)的数据同步,进而解决了无法进行多个MySQL主数据库服务器向一个从数据库服务器的备份的问题。并且由于本发明的数据库的数据同步方法和装置中仅仅采用I个从数据库服务器进行多个主数据库服务器的数据备份,也解决了多个从数据库服务器进行备份所造成了资源浪费问题,解决了 MySQL数据库中分库分表项目没有一个集中式的地方提供查询的问题,仅在I个从数据库服务器中便可集中完成多个主数据库服务器的分库分表项目的数据查询。
[0092]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
【权利要求】
1.一种数据库的数据同步方法,包括: 监听至少I个主数据库服务器的数据库事件; 当所述主数据库服务器执行数据库事件时,从所述主数据库服务器读取所述数据库事件并存储于一事件队列; 从所述事件队列读取所述数据库事件,并将所读取的数据库事件发送给一从数据库服务器; 所述从数据库服务器执行所接收到的数据库事件。
2.根据权利要求1所述的数据库的数据同步方法,其特征在于: 所述主数据库服务器中具有至少I个主数据库; 所述从数据库服务器中具有至少I个从数据库; 所述从数据库服务器中的每个从数据库与每个主数据库服务器中的每个主数据库--对应。
3.根据权利要求1所述的数据库的数据同步方法,其特征在于,当新增主数据库服务器时,所述方法还包括: 配置新增主数据库服 务器源信息; 根据所述新增主数据库服务器源信息创建新增主数据库服务器的复制线程。
4.根据权利要求3所述的数据库的数据同步方法,其特征在于,所述主数据库服务器源信息包括:主数据库服务器的IP地址、主数据库服务器的连接账户、主数据库服务器的连接密码、主数据库服务器的连接端口、主数据库服务器的日志文件名称和主数据库服务器的日志偏移量。
5.根据权利要求3所述的数据库的数据同步方法,其特征在于,所述创建新增主数据库服务器的复制线程包括: 根据所述新增主数据库服务器源信息,建立所述新增主数据库服务器的连接; 根据所述新增主数据库服务器的复制起始点确定新增主数据库服务器的日志文件和日志偏移量; 从所述复制起始点开始,读取所述新增主数据库服务器的数据库事件并存储于所述事件队列; 从所述事件队列读取所述新增主数据库服务器的数据库事件,并将所读取的新增主数据库服务器的数据库事件发送给所述从数据库服务器; 所述从数据库服务器执行所接收到的新增主数据库服务器的数据库事件。
6.根据权利要求1至5任一项所述的数据库的数据同步方法,其特征在于,所述主数据库和从数据库均为MySQL数据库。
7.一种数据库的数据同步装置,其特征在于,包括: 至少I个主数据库服务器,用于执行数据库事件; 事件监听模块,用于监听所述至少I个主数据库服务器的数据库事件; 事件队列模块,用于从所述至少I个主数据库服务器读取数据库事件并存储于一事件队列; 事件处理模块,用于从所述事件队列读取数据库事件,并将所读取的数据库事件发送给一从数据库服务器;从数据库服务器,用于执行接收到的数据库事件。
8.根据权利要求7所述的数据库的数据同步装置,其特征在于: 所述主数据库服务器中具有至少I个主数据库; 所述从数据库服务器中具有至少I个从数据库; 所述从数据库服务器中的每个从数据库与每个主数据库服务器中的每个主数据库--对应。
9.根据权利要求7或8所述的数据库的数据同步装置,其特征在于,所述主数据库和从数据库均为MySQL数据库。
【文档编号】G06F17/30GK104021200SQ201410267483
【公开日】2014年9月3日 申请日期:2014年6月16日 优先权日:2014年6月16日
【发明者】赵晓平, 唐超, 马丽伟, 秦波, 王 锋 申请人:北京京东尚科信息技术有限公司, 北京京东世纪贸易有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1