一种数据备份方法及装置制造方法

文档序号:6486981阅读:125来源:国知局
一种数据备份方法及装置制造方法
【专利摘要】本申请公开了一种数据备份方法及装置,用以解决现有技术中备库进行数据备份的效率较低的问题。该方法预读装置获取备库中的relay日志,确定备库正在处理的操作记录在relay日志中的位置,读取该relay日志中位于确定的位置之后的操作记录对应的数据,并写入到备库的内存中。由于本申请实施例中预读装置将relay日志中位于备库当前正在处理的操作记录的位置之后的操作记录对应的数据读取到备库的内存中,也即将备库后续要处理的操作记录对应的数据读取到了备库的内存中,因此备库在处理后续的操作记录时,无需从外部存储器中将相应的数据读取到内存中,直接对内存中已经写入的数据进行操作即可,从而提高了数据备份的效率。
【专利说明】一种数据备份方法及装置
【技术领域】
[0001]本申请涉及通信【技术领域】,尤其涉及一种数据备份方法及装置。
【背景技术】
[0002]MySQL是一种小型关系型数据库管理系统。一般的,MySQL包括主库和备库,主库用于提供数据管理和数据查询等功能,备库用于备份主库中的数据,用以在主库发生故障时代替主库提供相应的功能。
[0003]图1为现有技术中MySQL中的主库将自身的数据备份到备库的过程,具体包括以下步骤:
[0004]SlOl:主库在对自身的数据进行操作时,生成对应的操作记录并记录在二进制日志(binlog)中。
[0005]其中,主库对自身的数据的操作包括:更新操作、插入操作、删除操作。
[0006]例如,主库对自身的数据A更新为数据B时,生成将该数据A更新为数据B的操作记录,并记录在binlog日志中。
[0007]S102:备库创建一个I/O线程,通过该I/O线程读取主库保存的binlog日志。
[0008]S103:备库将读取到的binlog日志转换成中继日志(relay)。
[0009]其中,主库保存的binlog日志中记录的操作记录,与备库转换的relay日志中记录的操作记录相同,只是binlog日志与relay日志的格式不同。
[0010]继续沿用上例,由于主库的binlog日志中记录有将数据A更新为数据B的操作记录,因此备库转换的relay日志中也包含将数据A更新为数据B的操作记录。
[0011]S104:备库创建一个SQL线程,通过创建的SQL线程依次读取relay日志中记录的每个操作记录。
[0012]继续沿用上例,备库读取到的操作记录即为将数据A更新为数据B的操作记录。
[0013]S105:备库根据读取到的操作记录,确定要根据该操作记录进行操作的数据。
[0014]继续沿用上例,由于读取到的操作记录为将数据A更新为数据B的操作记录,因此备库确定要根据该操作记录进行操作的数据为自身保存的数据A。
[0015]S106:备库判断自身的内存中是否已经写入了确定的数据,若判断结果为是,则进行步骤S108,否则进行步骤S107。
[0016]继续沿用上例,备库判断内存中是否已经写入了该数据A。
[0017]S107:备库从外部存储器中将确定的数据读取到内存中,进行步骤S108。
[0018]如果当前备库的内存中未写入该数据A,则备库需要从外部存储器中读取该数据A,并写入到内存中。其中,该外部存储器可以为磁盘等存储装置。
[0019]S108:根据读取到的该操作记录,对内存中该确定的数据进行相应的操作。
[0020]当备库的内存中已经写入了该数据A时,则根据读取到的将数据A更新为数据B的操作记录,将内存中写入的该数据A更新为数据B。
[0021]S109:将操作后的数据从内存中写入到外部存储器中。[0022]备库将内存中更新的数据B写入到外部存储器中,完成对主库数据的备份。
[0023]在上述图1所示的过程中,对于备库的外部存储器中保存的数据来说,如果备库不对该数据进行操作,则该数据是不会被写入到备库的内存中的,因此通常上述步骤S106的判断结果为否,需要执行步骤S107,也即通常备库需要先将要进行操作的数据从外部存储器读取到内存中。
[0024]然而,备库将外部存储器中保存的数据读取到内存中需要消耗的时间较长,实际上在图1所示的步骤SlOf S109所需要消耗的总的时间中,将外部存储器中保存的数据读取到内存中的步骤(步骤S107)所消耗的时间就占了很大一部分,这显然会降低备库进行数据备份的效率。

【发明内容】

[0025]本申请实施例提供一种数据备份方法及装置,用以解决现有技术中备库进行数据备份的效率较低的问题。
[0026]本申请实施例提供的一种数据备份方法,包括:
[0027]预读装置获取备库中的relay日志;并
[0028]确定所述备库当前正在处理的操作记录在所述relay日志中的位置;以及
[0029]从所述备库的外部存储器中读取所述relay日志中位于确定的位置之后的操作记录对应的数据,并写入到所述备库的内存中,使所述备库在处理所述relay日志中位于所述确定的位置之后的操作记录时,对已经写入到内存中的相应的数据进行操作,实现数据的备份。
[0030]本申请实施例提供的一种数据备份装置,包括:
[0031]获取模块,用于获取备库中的relay日志;
[0032]确定模块,用于确定所述备库当前正在处理的操作记录在所述relay日志中的位置;
[0033]预读模块,用于从所述备库的外部存储器中读取所述relay日志中位于确定的位置之后的操作记录对应的数据,并写入到所述备库的内存中,使所述备库在处理所述relay日志中位于所述确定的位置之后的操作记录时,对已经写入到内存中的相应的数据进行操作,实现数据的备份。
[0034]本申请实施例提供一种数据备份方法及装置,该方法预读装置获取备库中的relay日志,确定备库当前正在处理的操作记录在该relay日志中的位置,从备库的外部存储器中读取该relay日志中位于确定的位置之后的操作记录对应的数据,并写入到备库的内存中。由于本申请实施例中预读装置将relay日志中位于备库当前正在处理的操作记录的位置之后的操作记录对应的数据读取到备库的内存中,也即将备库后续要处理的操作记录对应的数据读取到了备库的内存中,因此备库在处理后续的操作记录时,无需从外部存储器中将相应的数据读取到内存中,直接对内存中已经写入的数据进行操作即可,从而提高了数据备份的效率。
【专利附图】

【附图说明】
[0035]图1为现有技术中MySQL中的主库将自身的数据备份到备库的过程;[0036]图2为本申请实施例提供的数据备份的过程;
[0037]图3为本申请实施例提供的预读装置将备库后续需要操作的数据预先读取到备库的内存中的过程;
[0038]图4为本申请实施例提供的数据备份装置结构示意图。
【具体实施方式】
[0039]由于现有技术中备库根据读取的relay日志中的操作记录对相应的数据进行操作时,通常需要在外部存储器中将相应的数据读取到内存中再进行操作,而在外部存储器中读取数据需要耗费较长的时间,因此数据备份的效率较低。尤其是当主库并发的对多个数据进行更新时,备库就会由于数据备份的效率较低而导致备库中数据的更新速度远远滞后于主库。
[0040]例如,主库在I秒钟内并发的对10个数据进行了更新,因此binlog日志中I秒钟内产生了 10个操作记录。而备库读取该binlog日志并转换为relay日志后,是按照relay日志中记录的各操作记录的先后顺序,依次对各操作记录进行处理的,也即备库是串行处理relay日志中的操作记录的。假设备库每处理一个操作记录需要消耗I秒钟,则备库处理relay日志中相应的10个操作记录,完成相应的10个数据的备份就需要10秒的时间。可见,主库消耗I秒钟完成的10个数据的更新,备库则需要消耗10秒钟才能完成相应的10个数据的备份。而在备库需要消耗的这10秒钟时间中,从外部存储器中将10个数据读取到内存的过程所需要的时间就占了很大一部分。
[0041]因此,本申请实施例旨在当备库处理relay日志中的某个操作记录时,将relay日志中位于备库当前正在处理的该操作记录之后的操作记录对应的数据读取到备库的内存中,也即将备库后续要处理的操作记录对应的数据读取到备库的内存中,使备库在处理后续的操作记录时,无需再从外部存储器读取相应的数据,直接对内存中已经写入的数据进行操作即可,以提高数据备份的效率。
[0042]下面结合说明书附图,对本申请实施例进行详细描述。
[0043]图2为本申请实施例提供的数据备份的过程,具体包括以下步骤:
[0044]S201:预读装置获取备库中的relay日志。
[0045]本申请实施例增加了预读装置,该预读装置在备库要对主库中的数据进行备份时,获取备库进行数据备份所基于的relay日志。
[0046]其中,预读装置可以通过与备库相似的方法,读取主库保存的binlog日志,并将读取的binlog日志转换成relay日志,作为获取的备库中的relay日志。为了尽量降低预读装置从主库中读取binlog日志所带来的网络开销,预读装置也可以在备库读取主库保存的binlog日志,并转换成relay日志之后,读取备库转换的relay日志,作为获取的备库中的relay日志。
[0047]S202:确定备库当前正在处理的操作记录在该relay日志中的位置。
[0048]在本申请实施例中,预读装置监测备库当前正在处理的操作记录,由于预读装置已经获取了同样的relay日志,因此可以确定备库当前正在处理的操作记录在relay日志中的位置。
[0049]例如,假设备库根据读取的binlog日志转换的relay日志中共包括100个操作记录,并且当前正在处理该relay日志中的某个操作记录,由于预读装置也获取的同样的relay日志,因此可以根据监测到的备库当前正在处理的该操作记录,定位备库当前正在处理的操作记录在该relay日志中的位置。
[0050]S203:从备库的外部存储器中读取该relay日志中位于确定的位置之后的操作记录对应的数据,并写入到备库的内存中。
[0051]继续沿用上例,假设在步骤S202中预读装置确定备库当前正在处理的操作记录在该relay日志中的位置是第I个,则预读装置在备库的外部存储器中,读取该relay日志中第I个操作记录之后的操作记录对应的数据,并写入到内存中,具体可以按照该relay日志中记录的各操作记录的先后顺序,依次将第I个操作记录之后的各操作记录对应的数据读取到备库的内存中,也即,将该relay日志中第2个操作记录对应的数据读取到内存中,再将该relay日志中第3个操作记录对应的数据读取到内存中,以此类推,直至将该relay日志中最后一个操作记录对应的数据读取到内存中为止。
[0052]另外,在上述步骤S203中,预读装置可以将该relay日志中位于确定的位置之后的操作记录解析为执行语句,将解析的执行语句中包含的更新操作语句、插入操作语句、删除操作语句替换为选择操作语句并执行,以读取备库的外部存储器中相应的数据,并写入到备库的内存中。
[0053]这是因为备库根据操作记录对相应的数据进行操作的方法即为,将该操作记录解析为执行语句并执行,以对相应的数据进行操作。其中,解析成的执行语句中包括更新操作(update)语句、插入操作(insert)语句、删除操作(delete)语句,update语句是对数据的更新操作,insert语句是对数据的插入操作,delete语句是对数据的删除操作。而选择操作(select)语句是对数据的选择操作,实质上就是将相应的数据读取到内存中的操作,因此本申请实施例中预读装置采用同样的方法将relay日志中位于确定的位置之后的操作记录解析为执行语句,将解析出的执行语句中的update语句、insert语句、delete语句替换为select语句后并执行,即可实现将相应的数据读取到备库的内存中。
[0054]S204:备库在处理该relay日志中位于该确定的位置之后的操作记录时,对已经写入到内存中的相应的数据进行操作,实现数据的备份。
[0055]继续沿用上例,备库处理该relay日志中第I个操作记录之后,也即按照如图1所示的现有技术根据relay日志中的第I个操作记录对相应的数据进行备份之后,对该relay日志中的第2个操作记录进行处理。首先,备库确定该第2个操作记录对应的数据,也即确定要根据该第2个操作记录进行操作的数据。然后,备库判断自身的内存中是否已经写入了该第2个操作记录对应的数据。此时,由于该第2个操作记录对应的数据已经被预读装置读取并写入到内存中,因此备库直接对内存中已经写入的该第2个操作记录对应的数据进行相应的操作,以完成第2个操作记录对应的数据的备份,而无需耗费大量的时间从外部存储器中将该第2个操作记录对应的数据读取到内存中,从而提高了备份数据的效率。
[0056]较佳的,由于本申请实施例的核心思想就在于预读装置将备库后续要操作的数据预先读取到备库的内存中,使备库在对后续要操作的数据进行操作时,无需从外部存储器中再读取相应的数据,以提高数据备份的效率,因此,为了保证预读装置读取到备库内存中的数据一定是备库后续要操作的数据,在图2所示的步骤S202中,预读装置确定了备库当前正在处理的操作记录在relay日志中的位置之后,步骤S203中预读装置读取该relay日志中位于确定的位置之后的操作记录对应的数据的方法具体为:根据确定的位置以及设定的偏移值,确定relay日志中位于该确定的位置之后的偏移位置,并按照relay日志中记录的各操作记录的先后顺序,依次解析relay日志中位于该偏移位置之后的操作记录,并根据解析的操作记录读取对应的数据。
[0057]也即,预读装置确定了备库当前正在处理的操作记录在relay日志中的位置之后,根据设定的偏移值,在relay日志中确定相对于确定的位置向后偏移了该设定的偏移值的位置,作为偏移位置,并按照relay日志中记录的各操作记录的先后顺序,依次读取relay日志中位于该偏移位置之后的操作记录对应的数据。
[0058]例如,假设备库转换的relay日志中共包含100个操作记录,相应的,预读装置获取到的relay日志中也包含相同的100个操作记录。假设备库当前正在处理的操作记录是relay日志中的第I个操作记录,设定偏移值为9,则预读装置确定relay日志中位于确定的位置之后的偏移位置即为relay日志中第10个操作记录所在的位置,预读装置按照该relay日志中记录的各操作记录的先后顺序,依次解析该relay日志中位于偏移位置之后的操作记录,也即依次解析relay日志中第IflOO个操作记录,并根据解析的操作记录读取对应的数据。对于relay日志中第f 10个操作记录对应的数据,则由备库自行从自身的外部存储器中读取。这样就保证了预读装置读取并写入到备库内存中的数据一定是备库后续要操作的数据。
[0059]通过上述方法,一方面,备库基于relay日志中的各操作记录,对内存中已经写入的数据进行操作,完成相应数据的备份,另一方面,预读装置也在按照relay日志中各操作记录的先后顺序,依次将后续备库要操作的数据预先读取到备库的内存中,从而可以显著提高数据备份的效率。
[0060]进一步的,考虑到在实际应用中,备库对内存中已经写入的数据进行操作的操作速度,可能会慢于预读装置依次将后续备库要操作的数据预先读取到备库的内存中的读取速度,也可能会快于预读装置依次将后续备库要操作的数据预先读取到备库的内存中的读取速度。
[0061]如果备库的操作速度慢于预读装置的读取速度,则会导致备库的内存中积压越来越多的备库后续需要操作的数据,而备库的内存容量是有限的,如果内存中已经存满了备库后续需要操作的数据,而预读装置继续将备库后续需要操作的数据读取到内存中,就会导致预读装置之前读取到备库内存中的数据溢出而被丢弃。
[0062]继续以relay日志中共包含100个操作记录为例对上述情况进行说明。备库当前正在处理第I个操作记录,假设设定的偏移值为9,则预读装置从第11个的操作记录依次向后读取各操作记录对应的数据并写入到内存中。而由于备库的操作速度慢于预读装置的读取速度,则可能备库在处理记录第21个操作记录时,预读装置已经将第70个操作记录对应的数据读取到了备库的内存中,假设备库的内存最多可以容纳50个操作记录对应的数据,则此时备库的内存中已经写入了 relay日志中第2广70这50个操作记录对应的数据。如果此时预读装置继续将第71个操作记录对应的数据读取到备库的内存中,则会导致备库的内存中已经写入的第2广70这50个操作记录对应的数据中的某个数据溢出而被丢弃。假设因溢出而被丢弃的数据为第22个操作记录对应的数据,则备库在处理完第21个操作记录时,继续处理第22个操作记录,而由于此时第22个操作记录对应的数据已经被丢弃,不存在于备库的内存中,从而备库仍需要自行将该第22个操作记录对应的数据读取到内存中,这就会降低数据备份的效率。
[0063]相反的,如果备库的操作速度快于预读装置的读取速度,则会导致备库的内存中已经被写入的后续需要操作的数据越来越少,当备库的内存中已经没有备库后续操作的数据时,备库仍需要自行从外部存储器中读取数据。
[0064]继续以relay日志中共包含100个操作记录为例对上述情况进行说明。备库当前正在处理第I个操作记录,假设设定的偏移值为9,则预读装置从第11个操作记录依次向后读取各操作记录对应的数据并写入到内存中。而由于备库的操作速度快于预读装置的读取速度,则可能备库在处理第21个操作记录时,预读装置还未将第21个操作记录对应的数据读取到备库的内存中,而由于此时第21个操作记录对应的数据不存在于备库的内存中,因此备库仍需要自行将第21个操作记录对应的数据读取到内存中,这样同样会降低数据备份的效率。
[0065]因此,本申请实施例中为了避免由于备库的操作速度慢于或者快于预读装置的读取速度而导致数据备份的效率降低的问题,预读装置在按照relay日志中记录的各操作记录的先后顺序,依次解析该relay日志中位于偏移位置之后的操作记录,并根据解析的操作记录读取对应的数据的过程中,还要监测relay日志中位于自身正在解析的操作记录与备库当前正在处理的操作记录之间的操作记录的数量。
[0066]当监测到的数量不大于第一设定阈值且不小于第二设定阈值时,预读装置继续依次解析该relay日志中位于偏移位置之后的操作记录;
[0067]当监测到的数量大于第一设定阈值时,预读装置暂停对操作记录的解析,并在暂停设定的时间长度之后,继续依次解析该relay日志中位于偏移位置之后的操作记录;
[0068]当监测到的数量小于第二设定阈值时,重新确定备库当前正在处理的操作记录在relay日志中的位置,根据重新确定的位置以及设定的偏移值重新确定偏移位置,并按照该relay日志中记录的各操作记录的先后顺序,依次解析该relay日志中位于重新确定的偏移位置之后的操作记录。
[0069]其中,第一设定阈值和第二设定阈值可以根据需要进行设定。
[0070]继续relay日志中共包含100个操作记录为例对上述情况进行说明。备库当前正在处理第I个操作记录,假设设定的偏移值为9,则预读装置从记录编号为11的操作记录依次向后读取各操作记录对应的数据并写入到内存中。假设第一设定阈值为40,第二设定阈值为10,则采用上述方法可以分为以下三种情况:
[0071]情况一、当备库的操作速度与预读装置的读取速度相比比较合适时,则可能备库在处理第21个操作记录时,预读装置正在解析第46个操作记录,要将该第46个操作记录对应的数据读取到备库的内存中。此时,预读装置监测的relay日志中位于自身正在解析的操作记录与备库正在处理的操作记录之间的操作记录的数量为25,该数量25不大于第一设定阈值40且不小于第二设定阈值10,说明备库的操作速度与预读装置的读取速度相比比较合适,无需调整自身的读取速度。因此,预读装置继续按照该relay日志中记录的各操作记录的先后顺序,依次解析该relay日志中位于偏移位置之后的操作记录,并根据解析的操作记录读取对应的数据。
[0072]情况二、当备库的操作速度慢于预读装置的读取速度时,则可能备库在处理第21个操作记录时,预读装置正在解析第62个操作记录,要将该第62个操作记录对应的数据读取到备库的内存中。此时,预读装置监测的relay日志中位于自身正在解析的操作记录与备库正在处理的操作记录之间的操作记录的数量为41,该数量41大于第一设定阈值40,说明预读装置的读取速度过快,需要降低调整自身的读取速度。因此,预读装置暂停对操作记录的解析,也即暂停解析该第62个操作记录,暂停对该第62个操作记录对应的数据的读取。假设设定的时间长度为10秒,则预读装置在暂停10秒之后,继续依次解析该relay日志中位于偏移位置之后的操作记录,并读取根据的操作记录读取对应的数据,也即继续解析该第62个操作记录,将该第62个操作记录对应的数据读取到备库的内存中。
[0073]情况三、当备库的操作速度快于预读装置的读取速度时,则可能备库在处理第21个操作记录时,预读装置正在解析第30个操作记录,要将该第30个操作记录对应的数据读取到备库的内存中。此时,预读装置监测的relay日志中位于自身正在解析的操作记录与备库正在处理的操作记录之间的操作记录的数量为9,该数量9小于第二设定阈值10,说明预读装置的读取速度过慢,需要提高调整自身的读取速度。因此,预读装置重新确定备库当前正在处理的操作记录在relay日志中的位置,重新确定的位置即为第21个操作记录所在的位置,根据重新确定的位置以及设定的偏移值9重新确定偏移位置,重新确定的偏移位置即为30,预读装置按照该relay日志中记录的各操作记录的先后顺序,依次解析该relay日志中位于重新确定的偏移位置(第30个操作记录所在的位置)之后的操作记录,并根据解析的操作记录读取对应的数据。也即,此时预读装置放弃对第30个操作记录的解析,放弃对第30个操作记录对应的数据的读取,直接从第31个操作记录开始解析并读取相应的数据,第30个操作记录对应的数据由备库自行从外部存储器中读取到内存中。
[0074]进一步的,当预读装置监测到relay日志中自身正在解析的操作记录位于备库当前正在处理的操作记录之前时,也要按照上述情况三所述的方法进行处理,也即,重新确定备库当前正在处理的操作记录在relay日志中的位置,根据重新确定的位置以及设定的偏移值重新确定偏移位置,并按照该relay日志中记录的各操作记录的先后顺序,依次解析该relay日志中位于重新确定的偏移位置之后的操作记录。
[0075]通过上述方法,实现了对预读装置读取速度的控制,使预读装置的读取速度适应备库的操作速度,以保证在备库的内存中写入备库后续需要操作的数据。
[0076]另外,在实际应用中,通常主库的binlog日志中的每个操作记录都对应着一个唯一的记录编号。具体的,主库每生成一个操作记录,就将该操作记录记录在binlog日志中,并为该操作记录设置记录编号,为该操作记录设置的记录编号具体为上一次生成的操作记录的记录编号加I。也即,binlog日志中的第I个操作记录的记录编号为1,第2个操作记录的记录编号为2,以此类推。而由于备库转换的relay日志的内容与主库的binlog日志的内容是相同的,只是两种日志的格式不同,因此在备库转换的relay日志中,以及预读装置获取到的relay日志中,每个操作记录也具有相应的记录编号,并且,同一个操作记录在binlog日志中的记录编号与在relay日志中的记录编号也是相同的。从而,relay日志中操作记录的记录编号可以反映出该操作记录在该relay日志中的位置。
[0077]因此,在图2所示的步骤S202中,预读装置确定备库当前正在处理的操作记录在relay日志中的位置的方法可以为:确定备库当前正在处理的操作记录的记录编号。
[0078]并且,预读装置读取该relay日志中位于确定的位置之后的操作记录对应的数据的方法可以为:确定备库当前正在处理的操作记录的记录编号与设定偏移值的和值,按照该relay日志中各操作记录的记录编号从小到大的顺序,依次解析该relay日志中记录编号大于确定的该和值的操作记录,并根据解析的操作记录读取对应的数据,将读取的数据写入到备库的内存中。
[0079]进一步的,预读装置监测relay日志中位于自身正在解析的操作记录与备库当前正在处理的操作记录之间的操作记录的数量的方法可以为:监测自身正在解析的操作记录的记录编号与备库当前正在处理的操作记录的记录编号的差值。当监测到的差值不大于第一设定阈值且不小于第二设定阈值时,预读装置继续依次解析该relay日志中记录编号大于确定的该和值的操作记录;当监测到的差值大于第一设定阈值时,预读装置暂停对操作记录的解析,并在暂停设定的时间长度之后,继续依次解析该relay日志中记录编号大于确定的该和值的操作记录;当监测到的差值小于第二设定阈值时,重新确定备库当前正在处理的操作记录的记录编号与设定偏移值的和值,并按照该relay日志中各操作记录的记录编号从小到大的顺序,依次解析该relay日志中记录编号大于重新确定的该和值的操作记录。
[0080]另外,在MySQL中,备库对主库中的数据进行备份有两种模式,一种是语句(STATEMENT)模式,另一种是行(ROW)模式。在STATEMENT模式下,备库进行数据备份时所基于的relay日志是普通的日志,而在ROW模式下,备库进行数据备份时所基于的relay日志是二进制日志。因此,当备库采用STATEMENT模式进行数据备份时,预读装置可以采用任意计算机语言编程实现,只要能够解析普通的relay日志即可。而当备库采用ROW模式进行数据备份时,就需要预读装置可以解析二进制的relay日志,由于MySQL是采用C++语言编写的开源代码,因此可以将MySQL中用于解析ROW模式下二进制relay日志的代码应用到本申请实施例的预读装置中,使预读装置可以解析ROW模式下二进制的relay日志,此时,本申请实施例中的预读装置采用C++语言编程实现。
[0081]图3为本申请实施例提供的预读装置将备库后续需要操作的数据预先读取到备库的内存中的过程,具体包括以下步骤:
[0082]S301:预读装置在备库读取主库保存的binlog日志,并转换成relay日志之后,读取备库转换的relay日志。
[0083]S302:确定备库当前正在处理的操作记录的记录编号。
[0084]S303:确定备库当前正在处理的操作记录的记录编号与设定偏移值的和值,对relay日志中记录编号为该和值的操作记录的下一个操作记录进行解析,并根据解析的操作记录读取对应的数据,将读取的数据写入到备库的内存中。
[0085]S304:预读装置监测自身正在解析的操作记录的记录编号与备库当前正在处理的操作记录的记录编号的差值,当监测到的差值不大于第一设定阈值且不小于第二设定阈值时,执行步骤S305,当监测到的差值大于第一设定阈值时,执行步骤S306,当监测到的差值小于第二设定阈值时,执行步骤S307。
[0086]S305:按照relay日志中各操作记录的记录编号从小到大的顺序,解析下一个操作记录,并读取解析的下一个操作记录对应的数据,将读取的数据写入到备库的内存中,返回步骤S304。
[0087]S306:暂停对操作记录的解析和对数据的读取,并在暂停设定的时间长度之后,继续解析下一个操作记录,并读取解析的下一个操作记录对应的数据,将读取的数据写入到备库的内存中,返回步骤S304。
[0088]S307:重新确定备库当前正在处理的操作记录的记录编号与设定偏移值的和值,并解析该relay日志中记录编号为重新确定的该和值的操作记录,并读取解析的操作记录对应的数据,返回步骤S304。
[0089]上述图3所示的过程为备库进行数据备份时,预读装置将备库后续需要操作的数据预先读取到备库的内存中的过程,在预读装置进行如图3所示的过程时,备库也要按照relay日志中记录的各操作记录的先后顺序,依次根据各操作记录对内存中相应的数据进行操作,实现数据备份。
[0090]图4为本申请实施例提供的数据备份装置结构示意图,具体包括:
[0091]获取模块401,用于获取备库中的relay日志;
[0092]确定模块402,用于确定所述备库当前正在处理的操作记录在所述relay日志中的位置;
[0093]预读模块403,用于从所述备库的外部存储器中读取所述relay日志中位于确定的位置之后的操作记录对应的数据,并写入到所述备库的内存中,使所述备库在处理所述relay日志中位于所述确定的位置之后的操作记录时,对已经写入到内存中的相应的数据进行操作,实现数据的备份。
[0094]所述获取模块401具体用于,读取主库保存的binlog日志,并将读取的binlog日志转换成relay日志,作为获取的备库中的relay日志,或者,在所述备库读取主库保存的binlog日志,并转换成relay日志之后,读取所述备库转换的relay日志,作为获取的备库中的relay日志。
[0095]所述预读模块403具体用于,根据所述确定的位置以及设定的偏移值,确定所述relay日志中位于所述确定的位置之后的偏移位置,按照所述relay日志中记录的各操作记录的先后顺序,依次解析所述relay日志中位于所述偏移位置之后的操作记录,并根据解析的操作记录读取对应的数据。
[0096]所述装置还包括:
[0097]监测模块404,用于监测所述relay日志中位于所述预读模块403正在解析的操作记录与所述备库当前正在处理的操作记录之间的操作记录的数量;
[0098]所述预读模块403具体用于,当监测到的数量不大于第一设定阈值且不小于第二设定阈值时,继续依次解析所述relay日志中位于所述偏移位置之后的操作记录;当监测到的数量大于第一设定阈值时,暂停对操作记录的解析,并在暂停设定的时间长度之后,继续依次解析所述relay日志中位于所述偏移位置之后的操作记录;当监测到的数量小于第二设定阈值时,重新确定所述备库当前正在处理的操作记录在所述relay日志中的位置,根据重新确定的位置以及所述设定的偏移值重新确定偏移位置,并按照所述relay日志中记录的各操作记录的先后顺序,依次解析所述relay日志中位于所述偏移位置之后的操作记录。
[0099]所述预读模块403具体用于,将所述relay日志中位于确定的位置之后的操作记录解析为执行语句,将解析的执行语句中包含的更新操作语句、插入操作语句、删除操作语句替换为选择操作语句并执行,以读取所述备库的外部存储器中相应的数据,并写入到所述备库的内存中。
[0100]本申请实施例提供一种数据备份方法及装置,该方法预读装置获取备库中的relay日志,确定备库当前正在处理的操作记录在该relay日志中的位置,从备库的外部存储器中读取该relay日志中位于确定的位置之后的操作记录对应的数据,并写入到备库的内存中。由于本申请实施例中预读装置将relay日志中位于备库当前正在处理的操作记录的位置之后的操作记录对应的数据读取到备库的内存中,也即将备库后续要处理的操作记录对应的数据读取到了备库的内存中,因此备库在处理后续的操作记录时,无需从外部存储器中将相应的数据读取到内存中,直接对内存中已经写入的数据进行操作即可,从而提高了数据备份的效率。
[0101]显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
【权利要求】
1.一种数据备份方法,其特征在于,包括: 预读装置获取备库中的relay日志;并 确定所述备库当前正在处理的操作记录在所述relay日志中的位置;以及从所述备库的外部存储器中读取所述relay日志中位于确定的位置之后的操作记录对应的数据,并写入到所述备库的内存中,使所述备库在处理所述relay日志中位于所述确定的位置之后的操作记录时,对已经写入到内存中的相应的数据进行操作,实现数据的备份。
2.如权利要求1所述的方法,其特征在于,预读装置获取备库中的relay日志,具体包括: 所述预读装置读取主库保存的binlog日志,并将读取的binlog日志转换成relay日志,作为获取的备库中的relay日志;或者 所述预读装置在所述备库读取主库保存的binlog日志,并转换成relay日志之后,读取所述备库转换的relay日志,作为获取的备库中的relay日志。
3.如权利要求1所述的方法,其特征在于,读取所述relay日志中位于确定的位置之后的操作记录对应的数据,具体包括: 根据所述确定的位置以及设定的偏移值,确定所述relay日志中位于所述确定的位置之后的偏移位置;并 按照所述relay日志中记录的各操作记录的先后顺序,依次解析所述relay日志中位于所述偏移位置之后的操作记录,并根据解析的操作记录读取对应的数据。
4.如权利要求3所述的方法,其特征在于,所述方法还包括: 所述预读装置监测所述relay日志中位于自身正在解析的操作记录与所述备库当前正在处理的操作记录之间的操作记录的数量; 依次解析所述relay日志中位于所述偏移位置之后的操作记录,具体包括: 当监测到的数量不大于第一设定阈值且不小于第二设定阈值时,继续依次解析所述relay日志中位于所述偏移位置之后的操作记录; 当监测到的数量大于第一设定阈值时,暂停对操作记录的解析,并在暂停设定的时间长度之后,继续依次解析所述relay日志中位于所述偏移位置之后的操作记录; 当监测到的数量小于第二设定阈值时,重新确定所述备库当前正在处理的操作记录在所述relay日志中的位置,根据重新确定的位置以及所述设定的偏移值重新确定偏移位置,并按照所述relay日志中记录的各操作记录的先后顺序,依次解析所述relay日志中位于重新确定的偏移位置之后的操作记录。
5.如权利要求1所述的方法,其特征在于,从所述备库的外部存储器中读取所述relay日志中位于确定的位置之后的操作记录对应的数据,并写入到所述备库的内存中,具体包括: 将所述relay日志中位于确定的位置之后的操作记录解析为执行语句,将解析的执行语句中包含的更新操作语句、插入操作语句、删除操作语句替换为选择操作语句并执行,以读取所述备库的外部存储器中相应的数据,并写入到所述备库的内存中。
6.一种数据备份装置,其特征在于,包括: 获取模块,用于获取备库中的relay日志;确定模块,用于确定所述备库当前正在处理的操作记录在所述relay日志中的位置; 预读模块,用于从所述备库的外部存储器中读取所述relay日志中位于确定的位置之后的操作记录对应的数 据,并写入到所述备库的内存中,使所述备库在处理所述relay日志中位于所述确定的位置之后的操作记录时,对已经写入到内存中的相应的数据进行操作,实现数据的备份。
7.如权利要求6所述的装置,其特征在于,所述获取模块具体用于,读取主库保存的binlog日志,并将读取的binlog日志转换成relay日志,作为获取的备库中的relay日志,或者,在所述备库读取主库保存的binlog日志,并转换成relay日志之后,读取所述备库转换的relay日志,作为获取的备库中的relay日志。
8.如权利要求6所述的装置,其特征在于,所述预读模块具体用于,根据所述确定的位置以及设定的偏移值,确定所述relay日志中位于所述确定的位置之后的偏移位置,按照所述relay日志中记录的各操作记录的先后顺序,依次解析所述relay日志中位于所述偏移位置之后的操作记录,并根据读取解析的操作记录读取对应的数据。
9.如权利要求8所述的装置,其特征在于,所述装置还包括: 监测模块,用于监测所述relay日志中位于所述预读模块正在解析的操作记录与所述备库当前正在处理的操作记录之间的操作记录的数量; 所述预读模块具体用于,当监测到的数量不大于第一设定阈值且不小于第二设定阈值时,继续依次解析所述relay日志中位于所述偏移位置之后的操作记录;当监测到的数量大于第一设定阈值时,暂停对操作记录的解析,并在暂停设定的时间长度之后,继续依次解析所述relay日志中位于所述偏移位置之后的操作记录;当监测到的数量小于第二设定阈值时,重新确定所述备库当前正在处理的操作记录在所述relay日志中的位置,根据重新确定的位置以及所述设定的偏移值重新确定偏移位置,并按照所述relay日志中记录的各操作记录的先后顺序,依次解析所述relay日志中位于重新确定的偏移位置之后的操作记录。
10.如权利要求6所述的装置,其特征在于,所述预读模块具体用于,将所述relay日志中位于确定的位置之后的操作记录解析为执行语句,将解析的执行语句中包含的更新操作语句、插入操作语句、删除操作语句替换为选择操作语句并执行,以读取所述备库的外部存储器中相应的数据,并写入到所述备库的内存中。
【文档编号】G06F11/14GK103544076SQ201210244652
【公开日】2014年1月29日 申请日期:2012年7月13日 优先权日:2012年7月13日
【发明者】翟卫祥, 刘辉, 张新铭 申请人:阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1