具体实施方式
本发明实施例提供了一种数据文件备份方法及装置,用以节省存储空间的占用。
本发明实施例提供的技术方案,可以用于平时仅保留最近的数据(以节省空间),也可以用于特殊时期保留较长时间的连续备份(保证特殊时期数据安全)数据。在每次备份成功的基础上尽量减少人工干预。
本发明实施例提供的技术方案基于队列,在队列已满的情况下,最新文件入队,最旧(即存储时间最久)文件出队。按设定规则进行轮循覆盖,或删除最旧文件,以达到即保存若干有效备份文件、又减少人工干预的目的。在用于数据库导出文件、源码数据及各类工作数据打包文件的完全备份时,自动节省存储空间。
本发明实施例提供的技术方案,适用于Windows和Unix等多种操作系统。
下面结合附图对本发明实施例提供的技术方案进行说明。
参见图1,本发明实施例提供的一种数据文件备份方法包括步骤:
S101、当备份文件队列中包含的备份文件的数量达到预先设置的阈值时,从该备份文件队列中删除一备份文件。
S102、将当前需要备份的数据文件添加到所述备份文件队列中。
较佳地,所述当备份文件队列中包含的备份文件的数量达到预先设置的阈值时,从该备份文件队列中删除一备份文件,包括:
当备份文件队列中包含的备份文件的数量达到预先设置的阈值时,从该备份文件队列中删除备份时间最久的备份文件。
较佳地,所述将当前需要备份的数据文件添加到所述备份文件队列中,包括:
确定备份文件的命名规则;
利用当前需要备份的数据文件,按照所述命名规则生成备份文件,并添加到所述备份文件队列中。
较佳地,所述利用当前需要备份的数据文件,按照所述命名规则生成备份文件,并添加到所述备份文件队列中,包括:
将当前需要备份的数据文件打包,按照所述命名规则生成备份文件,并添加到所述备份文件队列中。
较佳地,该方法还包括:
确定当前需要采用的备份方式为预设的循环备份方式。
也就是说,本发明实施例可以设置备份模式选项供用户选择,使得归档备份与循环备份两种方式可以灵活切换。
本发明实施例中,可以预先设置归档备份与循环备份的开关、循环规则、备份文件的最大数量、命名规则、命名格式、源数据路径和存储目标路径。
其中,所述归档备份与循环备份的开关,即供用户选择归档备份或循环备份。
所述循环规则,即在循环备份的情况下,备份文件的命名是采用固定方式,还是采用不固定的方式。
所述固定方式,即队列中备份文件的名称是预先设置好的,不会改变的。即备份文件的名称不变,但备份文件的内容是可变的。
所述不固定的方式,例如,可以是按照时间的先后顺序进行命名,也可以按照序号由小到大或由大到小的顺序进行命名。
所述备份文件的最大数量,即在循环备份的情况下,队列中可以存储的备份文件的最大数量。
所述命名规则,即在循环备份的情况下,对备份文件的命名,是按照序列命名,还是按照时间命名。
所述命名格式,即在循环备份的情况下,对备份文件的命名格式,例如:在命名规则为序号命名的情况下,命名格式可以是bak_<X>.zip,其中的X是序号。
所述源数据路径,即需要备份的数据文件的读取路径。
所述存储目标路径,即需要备份的数据文件的写入路径,也就是队列的存储位置。
在需要备份时,首先确定采用循环备份方式,然后从源数据路径读取需要备份的数据文件,打包(或压缩)后,进行后续的添加到队列中的操作,具体地,分为两种情况:
第一种情况,备份文件的命名是不固定的。
例如按序号的由小到大的顺序对每一备份文件进行命名。
队列中的备份文件最大数量N(即所述的预先设置的阈值)。
若n-N>0,最旧文件的序号为n-N的备份文件出队(即被删除)。最新需要备份的文件的序号为n的备份文件入队。
若n-N<0,则忽略删除操作,即队列中的备份文件的数量还没有达到N。
也就是说,当备份文件队列中包含的备份文件的数量达到预先设置的阈值时(即n-N>0),从该备份文件队列中删除备份时间最久的备份文件;而当备份文件队列中包含的备份文件的数量没有达到预先设置的阈值时(即n-N<0),不从该备份文件队列中删除备份时间最久的备份文件。
例如:设N=3,假设当前队列中的备份文件分别为bak_0006.zip、bak_7000.zip、bak_0008.zip,则添加了新的备份文件之后,队列中的备份文件更新为bak_0007.zip、bak_0008.zip、bak_0009.zip。即,最新文件bak_0009.zip是最新备份文件,最旧备份文件bak_0006.zip被删除。
第二种情况,备份文件的命名是固定的,即预先设置好的。
假设备份文件的最大数量N,备份文件从序号0开始命名,一直命名到序号N-1。
序号N-1对应的备份文件用于存储最旧文件,序号0对应的备份文件用于存储最新文件。
若判定存在序号N-1对应的备份文件(即当备份文件队列中包含的备份文件的数量达到预先设置的阈值时),则从队列中删除
针对这种情况,仍采用队列的方式,即最旧备份文件,假设是备份文件n(有可能是序号N-1对应的备份文件,也有可能不是序号N-1对应的备份文件),出队(即备份文件n中的内容被覆盖),备份文件的内容依次前移覆盖,即备份文件n-1的内容覆盖备份文件n的内容,备份文件n-2的内容覆盖备份文件n-1的内容,以此类推,然后最新生成的备份内容覆盖备份文件0中的内容。
例如:配置队列最多存储4个备份文件,并且命名分别固定为bak_now.zip、bak_01.zip、bak_02.zip、bak_03.zip。则备份文件bak_03.zip用于存储最旧的数据内容,备份文件bak_now.zip用于存储最新的数据文件内容。当最新备份生成后,先用备份文件bak_02.zip中的内容覆盖备份文件bak_03.zip中的内容(备份文件bak_03.zip中的内容被覆盖,即被删除出队);再依次用备份文件bak_01.zip中的内容覆盖备份文件bak_02.zip中的内容;备份文件bak_now.zip中的内容覆盖备份文件bak_01.zip中的内容;最新生成的备份覆盖备份文件bak_now.zip中的内容(即备份文件bak_now.zip入队)。
下面给出两个具体的实施例进行说明。
实施例1:循环备份模式、备份文件名字不固定。
设配置定义为保留3个备份,命名规则为序号命名,命名格式为bak_<X>.zip。
最初,目标路径下的队列为空。
第一次执行时,最新序号为0,因0-3<0,所以忽略删除最旧文件的操作;将最新获取的数据文件打包并命名为bak_0.zip,存放到目标路径。
此时,目标路径下的队列包括的备份文件为:
bak_0.zip
//注:当前最新文件为bak_0.zip,无最旧文件
第二次执行时,从临时文件tempfile中获取的变量为0,然后加1,得到最新序号为1。因1-3<0,所以忽略删除最旧文件的操作;
将最新获取的数据文件打包并命名为bak_1.zip,存放到目标路径。
此时,目标路径下的队列包括的备份文件为:
bak_0.zip
bak_1.zip
//注:当前最新文件为bak_1.zip,无最旧文件
第三次执行时,从临时文件tempfile中获取的变量为1,然后加1,得到最新序号为2。因2-3<0,所以忽略删除最旧文件的操作;
将最新获取的数据文件打包并命名为bak_2.zip,存放到目标路径。
此时,目标路径下的队列包括的备份文件为:
bak_0.zip
bak_1.zip
bak_2.zip
//注:当前最新文件为bak_2.zip,最旧文件是bak_0.zip
第四次执行时,从临时文件tempfile中获取的变量为2,然后加1,得到最新序号为3。因3-3!<0,且3-3=0,所以检测是否存在bak_0.zip(当前的最旧文件),若存在则删除之,若不存在,忽略删除操作;
将最新获取的数据文件打包并命名为bak 3.zip,存放到目标路径。
此时,目标路径下的队列包括的备份文件为:
bak_1.zip
bak_2.zip
bak_3.zip
//注:上期最旧文件bak_0.zip被删除。当前最新文件为bak_3.zip,最旧文件是bak_1.zip。
第五次执行时,从临时文件tempfile中获取的变量为3,然后加1,得到最新序号为4。因4-3!<0,且4-3=1,检测是否存在bak_1.zip(当前的最旧文件),若存在则删除之,若不存在,忽略删除操作;
将最新获取的数据文件打包并命名为bak_4.zip,存放到目标路径。
此时,目标路径下的队列包括的备份文件为:
bak_2.zip
bak_3.zip
bak_4.zip
//注:上期最旧文件bak_1.zip被删除。当前最新文件为bak_4.zip,最旧文件是bak_2.zip。
以此类推。
实施例二:循环备份模式、备份文件名字固定。
设配置定义为保留3个备份,命名格式为“bak”,按约定,备份文件分别为bak.zip、bak01.zip、bak02.zip。其中,bak.zip为最新文件,bak02.zip为最旧文件。
最初,目标路径下的队列为空。
第一次执行时,将bak01.zip覆盖为bak02.zip;将bak.zip覆盖为bak01.zip。因检测不到bak.zip、bak01.zip文件,所以忽略掉所有覆盖操作;
将最新获取的数据文件打包并命名为bak.zip存放到目标路径。
此时,目标路径下的队列包括的备份文件为:
bak.zip
//注:当前最新文件是bak.zip,无最旧文件
第二次执行时,将bak01.zip覆盖为bak02.zip;将bak.zip覆盖为bak01.zip。因检测不到bak01.zip文件,所以忽略掉“bak01.zip覆盖为bak02.zip”的操作;
将最新获取的数据文件打包并命名为bak.zip存放到目标路径。
此时,目标路径下的队列包括的备份文件为:
bak.zip
bak01.zip
//注:当前最新文件是bak.zip,无最旧文件。
第三次执行时,将bak01.zip覆盖为bak02.zip;将bak.zip覆盖为bak01.zip。
将最新获取的数据文件打包并命名为bak.zip存放到目标路径。
此时,目标路径下的队列包括的备份文件为:
bak.zip
bak01.zip
bak02.zip
//注:当前最旧文件是bak02.zip,最新文件是bak.zip。
第四次执行时,将bak01.zip覆盖为bak02.zip;将bak.zip覆盖为bak01.zip。
将最新获取的数据文件打包并命名为bak.zip存放到目标路径。
此时,目标路径下的队列包括的备份文件为:
bak.zip
bak01.zip
bak02.zip
//注:当前最旧文件是bak02.zip,最新文件是bak.zip。
以此类推。
参见图2,本发明实施例提供的一种数据文件备份装置包括:
数据获取单元101,用于获取当前需要备份的数据文件。
删除判定单元102,用于当备份文件队列中包含的备份文件的数量达到预先设置的阈值时,从该备份文件队列中删除一备份文件。
添加处理单元103,用于将当前需要备份的数据文件添加到所述备份文件队列中。
较佳地,所述删除判定单元102。当备份文件队列中包含的备份文件的数量达到预先设置的阈值时,从该备份文件队列中删除备份时间最久的备份文件。
较佳地,所述添加处理单元,利用当前需要备份的数据文件生成备份文件,并添加到所述备份文件队列中。
较佳地,所述添加处理单元,将当前需要备份的数据文件进行打包并命名后,生成备份文件,并添加到所述备份文件队列中。
较佳地,该装置还包括:
备份方式确定单元104,用于在所述数据获取单元获取当前需要备份的数据文件之前,确定当前需要采用的备份方式为预设的循环备份方式。
本发明实施例中,还可以设置一配置单元,用于预先设置归档备份与循环备份的选项、命名规则、循环规则(即备份文件的最大数量)、源数据路径和存储目标路径。以及一归档备份单元,用于在备份方式确定单元104,确定采用归档备份方式时,触发归档备份单元进行归档备份处理。
较佳地,本发明实施例所述数据获取单元处理失败时,还可以触发退出轮循操作,即结束,以达到安全处理的目的。
较佳地,本发明实施例,还可以通过设置一日志记录单元,用于记录每次备份的处理过程。
本发明实施例提供的技术方案,可以是定时任务执行程序,执行过程包括:
首先,在程序执行时,读取配置文件,获取:备份模式开关(即确定是循环备份或归档备份)M、命名规则G、备份文件最大数量N、源数据路径$SOURCEPATH、存储目标路径$DESTPATH等变量。
若M是归档备份模式:
调用数据获取单元从源数据路径$SOURCEPATH获取数据文件,并处理,最后生成单个文件或打包文件。
若数据获取单元处理失败,程序退出,调用日志记录单元记录错误原因。
若数据获取单元处理成功,调用添加处理单元将数据获取单元得到的最新文件按“格式G+(日期+秒级时间)+后缀”命名规则命名,以保证每份文件不重名,存储到目标路径$DESTPATH下。
调用日志记录单元,记录备份处理过程。
若M是循环备份模式:
调用数据获取单元从源数据路径$SOURCEPATH获取数据文件,并处理,最后生成单个文件或打包文件。
若数据获取单元处理失败,程序退出,调用日志记录单元记录错误原因。
若数据获取单元处理成功,则继续后续处理,具体又分两种情况处理:
若备份文件的命名不固定:
调用添加处理单元读取最新的序号。在程序第一次运行时,最新序号从0开始。然后,把最新序号存放到临时文件tempfile中。程序下一次运行时,最新序号从临时文件temfile中获取,然后将序号加1。
特殊地,当临时文件tempfile被意外删除,程序按第一次运行处理,即最新序号从0开始。
添加处理单元将数据获取单元得到的最新文件按命名规则顺序命名,命名为“格式G+(最新序号n)+.后缀”(最新文件),存储到目标路径$DESTPATH下。同时,删除目标路径$DESTPATH下的“格式G+(最新序号n-N)+.后缀”(最旧文件)。
特殊地,当n-N<0时,说明当前处于程序运行的前N次,此时还没有最旧文件,忽略对最旧文件的删除操作。
当“格式G+(最新序号n-N)+.后缀”文件不存在时,删除操作失败,但不会影响最终效果。为避免错误提示,可加入文件的检测机制,即若检测不到“格式G+(最新序号n-N)+后缀”文件,则不执行删除操作。
若备份文件的命名固定:
按预先配置,备份文件固定为“格式G+.后缀”(最新文件)、“格式G+01.后缀”、“格式G+02.后缀”......“格式G+(N-1)后缀”(最旧文件)。
添加处理单元将目标路径$DESTPATH下的次旧文件“格式G+(N-2).后缀”的文件内容覆盖掉最旧文件“格式G+(N-1).后缀”的文件内容,即最旧文件出队;然后将“格式G+(N-3).后缀”的文件内容覆盖“格式G+(N-2).后缀”的文件内容......以此类推,备份文件内容顺序前移;直到将“格式G+.后缀”的文件内容覆盖掉“格式G+01.后缀”的文件内容。
添加处理单元将数据获取单元得到的最新文件覆盖为“格式G+.后缀”文件,完成最新文件入队。
特殊地,当队列中全部或部分备份文件缺失时,覆盖操作会因找不到原文件而报失败,但不会影响最终效果。为避免错误提示,可加入原文件的检测机制,若检测不到原文件,则不执行覆盖操作。
综上所述,本发明实施例保证队列中的队员(备份文件)的最大数量是固定的,每次的最新备份文件放在队尾,队员依次前移,队首出队。以达到同时保留最近N个有效备份,并减少人工干预、有效利用存储空间的目的。
本领域内的技术人员应明白,本发明的实施例可提供为方法、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。