CN103294570B - 一种内存数据的备份方法和装置 - Google Patents
一种内存数据的备份方法和装置 Download PDFInfo
- Publication number
- CN103294570B CN103294570B CN201210041910.5A CN201210041910A CN103294570B CN 103294570 B CN103294570 B CN 103294570B CN 201210041910 A CN201210041910 A CN 201210041910A CN 103294570 B CN103294570 B CN 103294570B
- Authority
- CN
- China
- Prior art keywords
- file
- binlog
- dump
- data
- current
- 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.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种内存数据的备份方法和装置。该方法包括:判断当前流水日志(Binlog)文件的大小是否会大于一阈值,如果是,启动对内存数据的备份过程,并打开另一Binlog文件,将该另一Binlog文件作为当前Binlog文件,否则,在当前Binlog文件中记录对内存数据进行的操作信息。应用本发明能够提高数据安全性。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种内存数据的备份方法和装置。
背景技术
在现代互联网分布式数据存储系统中,通常数据最终存储于磁盘中,包括IDE,SATA,SCSI,SAS磁盘等。这些磁盘只能支持有限的的随机磁盘IO读写次数,而在互联网应用中,用户产生的数据量大,对数据的访问量大,而在磁盘上的大量的读写容易导致磁盘IO能力出现瓶颈。
为了降低磁盘IO负载,通常在将数据存储到磁盘之前,在前端模块增加内存模块,用于缓存用户产生的数据,然后由内存模块将缓存的数据写入到磁盘中。内存模块的访问速度是磁盘访问速度的10000倍以上,这样能大幅提高系统的处理能力。并且,利用内存模块,能有效的合并对磁盘的IO操作,降低磁盘的IO负载。但是,内存模块在断电后就丢失了数据,这对于任何关注数据安全的服务来说都是不可接受的,特别是如果内存模块中还有未写入到磁盘中的数据,后果会非常严重。
为了保证数据安全,一般采用备份数据(dump)+流水日志(binlog)的方式来保证内存数据在机器掉电后仍能恢复,即将内存模块中尚未写入磁盘中的数据进行备份,并将备份数据写入到磁盘中,然后再记录对内存模块操作的流水日志,一旦机器掉电,则能根据内存模块最近一次的备份数据和内存模块的流水日志进行恢复。
具体地,现有采用的内存数据的备份方法是,定时全量备份内存数据,即在设置的时间点到来之后,对内存块中的所有数据进行全量扫描,并将内存块中的所有数据写入到备份文件(dump文件)中,即进行dump操作。并且,有的备份方法在内存块中的所有数据都扫描完毕并写入到备份文件后,清理该内存块原有的流水日志,并开始记录新的流水日志,还有的备份方法在备份时间点到来时,就清理该内存块原有的流水日志,并开始记录新的流水日志。
当机器掉电后,内存块中的数据丢失,此时,需要根据dump文件和流水日志(binlog文件)恢复内存块中丢失的数据。
目前,恢复内存块中丢失的数据的方法具体包括:
首先读取dump文件,将其中的相关数据重新设置到内存中,之后再读取binlog文件,在当前内存数据基础上根据binlog文件所记录的操作,来重复以前的行为,从而恢复内存块中丢失的数据。
可见,目前内存数据的备份方法中,由于是定时对内存块中的数据进行备份(dump),在进行dump的时间点到来后,原有binlog文件会被归零,并开始记录新的binlog文件,即将新的操作流水不断写入到新的binlog文件中,利用新的binlog文件覆盖原有的binlog文件。
可见,在两次的dump期间,binlog文件大小会一直增长,存在把磁盘分区容量耗尽的风险,在这种情况下,新的操作流水实质上没有写入到binlog文件中。如果新的操作流水没有写入到binlog文件中,而下一dump时间点又没有到来,那么一旦此时机器掉电,将会造成数据丢失。因此,现有的内存数据备份方法,仍然存在着数据安全隐患。
另外,现有的某些内存数据备份方法中,在内存数据的备份时间点到来时,会马上将原有的操作流水归零,然后开始记录新的操作流水,但是,由于内存数据的备份过程也需要一段时间才能完成,如果在备份过程中,出现了掉电情况,则原有的内存数据未能成功备份,即dump文件不完整,而原有的操作流水又已经被归零,因此,将导致无法进行数据恢复,最终导致数据丢失,存在着另一处数据安全隐患。
再者,目前的内存数据备份方法,采用的是一次全量备份的方法。具体请参见图1。
图1是目前的内存数据的组织结构图。
如图1所示,现有的内存数据采用hash方式进行组织,节点(Node)存储了数据索引(key),chunk中存储了数据key对应的实际数据。不同的数据key被hash函数均匀的分布到不同的桶(bucket)中,每个bucket中的node通过链指针进行串连。
服务的主进程在进行dump数据时,会根据内存中记录的bucket数,遍历所有的桶,其中,对每个bucket,遍历落入该bucket中的node,根据node获取数据key及value,然后保存到dump文件中,如此直到所有的桶都遍历完毕。
可见,现有的一次性全量备份内存数据的方法,还存在着一个问题:当内存数据较多时,遍历bucket及node的过程可能会持续数分钟,在数分钟内,由于服务的主进程被占用,导致主进程阻塞,即处于一种不可中断的等待状态,影响主进程进行业务响应,导致了服务不可用。
发明内容
有鉴于此,本发明提供了一种内存数据的备份方法和装置,从而提高数据安全性。
本发明的技术方案具体是这样实现的:
一种内存数据的备份方法,该方法包括:
判断当前流水日志(Binlog)文件的大小是否会大于一阈值,如果是,启动对内存数据的备份过程,并打开另一Binlog文件,将该另一Binlog文件作为当前Binlog文件,否则,在当前Binlog文件中记录对内存数据进行的操作信息。
所述启动对内存数据的备份过程,并打开另一Binlog文件,将该另一Binlog文件作为当前Binlog文件包括:假设当前Binlog文件为Binlog文件A,则在Binlog文件A的大小会大于一阈值时,启动将内存数据写入备份(dump)文件B的备份过程,打开并初始化Binlog文件B,将该Binlog文件B作为当前Binlog文件,在Binlog文件B的大小会大于一阈值时,启动将内存数据写入dump文件A的备份过程,打开并初始化Binlog文件A,将Binlog文件A作为当前Binlog文件;
该方法还包括:根据dump文件和Binlog文件恢复内存数据的步骤,其中:
如果dump文件A和dump文件B均不存在,则根据Binlog文件A恢复内存数据;
如果dump文件B完整、且dump文件A不存在,则在dump文件B的基础上,根据Binlog文件B恢复内存数据,并在恢复成功后,将Binlog文件B作为当前Binlog文件;
如果dump文件B不完整、且dump文件A不存在,则根据Binlog文件A和Binlog文件B恢复内存数据,并在恢复成功后,启动将内存数据写入到dump文件B的备份过程、且将Binlog文件B作为当前Binlog文件;
如果dump文件A和dump文件B均完整,则比较dum文件A的时间戳和dump文件B的时间戳,选出较新的dump文件,在较新的dump文件基础上,根据该较新的dump文件对应的Binlog文件恢复内存数据,其中,dump文件A对应binlog文件A,dump文件B对应Binlog文件B;
如果dump文件A完整、且dump文件B不完整,则在dump文件A的基础上,根据Binlog文件A和Binlog文件B恢复内存数据,并在恢复成功后,启动将内存数据写入到dump文件B的备份过程、且将Binlog文件B作为当前Binlog文件;
如果dump文件A不完整、且dump文件B完整,则在dump文件B的基础上,根据Binlog文件B和Binlog文件A恢复内存数据,并在恢复成功后,启动将内存数据写入到dump文件A的备份过程、且将Binlog文件A作为当前Binlog文件。
一种内存数据的备份装置,该装置包括流水记录模块、切换模块和备份模块;
所述流水记录模块,用于在当前流水日志(Binlog)文件中记录对内存数据进行的操作信息,接收切换模块的切换指示,打开另一Binlog文件,将该另一Binlog文件作为当前Binlog文件;
所述切换模块,用于判断当前Binlog文件的大小是否会大于一阈值,如果是,启动所述备份模块对内存数据的备份过程,并向所述流水记录模块发送切换指示,否则,所述流水记录模块继续在该当前Binlog文件中记录对内存数据的操作信息;
所述备份模块,用于将内存数据写入到备份(dump)文件中。
所述切换模块,用于在当前Binlog文件为Binlog文件A时,如果Binlog文件A的大小会大于一阈值,则启动所述备份模块将内存数据写入备份(dump)文件B,并向所述流水记录模块发送切换指示,在Binlog文件B的大小会大于一阈值时,启动所述备份模块将内存数据写入dump文件A,并向所述流水记录模块发送切换指示;
所述流水记录模块,用于在当前Binlog文件为Binlog文件A时,如果收到切换指示,则将当前Binlog文件切换为Binlog文件B,打开并初始化该Binlog文件B,在当前Binlog文件为Binlog文件B时,如果收到切换指示,则将当前Binlog文件切换为该Binlog文件A,打开并初始化该Binlog文件A;
该装置还包括恢复模块;
所述恢复模块,用于在恢复内存数据时:
如果dump文件A和dump文件B均不存在,则根据Binlog文件A恢复内存数据;
如果dump文件B完整、且dump文件A不存在,则在dump文件B的基础上,根据Binlog文件B恢复内存数据,并在恢复成功后,向所述流水记录模块发送将Binlog文件B作为当前Binlog文件的指示;
如果dump文件B不完整、且dump文件A不存在,则根据Binlog文件A和Binlog文件B恢复内存数据,并在恢复成功后,启动所述备份模块将内存数据写入到dump文件B、且向所述流水记录模块发送将Binlog文件B作为当前Binlog文件的指示;
如果dump文件A和dump文件B均完整,则比较dum文件A的时间戳和dump文件B的时间戳,选出较新的dump文件,在较新的dump文件基础上,根据该较新的dump文件对应的Binlog文件恢复内存数据,其中,dump文件A对应binlog文件A,dump文件B对应Binlog文件B;
如果dump文件A完整、且dump文件B不完整,则在dump文件A的基础上,根据Binlog文件A和Binlog文件B恢复内存数据,并在恢复成功后,启动所述备份模块将内存数据写入到dump文件B、且向所述流水记录模块发送将Binlog文件B作为当前Binlog文件的指示;
如果dump文件A不完整、且dump文件B完整,则在dump文件B的基础上,根据Binlog文件B和Binlog文件A恢复内存数据,并在恢复成功后,启动所述备份模块将内存数据写入到dump文件A、且向所述流水记录模块发送将Binlog文件A作为当前Binlog文件的指示。
一种服务器,包括至少一个如上所述的内存数据的备份装置。
由上述技术方案可见,本发明通过对Binlog文件大小进行限制,具体地,通过判断当前Binlog文件的大小是否会大于一阈值,如果是,启动对内存数据的备份过程,并打开另一Binlog文件,将该另一Binlog文件作为当前Binlog文件,否则,继续在该当前Binlog文件中记录对内存数据的操作信息,避免了Binlog文件磁盘分区容量耗尽的风险,从而使得所有的操作流水都能写入到Binlog文件,因此能够降低数据丢失的风险,提高数据安全性。
附图说明
图1是目前的内存数据的组织结构图。
图2是本发明提供的内存数据的备份方法流程图。
图3是本发明提供的dump文件和Binlog文件的结构示意图。
图4是本发明提供的通过两个进程对内存数据进行备份的过程流程图。
图5是本发明提供的内存数据的备份装置结构图。
具体实施方式
图2是本发明提供的内存数据的备份方法流程图。
图2示出了将操作信息数据块写入到Binlog文件的流程,如图2所示,该流程包括:
步骤201,判断当前Binlog文件的大小是否会大于一阈值,如果是,执行步骤203,否则,执行步骤202。
其中,所述阈值可以是预设的最大阈值,也可以是根据磁盘分区容量进行动态调整的阈值。
步骤202,在当前Binlog文件中记录对内存数据进行的操作信息,结束本流程。
步骤203,启动对内存数据的备份过程,并打开另一Binlog文件,将该另一Binlog文件作为当前Binlog文件,在该另一Binlog文件中记录对内存数据进行的操作信息。
由图2所示方法可见,通过对Binlog文件大小进行限制,使得Binlog文件大小不会大于一阈值,从而避免了Binlog文件将磁盘分区容量耗尽,从而降低了数据丢失的风险,提高了数据安全性。
图2所示方法中,判断当前Binlog文件的大小是否会大于一阈值要求的方法有多种。
例如,可以在将当前的操作信息数据块写入到当前Binlog文件之前,判断如果将当前的操作信息数据块写入到当前Binlog文件,是否会导致当前Binlog文件的大小大于预设的第一阈值,即将Binlog文件的当前大小加上当前的操作信息数据块的大小,判断所得和是否大于预设的第一阈值,如果是,则当前Binlog文件的大小会大于一阈值,否则,当前Binlog文件的大小不会大于一阈值。本例子中,一阈值实际上就是所述的第一阈值,由于只有在继续向Binlog文件中写入操作信息数据块不会导致Binlog文件的大小大于第一阈值时,才继续向该Binlog文件中写入操作信息数据块,而在继续向Binlog文件中写入操作信息数据块会导致Binlog文件的大小大于第一阈值时,停止向该Binlog文件中继续写入操作信息数据块,因此,使得Binlog文件大小不会无限制地增长,从而能够避免耗尽磁盘分区空间,从而避免操作信息丢失。
再例如,还可以直接判断当前Binlog文件的当前大小是否达到预设的第二阈值,如果是,则当前Binlog文件的大小会大于一阈值,即继续向当前Binlog文件中写入操作信息数据块将导致当前Binlog文件的大小大于一阈值,此时,需要启动对内存数据的dump过程,并切换到另一Binlog文件记录操作信息,如果当前Binlog文件的当前大小未达到预设的第二阈值,则当前Binlog文件大小不会大于一阈值,可以继续在当前的Binlog文件中记录操作信息。本例子中,一阈值实际上是第二阈值加上一个操作信息数据块大小所得的和,也就是说,所述第二阈值需要不大于所述一阈值减去一个操作信息数据块大小所得的差,由于Binlog文件的大小不会大于第二阈值加上一个操作信息数据块大小所得的和,因此,使得Binlog文件大小不会无限制地增长,从而能够避免耗尽磁盘分区空间,从而避免操作信息丢失。
图2所示方法是以Binlog文件的大小是否会大于一阈值,作为备份过程的触发条件,考虑到可能存在较长一段时间内对内存数据的操作一直较少的情况,导致一直没有触发备份过程,因此,本发明提出,在图2所示方法基础上,还可以以备份时间点为触发条件,触发对内存数据的备份过程。
具体地,在预设的备份时间点到来时,判断当前是否正处于内存数据的备份过程中,如果是,继续当前的备份过程,否则,启动对内存数据的启动备份过程,并打开另一Binlog文件,将该另一Binlog文件作为当前Binlog文件。
为了控制Binlog文件的大小,本发明具体可以采用两组dump文件和Binlog文件,并且循环写dump文件和Binlog文件。
具体地,假设当前Binlog文件为Binlog文件A,则在Binlog文件A的大小会大于一阈值时,启动将内存数据写入dump文件B的备份过程,打开并初始化Binlog文件B,将该Binlog文件B作为当前Binlog文件,在Binlog文件B的大小会大于一阈值时,启动将内存数据写入dump文件A的备份过程,打开并初始化Binlog文件A,将Binlog文件A作为当前Binlog文件。
其中,启动将内存数据写入dump文件的过程,具体可以为向负责备份过程的进程发送dump请求命令,并将当前Binlog文件切换为另外一个binlog文件,即在Binlog文件A和Binlog文件B之间相互切换,并更新切换后的Binlog文件头信息,将对内存数据的操作信息写入到当前的Binlog文件中。
在进行dump过程中有可能机器掉电,导致最新的一组的dump文件不完整,因此在进行内存数据恢复时,需要根据dump文件的完整性来采用不同的恢复策略。
具体地,根据dump文件和Binlog文件恢复内存数据的步骤具体可以包括:
如果dump文件A和dump文件B均不存在,则根据Binlog文件A恢复内存数据。
或者,如果dump文件B完整、且dump文件A不存在,则在dump文件B的基础上,根据Binlog文件B恢复内存数据,并在恢复成功后,将Binlog文件B作为当前Binlog文件。
或者,如果dump文件B不完整、且dump文件A不存在,则根据Binlog文件A和Binlog文件B恢复内存数据,并在恢复成功后,启动将内存数据写入到dump文件B的备份过程、且将Binlog文件B作为当前Binlog文件。
或者,如果dump文件A和dump文件B均完整,则比较dum文件A的时间戳和dump文件B的时间戳,选出较新的dump文件,在较新的dump文件基础上,根据该较新的dump文件对应的Binlog文件恢复内存数据,其中,dump文件A对应binlog文件A,dump文件B对应Binlog文件B。
或者,如果dump文件A完整、且dump文件B不完整,则在dump文件A的基础上,根据Binlog文件A和Binlog文件B恢复内存数据,并在恢复成功后,启动将内存数据写入到dump文件B的备份过程、且将Binlog文件B作为当前Binlog文件。
或者,如果dump文件A不完整、且dump文件B完整,则在dump文件B的基础上,根据Binlog文件B和Binlog文件A恢复内存数据,并在恢复成功后,启动将内存数据写入到dump文件A的备份过程、且将Binlog文件A作为当前Binlog文件。
下面对本发明提供的dump文件和Binlog文件的结构信息进行示例性说明。
dump文件的文件头信息可以包括文件类型信息、完整性信息、写入第一个dump数据块的时间戳信息、写入最后一个dump数据块的时间戳信息、该dump文件中存储的数据所属于的内存块信息和进程信息。Binlog文件的文件头信息可以包括文件类型信息、写入第一个Binlog数据块的时间戳信息、写入最后一个Binlog数据块的时间戳信息。
图3是本发明提供的dump文件和Binlog文件的结构示意图。
图3所示文件中,包括Magic_num1字段、Magic_num2字段、类型(Type)字段、Smcd字段、Cu字段、完整性字段、起始时间(time_start)字段、结束时间(time_end)字段、记录条数(record_cnt)字段、校验和字段和数据块(data_block)字段。
其中,根据type字段取值的不同,可以区分是binlog文件还是dump文件。
例如,当type字段取值为1时,表示文件是Binlog文件,其中的Magic_num1字段和Magic_num2字段为预设的特殊值,time_start字段记录了第一个操作信息数据块写入到该Binlog文件的时间戳信息,time_end字段记录了最后一个操作信息数据块写入到该Binlog文件的时间戳信息,time_end字段只有当向Binlog文件写入最后一个操作信息数据块时才会写入。
再例如,当type字段取值为2时,表示文件是dump文件,其中的Magic_num1字段和Magic_num2字段为预设的特殊值,time_start字段记录了第一个内存数据块写入到该dump文件的时间戳信息,time_end字段记录了最后一个内存数据块写入到该dump文件的时间戳信息,其中,time_end字段在写入最后一个内存数据块的时间戳信息之前,取值为一特定值,例如,取值为0,用于表示该dump文件不完整。
另外,文件中的Smcd字段用于表示该文件对应的主进程编号,Cu字段用于表示该文件对应的内存块的编号,完整性字段用于表示该文件是否完整,record_cnt字段用于表示该文件中包含的记录条数、即该文件中存储了多少个数据key对应的数据块,data_block字段,文件中的校验和字段可以留作以后进行文件校验时使用,文件中的其他字段可以留作以后扩展使用。
在启动将内存数据写入到dump文件的过程中,需要先对dump文件进行初始化,然后再向该dump文件内写入内存数据,其中,对dump文件初始化包括对dump文件的头部信息的初始化,具体可以包括设置magic_num1、magic_num2、dump文件的完整性标记等。
本发明还对内存数据的备份过程进行了改进,与现有技术中一次性遍历内存块的所有数据桶、然后将所有数据桶中的数据写入dump文件相比,本发明采用了一种平滑的备份方式,对内存块中的数据分批进行备份,从而避免进程阻塞。
具体地,将当前内存块中的所有数据桶中的数据,分两个以上的批次写入到dump文件中,其中,在将每一批次数据写入到dump文件的过程中,遍历当前内存块中的部分数据桶,将该部分数据桶中的数据写入到dump文件中,并在该部分数据桶中的数据写入成功以后,启动将下一批次数据写入到dump文件的过程,直至当前内存块中的所有数据桶中的数据都写入到dump文件时为止。
在将内存块中的数据分批进行备份的同时,本发明还提出,可以采用两个进程来完成数据的分批备份工作。具体地,在将每一批次数据写入到dump文件的过程中,由第一进程遍历当前内存块中的部分数据桶,将该部分数据桶中的数据发给第二进程,第二进程将该部分数据桶中的数据写入到dump文件中,并在写入成功后,向第一进程发送写入成功指示,第一进程在接收到写入成功指示后,启动将下一批次数据写入到dump文件的过程,直至当前内存块中的所有数据桶中的数据都写入到dump文件时为止。
可见,本发明通过对现有的备份过程进行改进,在进行备份的过程中,仍然按桶进行扫描,但每次只备份部分桶的数据,而非一次性扫描全量的桶数据,并且该部分桶的数据的写入工作由另外单独的进程负责,每次主进程将该部分桶的数据发给负责写入工作的进程之后,该主进程即可影响其他服务,待负责写入工作的进程在反馈写入成功之后,再进行下一批次的桶数据,这样分批次进行,进程不会阻塞,在备份期间仍然能响应服务。
下面对通过两个进程对内存数据进行备份的过程进行示例性说明,具体请参见图4。
图4是本发明提供的通过两个进程对内存数据进行备份的过程流程图。
图4所示流程中,为控制binlog文件大小,采用2组dump文件和binlog文件,并且循环写binlog文件及循环写dump文件。当辅进程发现将当前的操作信息数据块写入到当前的binlog文件后,当前binlog文件将大于阀值时,辅进程向主进程发送dump请求命令,并且辅进程切换binlog文件,开始写另外的一个binlog文件,其中,在打开该另外的一个binlog文件之后,初始化该另外的一个binlog文件的头部信息。主进程收到dump请求命令之后,开始进行内存数据的dump,dump时,按桶进行,每次获取一个桶的内存数据,组成一个dump数据包,发往辅助进程,在收到辅助进程写成功的响应后,对下一个桶的内存数据进行dump,直到所有桶的内存数据都dump结束。当辅助进程收到最后一块dump数据后,将该dump文件的完整性置为1,并写入最后一块dump数据的时间及更新dump文件头部的其他信息。
具体地,图4所示流程包括:
步骤401,主进程接收到dump请求命令,发送需要备份的dump数据块。
步骤402,辅助进程接收主进程发送的dump数据块。
步骤403,辅助进程判断该dump数据块是否是第一块dump数据块,如果是,执行步骤404,否则,执行步骤405。
步骤404,切换dump文件,即打开另一dump文件,并更新该另一dump文件的头部信息。
步骤405,辅助进程将当前dump数据块写入到dump文件。
步骤406,辅助进程判断写入操作是否成功,如果是,执行步骤408,否则,执行步骤407。
步骤407,辅助进程连续执行将dump数据块写入到dump文件的动作预定次数,例如,连续执行4次,然后判断写入是否成功,如果成功,执行步骤408,否则,在休眠预定时段后,返回步骤405。
步骤408,辅助进程判断写入的该dump数据块是否是该dump文件的最后一块dump数据块,如果是,执行步骤409,否则,执行步骤410。
示例性地,辅助进程可以判断当前dump数据块的数据桶号是否是应该写入到该dump文件的最后一个数据桶的桶号,如果是,辅助进程可以判定该dump数据块是该dump文件的最后一块数据块。
步骤409,辅助进程更新dump文件头部信息,并结束本流程。
步骤410,辅助进程通知主进程,本次的dump数据块写入成功,可以发送下一个桶的dump数据块,并返回步骤402。
根据本发明提供的备份方法,本发明还提供了一种内存数据的备份装置。
图5是本发明提供的内存数据的备份装置结构图。
如图5所示,该装置包括流水记录模块501、切换模块502和备份模块503。
流水记录模块501,用于在当前Binlog文件中记录对内存数据进行的操作信息,接收切换模块502的切换指示,打开另一Binlog文件,将该另一Binlog文件作为当前Binlog文件。
切换模块502,用于判断当前Binlog文件的大小是否会大于一阈值,如果是,启动备份模块503对内存数据的备份过程,并向流水记录模块501发送切换指示,否则,流水记录模块501继续在该当前Binlog文件中记录对内存数据的操作信息。
备份模块503,用于将内存数据写入到dump文件中。
切换模块502,可以用于在流水记录模块501将当前的操作信息数据块写入到当前Binlog文件之前,将当前Binlog文件的当前大小加上当前的操作信息数据块的大小,判断所得和是否大于第一阈值,如果是,则当前Binlog文件的大小会大于一阈值,否则,当前Binlog文件的大小不会大于一阈值。
或者,所述切换模块,可以用于判断当前Binlog文件的当前大小是否达到第二阈值,如果是,则当前Binlog文件的大小会大于一阈值,否则,当前Binlog文件的大小不会大于一阈值。
切换模块502,可以用于在预设的备份时间点到来时,判断备份模块503当前是否正处于内存数据的备份过程中,如果是,备份模块503继续当前的备份过程,否则,切换模块502启动备份模块503对内存数据的备份过程,并向流水记录模块501发送切换指示。
切换模块502,可以用于在当前Binlog文件为Binlog文件A时,如果Binlog文件A的大小会大于一阈值,则启动备份模块503将内存数据写入dump文件B,并向流水记录模块501发送切换指示,在Binlog文件B的大小会大于一阈值时,启动备份模块503将内存数据写入dump文件A,并向流水记录模块501发送切换指示。
流水记录模块501,可以用于在当前Binlog文件为Binlog文件A时,如果收到切换指示,则将当前Binlog文件切换为Binlog文件B,打开并初始化该Binlog文件B,在当前Binlog文件为Binlog文件B时,如果收到切换指示,则将当前Binlog文件切换为该Binlog文件A,打开并初始化该Binlog文件A。
该装置还可以包括恢复模块。
所述恢复模块,用于在恢复内存数据时,如果dump文件A和dump文件B均不存在,则根据Binlog文件A恢复内存数据,如果dump文件B完整、且dump文件A不存在,则在dump文件B的基础上,根据Binlog文件B恢复内存数据,并在恢复成功后,向所述流水记录模块发送将Binlog文件B作为当前Binlog文件的指示,如果dump文件B不完整、且dump文件A不存在,则根据Binlog文件A和Binlog文件B恢复内存数据,并在恢复成功后,启动所述备份模块将内存数据写入到dump文件B、且向所述流水记录模块发送将Binlog文件B作为当前Binlog文件的指示,如果dump文件A和dump文件B均完整,则比较dum文件A的时间戳和dump文件B的时间戳,选出较新的dump文件,在较新的dump文件基础上,根据该较新的dump文件对应的Binlog文件恢复内存数据,其中,dump文件A对应binlog文件A,dump文件B对应Binlog文件B,如果dump文件A完整、且dump文件B不完整,则在dump文件A的基础上,根据Binlog文件A和Binlog文件B恢复内存数据,并在恢复成功后,启动所述备份模块将内存数据写入到dump文件B、且向所述流水记录模块发送将Binlog文件B作为当前Binlog文件的指示,如果dump文件A不完整、且dump文件B完整,则在dump文件B的基础上,根据Binlog文件B和Binlog文件A恢复内存数据,并在恢复成功后,启动所述备份模块将内存数据写入到dump文件A、且向所述流水记录模块发送将Binlog文件A作为当前Binlog文件的指示。
备份模块503,可以用于将当前内存块中的所有数据桶中的数据,分两个以上的批次写入到dump文件中,其中,在将每一批次数据写入到dump文件的过程中,遍历当前内存块中的部分数据桶,将该部分数据桶中的数据写入到dump文件中,并在该部分数据桶中的数据写入成功以后,启动将下一批次数据写入到dump文件的过程,直至当前内存块中的所有数据桶中的数据都写入到dump文件时为止。
备份模块503具体可以包括第一进程模块和第二进程模块。
在将每一批次数据写入到dump文件的过程中,由第一进程遍历当前内存块中的部分数据桶,将该部分数据桶中的数据发给第二进程,第二进程将该部分数据桶中的数据写入到dump文件中,并在写入成功后,向第一进程发送写入成功指示,第一进程在接收到写入成功指示后,启动将下一批次数据写入到dump文件的过程,直至当前内存块中的所有数据桶中的数据都写入到dump文件时为止。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (11)
1.一种内存数据的备份方法,其特征在于,该方法包括:
判断当前流水日志(Binlog)文件的大小是否会大于一阈值,如果是,启动对内存数据的备份过程,并打开另一Binlog文件,将该另一Binlog文件作为当前Binlog文件,否则,在当前Binlog文件中记录对内存数据进行的操作信息;
所述启动对内存数据的备份过程,并打开另一Binlog文件,将该另一Binlog文件作为当前Binlog文件包括:假设当前Binlog文件为Binlog文件A,则在Binlog文件A的大小会大于一阈值时,启动将内存数据写入备份(dump)文件B的备份过程,打开并初始化Binlog文件B,将该Binlog文件B作为当前Binlog文件,在Binlog文件B的大小会大于一阈值时,启动将内存数据写入dump文件A的备份过程,打开并初始化Binlog文件A,将Binlog文件A作为当前Binlog文件;
该方法还包括:根据dump文件和Binlog文件恢复内存数据的步骤,其中:
如果dump文件A和dump文件B均不存在,则根据Binlog文件A恢复内存数据;
如果dump文件B完整、且dump文件A不存在,则在dump文件B的基础上,根据Binlog文件B恢复内存数据,并在恢复成功后,将Binlog文件B作为当前Binlog文件;
如果dump文件B不完整、且dump文件A不存在,则根据Binlog文件A和Binlog文件B恢复内存数据,并在恢复成功后,启动将内存数据写入到dump文件B的备份过程、且将Binlog文件B作为当前Binlog文件;
如果dump文件A和dump文件B均完整,则比较dum文件A的时间戳和dump文件B的时间戳,选出较新的dump文件,在较新的dump文件基础上,根据该较新的dump文件对应的Binlog文件恢复内存数据,其中,dump文件A对应binlog文件A,dump文件B对应Binlog文件B;
如果dump文件A完整、且dump文件B不完整,则在dump文件A的基础上,根据Binlog文件A和Binlog文件B恢复内存数据,并在恢复成功后,启动将内存数据写入到dump文件B的备份过程、且将Binlog文件B作为当前Binlog文件;
如果dump文件A不完整、且dump文件B完整,则在dump文件B的基础上,根据Binlog文件B和Binlog文件A恢复内存数据,并在恢复成功后,启动将内存数据写入到dump文件A的备份过程、且将Binlog文件A作为当前Binlog文件。
2.根据权利要求1所述的方法,其特征在于,判断当前Binlog文件的大小是否会大于一阈值包括:
在将当前的操作信息数据块写入到当前Binlog文件之前,将当前Binlog文件的当前大小加上当前的操作信息数据块的大小,判断所得和是否大于第一阈值,如果是,则当前Binlog文件的大小会大于所述一阈值,否则,当前Binlog文件的大小不会大于所述一阈值;
或者,判断当前Binlog文件的当前大小是否达到第二阈值,如果是,则当前Binlog文件的大小会大于所述一阈值,否则,当前Binlog文件的大小不会大于所述一阈值。
3.根据权利要求1至所述的方法,其特征在于,该方法还包括:
在预设的备份时间点到来时,判断当前是否正处于内存数据的备份过程中,如果是,继续当前的备份过程,否则,启动对内存数据的备份过程,并打开另一Binlog文件,将该另一Binlog文件作为当前Binlog文件。
4.根据权利要求1所述的方法,其特征在于,启动对内存数据的备份过程包括:
将当前内存块中的所有数据桶中的数据,分两个以上的批次写入到dump文件中,其中,在将每一批次数据写入到dump文件的过程中,遍历当前内存块中的部分数据桶中的数据,将该部分数据桶中的数据写入到dump文件中,并在该部分数据桶中的数据写入成功以后,启动将下一批次数据写入到dump文件的过程,直至当前内存块中的所有数据桶中的数据都写入到dump文件时为止。
5.根据权利要求4所述的方法,其特征在于,
在将每一批次数据写入到dump文件的过程中,由第一进程遍历当前内存块中的部分数据桶中的数据,将该部分数据桶中的数据发给第二进程,第二进程将该部分数据桶中的数据写入到dump文件中,并在写入成功后,向第一进程发送写入成功指示,第一进程在接收到写入成功指示后,启动将下一批次数据写入到dump文件的过程,直至当前内存块中的所有数据桶中的数据都写入到dump文件时为止。
6.一种内存数据的备份装置,其特征在于,该装置包括流水记录模块、切换模块和备份模块;
所述流水记录模块,用于在当前流水日志(Binlog)文件中记录对内存数据进行的操作信息,接收切换模块的切换指示,打开另一Binlog文件,将该另一Binlog文件作为当前Binlog文件;
所述切换模块,用于判断当前Binlog文件的大小是否会大于一阈值,如果是,启动所述备份模块对内存数据的备份过程,并向所述流水记录模块发送切换指示,否则,所述流水记录模块继续在该当前Binlog文件中记录对内存数据的操作信息;
所述备份模块,用于将内存数据写入到备份(dump)文件中;
所述切换模块,用于在当前Binlog文件为Binlog文件A时,如果Binlog文件A的大小会大于一阈值,则启动所述备份模块将内存数据写入备份(dump)文件B,并向所述流水记录模块发送切换指示,在Binlog文件B的大小会大于一阈值时,启动所述备份模块将内存数据写入dump文件A,并向所述流水记录模块发送切换指示;
所述流水记录模块,用于在当前Binlog文件为Binlog文件A时,如果收到切换指示,则将当前Binlog文件切换为Binlog文件B,打开并初始化该Binlog文件B,在当前Binlog文件为Binlog文件B时,如果收到切换指示,则将当前Binlog文件切换为该Binlog文件A,打开并初始化该Binlog文件A;
该装置还包括恢复模块;
所述恢复模块,用于在恢复内存数据时:
如果dump文件A和dump文件B均不存在,则根据Binlog文件A恢复内存数据;
如果dump文件B完整、且dump文件A不存在,则在dump文件B的基础上,根据Binlog文件B恢复内存数据,并在恢复成功后,向所述流水记录模块发送将Binlog文件B作为当前Binlog文件的指示;
如果dump文件B不完整、且dump文件A不存在,则根据Binlog文件A和Binlog文件B恢复内存数据,并在恢复成功后,启动所述备份模块将内存数据写入到dump文件B、且向所述流水记录模块发送将Binlog文件B作为当前Binlog文件的指示;
如果dump文件A和dump文件B均完整,则比较dum文件A的时间戳和dump文件B的时间戳,选出较新的dump文件,在较新的dump文件基础上,根据该较新的dump文件对应的Binlog文件恢复内存数据,其中,dump文件A对应binlog文件A,dump文件B对应Binlog文件B;
如果dump文件A完整、且dump文件B不完整,则在dump文件A的基础上,根据Binlog文件A和Binlog文件B恢复内存数据,并在恢复成功后,启动所述备份模块将内存数据写入到dump文件B、且向所述流水记录模块发送将Binlog文件B作为当前Binlog文件的指示;
如果dump文件A不完整、且dump文件B完整,则在dump文件B的基础上,根据Binlog文件B和Binlog文件A恢复内存数据,并在恢复成功后,启动所述备份模块将内存数据写入到dump文件A、且向所述流水记录模块发送将Binlog文件A作为当前Binlog文件的指示。
7.根据权利要求6所述的装置,其特征在于,
所述切换模块,用于在所述流水记录模块将当前的操作信息数据块写入到当前Binlog文件之前,将当前Binlog文件的当前大小加上当前的操作信息数据块的大小,判断所得和是否大于第一阈值,如果是,则当前Binlog文件的大小会大于所述一阈值,否则,当前Binlog文件的大小不会大于所述一阈值;
或者,所述切换模块,用于判断当前Binlog文件的当前大小是否达到第二阈值,如果是,则当前Binlog文件的大小会大于所述一阈值,否则,当前Binlog文件的大小不会大于所述一阈值。
8.根据权利要求6所述的装置,其特征在于,
所述切换模块,用于在预设的备份时间点到来时,判断所述备份模块当前是否正处于内存数据的备份过程中,如果是,所述备份模块继续当前的备份过程,否则,所述切换模块启动所述备份模块对内存数据的备份过程,并向所述流水记录模块发送切换指示。
9.根据权利要求6所述的装置,其特征在于,
所述备份模块,用于将当前内存块中的所有数据桶中的数据,分两个以上的批次写入到dump文件中,其中,在将每一批次数据写入到dump文件的过程中,遍历当前内存块中的部分数据桶中的数据,将该部分数据桶中的数据写入到dump文件中,并在该部分数据桶中的数据写入成功以后,启动将下一批次数据写入到dump文件的过程,直至当前内存块中的所有数据桶中的数据都写入到dump文件时为止。
10.根据权利要求9所述的装置,其特征在于,所述备份模块包括第一进程模块和第二进程模块;
在将每一批次数据写入到dump文件的过程中,由第一进程遍历当前内存块中的部分数据桶中的数据,将该部分数据桶中的数据发给第二进程,第二进程将该部分数据桶中的数据写入到dump文件中,并在写入成功后,向第一进程发送写入成功指示,第一进程在接收到写入成功指示后,启动将下一批次数据写入到dump文件的过程,直至当前内存块中的所有数据桶中的数据都写入到dump文件时为止。
11.一种服务器,其特征在于,包括至少一个如权利要求6-10任一项所述的内存数据的备份装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210041910.5A CN103294570B (zh) | 2012-02-23 | 2012-02-23 | 一种内存数据的备份方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210041910.5A CN103294570B (zh) | 2012-02-23 | 2012-02-23 | 一种内存数据的备份方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103294570A CN103294570A (zh) | 2013-09-11 |
CN103294570B true CN103294570B (zh) | 2015-11-04 |
Family
ID=49095495
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210041910.5A Active CN103294570B (zh) | 2012-02-23 | 2012-02-23 | 一种内存数据的备份方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103294570B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106648994B (zh) * | 2017-01-04 | 2020-09-11 | 华为技术有限公司 | 一种备份操作日志的方法,设备和系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1485745A (zh) * | 2003-08-08 | 2004-03-31 | 倚天资讯股份有限公司 | 非挥发性存储器存取系统及其存取方法 |
CN1642104A (zh) * | 2004-01-05 | 2005-07-20 | 华为技术有限公司 | 一种系统日志实现方法和装置 |
CN101187936A (zh) * | 2007-12-07 | 2008-05-28 | 圣诺网络技术(上海)有限公司 | 一种日志数据的存储方法和装置 |
CN101256526A (zh) * | 2008-03-10 | 2008-09-03 | 清华大学 | 检查点容错技术中文件状态一致性维护的实现方法 |
CN102110167A (zh) * | 2011-03-01 | 2011-06-29 | 上海奈凯电子科技有限公司 | 数控系统中实现日志信息管理的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8170987B2 (en) * | 2007-10-31 | 2012-05-01 | At&T Intellectual Property I, L.P. | Methods, systems and computer program products for automatically identifying and backing up user device content |
-
2012
- 2012-02-23 CN CN201210041910.5A patent/CN103294570B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1485745A (zh) * | 2003-08-08 | 2004-03-31 | 倚天资讯股份有限公司 | 非挥发性存储器存取系统及其存取方法 |
CN1642104A (zh) * | 2004-01-05 | 2005-07-20 | 华为技术有限公司 | 一种系统日志实现方法和装置 |
CN101187936A (zh) * | 2007-12-07 | 2008-05-28 | 圣诺网络技术(上海)有限公司 | 一种日志数据的存储方法和装置 |
CN101256526A (zh) * | 2008-03-10 | 2008-09-03 | 清华大学 | 检查点容错技术中文件状态一致性维护的实现方法 |
CN102110167A (zh) * | 2011-03-01 | 2011-06-29 | 上海奈凯电子科技有限公司 | 数控系统中实现日志信息管理的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103294570A (zh) | 2013-09-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9053075B2 (en) | Storage control device and method for controlling storages | |
US7310711B2 (en) | Hard disk drive with support for atomic transactions | |
JP4988214B2 (ja) | 記憶装置における喪失した書き込みの検出および回復 | |
US7587630B1 (en) | Method and system for rapidly recovering data from a “dead” disk in a RAID disk group | |
US20090172324A1 (en) | Storage system and method for opportunistic write-verify | |
WO2024148865A1 (zh) | 一种安全存储方法、装置、设备及非易失性可读存储介质 | |
US8448023B2 (en) | Approach for data integrity in an embedded device environment | |
JP6064608B2 (ja) | ストレージ装置、バックアッププログラム、およびバックアップ方法 | |
EP3404527B1 (en) | Data updating technique | |
CN103019623B (zh) | 存储盘处理方法及装置 | |
JP2006268503A (ja) | 計算機システム、ディスク装置およびデータ更新制御方法 | |
CN105144113A (zh) | 从快照恢复应用 | |
JP2003131817A (ja) | Raid論理ドライブ・マイグレーションにおいてデータをマイグレーションするための方法及びシステム | |
US11509716B2 (en) | Method and apparatus for performing simple storage service seamless migration using index objects | |
JP2006134217A (ja) | ライブラリシステム,仮想ライブラリ装置,及びキャッシュ復元方法 | |
CN109710456B (zh) | 一种数据恢复方法及装置 | |
WO2017075130A1 (en) | Ensuring crash-safe forward progress of a system configuration update | |
CN111045870A (zh) | 一种保存与恢复元数据的方法、装置和介质 | |
CN103559119B (zh) | 文件操作请求处理方法及装置 | |
CN111240903A (zh) | 数据恢复方法及相关设备 | |
CN103294570B (zh) | 一种内存数据的备份方法和装置 | |
CN116483284B (zh) | 一种读写虚拟硬盘的方法、装置、介质及电子设备 | |
US20100169572A1 (en) | Data storage method, apparatus and system for interrupted write recovery | |
CN106776142B (zh) | 一种数据存储方法以及数据存储装置 | |
KR20030073982A (ko) | 레이드 서브 시스템에서 중복 데이터의 일관성 유지 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |