发明内容
本申请提供一种用于数据备份的方法,以解决现有技术存在的数据备份耗时长和实现难度大的问题。本申请同时涉及一种用于检测主备库数据差异的方法,一种用于数据备份的装置,以及一种用于检测主备库数据差异的装置。
本申请提供一种用于数据备份的方法,包括:
向备库查询校验数据,其中,所述校验数据为在主库中插入的数据,且在将写入到主库中的数据通过日志方式备份至备库过程中,所述校验数据同时备份到备库中;
获取该校验数据插入主库的时间,并将该时间作为完备时间点;
将镜像数据中早于该完备时间点之前的数据记录删除;
其中,所述镜像数据为在向主库中写入数据时,同步写入到设定存储空间的数据。
可选的,所述校验数据为在主库中插入的数据,相应的,该校验数据插入主库的步骤,采用下述方式:
周期性的检测在预设的时间段内是否有数据写入主库;
若是,则检测主库中是否存在所述校验数据;
若存在,以替换主库中存储的校验数据的方式将该校验数据插入主库;
若不存在,则将该校验数据插入主库;
若否,则返回所述周期性的检测在预设的时间段内是否有数据写入主库的步骤。
可选的,所述写入到主库中的数据和校验数据,通过日志方式备份至备库,相应的,所述数据和校验数据通过日志方式备份至备库的步骤,采用下述方式:
将写入主库的数据和校验数据记录到二进制日志中;
将所述二进制日志中记录的数据事件复制到中继日志中;
执行所述中继日志中记录的数据事件,并以该中继日志中记录的数据和校验数据更新备库。
可选的,所述将镜像数据中早于该完备时间点之前的数据记录删除的步骤,包括:
获取所述镜像数据写入所述存储空间的时间;
将所述镜像数据写入所述存储空间的时间与所述完备时间点进行比较,获得该镜像数据中早于完备时间点之前的数据记录;
将所述镜像数据中早于完备时间点之前的数据记录删除。
可选的,所述获取该校验数据插入主库的时间的步骤,采用下述方式:
从所述校验数据中读取该校验数据插入主库的时间,并将该时间作为所述完备时间点。
可选的,所述获取该校验数据插入主库的时间的步骤,采用下述方式:
根据所述中继日志中记录的数据事件,从所述数据事件中读取所述校验数据插入主库的时间,并将该时间作为所述完备时间点。
可选的,所述镜像数据为在向主库中写入数据时,同步写入到设定存储空间的数据,相应的,所述数据同步写入到设定存储空间,采用下述任意一种方式:
将所述数据以本地存储的方式同步写入到设定存储空间;
将所述数据以远端存储的方式同步写入到设定存储空间。
可选的,所述存储空间包括内存和/或磁盘。
本申请另外提供一种用于检测主备库数据差异的方法,包括:
向备库查询校验数据,其中,所述校验数据为在主库中插入的数据,且在将写入到主库中的数据通过日志方式备份至备库过程中,所述校验数据同时备份到备库中;
获取该校验数据插入主库的时间,并将该时间作为完备时间点;
检测主库中是否存在写入主库的时间晚于所述完备时间点之后的数据;
若是,将所述写入主库的时间晚于所述完备时间点的数据视为主库和备库之间存在差异的数据。
可选的,所述检测主库中是否存在写入主库的时间晚于所述完备时间点之后的数据的步骤,包括:
周期性的检测主库中是否存在写入主库的时间晚于所述完备时间点之后的数据;
若是,则检测该写入主库的时间晚于所述完备时间点之后的数据在备库中是否存在;
若存在,则主库和备库之间没有存在差异的数据;
若不存在,则将所述写入主库的时间晚于所述完备时间点之后的数据视为主库和备库之间存在差异的数据。
本申请另外提供一种用于数据备份的装置,包括:
校验数据查询单元,用于向备库查询校验数据,其中,所述校验数据为在主库中插入的数据,且在将写入到主库中的数据通过日志方式备份至备库过程中,所述校验数据同时备份到备库中;
完备时间点获取单元,用于获取该校验数据插入主库的时间,并将该时间作为完备时间点;
数据记录删除单元,用于将镜像数据中早于该完备时间点之前的数据记录删除;
其中,所述镜像数据为在向主库中写入数据时,同步写入到设定存储空间的数据。
可选的,所述校验数据为在主库中插入的数据,相应的,该校验数据通过下述单元插入主库:
数据写入检测单元,用于周期性的检测在预设的时间段内是否有数据写入主库;
若是,则进入校验数据检测单元;
若否,则返回所述数据写入检测单元;
所述校验数据检测单元,用于检测主库中是否存在所述校验数据;
若存在,以替换主库中存储的校验数据的方式将该校验数据插入主库;
若不存在,则将该校验数据插入主库。
可选的,所述写入到主库中的数据和校验数据,通过日志方式备份至备库,相应的,所述数据和校验数据通过下述单元备份至备库:
数据写入单元,用于将写入主库的数据和校验数据记录到二进制日志中;
数据复制单元,用于将所述二进制日志中记录的数据事件复制到中继日志中;
数据更新单元,用于执行所述中继日志中记录的数据事件,并以该中继日志中记录的数据和校验数据更新备库。
可选的,所述数据记录删除单元,包括:
数据写入时间获取子单元,用于获取所述镜像数据写入所述存储空间的时间;
数据比较子单元,用于将所述镜像数据写入所述存储空间的时间与所述完备时间点进行比较,获得该镜像数据中早于完备时间点之前的数据记录;
数据删除子单元,用于将所述镜像数据中早于完备时间点之前的数据记录删除。
本申请另外提供一种用于检测主备库数据差异的装置,包括:
校验数据查询单元,用于向备库查询校验数据,其中,所述校验数据为在主库中插入的数据,且在将写入到主库中的数据通过日志方式备份至备库过程中,所述校验数据同时备份到备库中;
完备时间点获取单元,用于获取该校验数据插入主库的时间,并将该时间作为完备时间点;
数据检测单元,用于检测主库中是否存在写入主库的时间晚于所述完备时间点之后的数据;
若是,则进入差异数据生成单元;
所述差异数据生成单元,用于将所述写入主库的时间晚于所述完备时间点的数据视为主库和备库之间存在差异的数据。
可选的,所述数据检测单元,包括:
第一数据检测子单元,用于周期性的检测主库中是否存在写入主库的时间晚于所述完备时间点之后的数据;
若是,则进入第二数据检测子单元;
所述第二数据检测子单元,用于检测该写入主库的时间晚于所述完备时间点之后的数据在备库中是否存在;
若存在,则主库和备库之间没有存在差异的数据;
若不存在,则将所述写入主库的时间晚于所述完备时间点之后的数据视为主库和备库之间存在差异的数据。
与现有技术相比,本申请具有以下优点:
本申请所述的用于数据备份的方法,包括:向备库查询校验数据,其中,所述校验数据为在主库中插入的数据,且在将写入到主库中的数据通过日志方式备份至备库过程中,所述校验数据同时备份到备库中;获取该校验数据插入主库的时间,并将该时间作为完备时间点;将镜像数据中早于该完备时间点之前的数据记录删除;其中,所述镜像数据为在向主库中写入数据时,同步写入到设定存储空间的数据。
本申请所述的用于数据备份的方法,将数据备份到主库,并同时将所述数据以完整镜像的方式备份到独立于主库存储之外的存储空间,形成镜像数据,主库的数据通过日志的方式备份到备库,形成另外一个数据的备份,通过周期性的向主库插入校验数据,以及周期性的向备库查询所述校验数据在检测主库和备库之间重复的数据,将所述镜像数据中所述主库和备库之间重复的数据删除,使所述镜像数据和所述备库中的数据组成一个完整的数据备份,实现简单,成本较低,并且备份数据的安全性较高。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其他方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
本申请提供一种用于数据备份的方法,此外,本申请还提供一种用于检测主备库数据差异的方法,一种用于数据备份的装置,以及一种用于检测主备库数据差异的装置。
本申请提供的一种用于数据备份的方法实施例如下:
参照图1,其示出了本实施例提供的一种用于数据备份的方法处理流程图。
以下结合图1对本实施例提供的一种用于数据备份的方法进行说明,并且对该方法的各个步骤进行说明;此外,本实施例提供的一种用于数据备份的方法的具体步骤之间的顺序关系请根据图1确定。
步骤S101,向备库查询校验数据。
本实施例以一种基于MySQL数据库的用于数据备份的方法为例,对本申请提供的所述用于数据备份的方法进行说明;因此,本实施例中,所述主库和备库是指MySQL数据库。
除此之外,还可以基于其他的数据库平台对本申请提供的用于数据备份的方法进行说明,在此不作限定。
所述校验数据,是指在主库中插入的数据,其中包含有特定的信息,区别于所述数据(即:待备份的数据)。
需要说明的是,在本步骤所述的向备库查询校验数据之前,包括将所述校验数据插入主库的步骤,具体实现如下:
1)周期性的检测在预设的时间段内是否有数据写入主库;
所述数据,是指待备份的数据,是由应用程序被业务系统调用后产生的有用数据,例如用户信息、交易信息等。
上述检测过程中设置周期的目的是为了减少数据的处理量,比如在深夜或者凌晨时,数据比较少,此时,校验数据的插入主库的频率大大降低。通过设置检测的周期,能够避免特殊情形下频繁将所述校验数据插入主库造成的系统资源的浪费。
若是,进入下述步骤2),检测主库中是否存在所述校验数据;
若否,则重复该步骤,返回所述周期性的检测在预设的时间段内是否有数据写入主库的步骤。
除此之外,上述周期性的检测在预设的时间段内是否有数据插入主库的步骤还可以通过其他方法实现,比如检测在特定时间段内是否有数据写入主库,在此不作限定。
2)检测主库中是否存在所述校验数据;
若存在,以替换主库中存储的校验数据的方式将该校验数据插入主库;
若不存在,则将该校验数据插入主库;
本实施例是以覆盖替换的方式在主库中插入所述校验数据;因此,在所述校验数据插入主库之前,需要进行检测,检测主库中是否存在所述校验数据,如果检测到主库中存在校验数据,则以替换主库中存储的校验数据的方式将该数据插入主库即可;如果检测到主库中不存在校验数据,则表明该校验数据是首次插入主库中,或者主库出现异常,则直接将该校验数据插入主库即可。
此外,需要说明的是,在本步骤所述的向备库查询校验数据之前,还包括:基于MySQL数据库的主备库异步复制原理,将主库中存储的数据和校验数据通过日志方式备份至备库,具体实现如下:
将写入主库的数据和校验数据记录到binlog中;
将所述binlog中记录的数据事件复制到relay log中;
执行所述relay log中记录的数据事件,并以该relay log中记录的数据和校验数据更新备库。
上述将主库中存储的数据和校验数据复制到备库的过程中,需要花费一定的时间,基于此,当主库突然出现异常时,很可能造成主库中的数据和/或校验数据并未全部复制到备库中,导致备库中的数据和/或校验数据缺失。
本发明正是为了解决这个缺陷,在将数据写入到主库的过程中,同时将该数据写入到设定存储空间中,生成该数据的一个镜像数据。
具体的,本实施例中,将数据进行序列化,序列化为可存储的数据格式之后,将数据写入到计算机本地的存储空间中,生成该数据的一个镜像数据;其中,所述存储空间包括内存、磁盘,以及内存与磁盘二者的组合。
除此之外,还可以将该据存储到远端服务器的存储空间中,或者存储到云存储空间中,在此不做限定。
步骤S102,获取该校验数据插入主库的时间,并将该时间作为完备时间点。
本步骤得以实施的前提是上述步骤S101中,在备库中查询到所述校验数据。
根据上述步骤S101在备库中查询到的所述校验数据,获取该校验数据插入主库的时间,并将该时间作为完备时间点,具体实现如下:
在备库的数据表中找到包含有该校验数据的relay log,根据所述relay log中记录的数据事件,从所述数据事件中读该校验数据插入主库的时间,并将该校验数据插入主库的时间作为所述完备时间点。
除此之外,上述获取该校验数据插入主库的时间的步骤还可以采用其他方法实现,比如从所述校验数据自身包含的时间信息中读取该校验数据插入主库的时间,并将该时间作为所述完备时间,在此不做限定。
步骤S103,将镜像数据中早于该完备时间点之前的数据记录删除。
上述步骤S101,向备库查询校验数据,上述步骤S102,获取所述完备时间点,本步骤中,将所述镜像数据和备库二者存储的数据中相互重复的部分数据删除,即:将镜像数据中早于该完备时间点之前的数据记录删除,具体实现如下:
1)获取所述镜像数据写入所述存储空间的时间;
所述镜像数据写入所述存储空间的时间,是指所述数据写入计算机本地的存储空间时的时间。
2)将所述镜像数据写入所述存储空间的时间与所述完备时间点进行比较,获得该镜像数据中早于完备时间点之前的数据记录;
3)将所述镜像数据中早于完备时间点之前的数据记录删除。
此处,基于上述步骤1)、2)和3),存在两种情况:
一是备库中的日志数据与主库中的日志数据相比,没有缺失;由于数据写入主库和写入所述存储空间是同步的,此时,所述完备时间点为插入主库的时间最晚的一个校验数据插入主库的时间,即:所述存储空间中的镜像数据全部都是完备时间点之前的数据,则将所述镜像数据中早于完备时间点之前的数据记录删除,即:删除存储空间中存储的全部镜像数据;
二是备库中的日志数据与主库中的日志数据相比,有一定的缺失;此时,存储空间的镜像数据中在完备时间点之前的数据为存储空间和备库二者之间重复的数据,则将存储空间中存储的镜像数据中在所述完备时间点之前的数据删除即可。
除此之外,上述将镜像数据中早于该完备时间点之前的数据记录删除的步骤还可以采用其他方法实现,在此不作限定。
本申请提供的一种用于检测主备库数据差异的方法实施例如下:
参照图2,其示出了本实施例提供的一种用于检测主备库数据差异的方法处理流程图。
以下结合图2对本实施例提供的一种用于检测主备库数据差异的方法进行说明,并且对该方法的各个步骤进行说明;此外,本实施例提供的一种用于检测主备库数据差异的方法的具体步骤之间的顺序关系请根据图2确定。
步骤S201,向备库查询校验数据。
本实施例以一种基于MySQL数据库的用于数据备份的方法为例,对本申请提供的所述用于数据备份的方法进行说明;因此,本实施例中,所述主库和备库是指MySQL数据库。
除此之外,还可以基于其他的数据库平台对本申请提供的用于数据备份的方法进行说明,在此不作限定。
所述校验数据,是指在主库中插入的数据,其中包含有特定的信息,区别于所述数据(即:待备份的数据)。
需要说明的是,在本步骤所述的向备库查询校验数据之前,包括将所述校验数据插入主库的步骤,具体实现如下:
1)周期性的检测主库中是否存在写入主库的时间晚于所述完备时间点之后的数据;
所述数据,是指待备份的数据,是由应用程序被业务系统调用后产生的有用数据,例如用户信息、交易信息等。
若是,进入下述步骤2),检测该写入主库的时间晚于所述完备时间点之后的数据在备库中是否存在;
若否,则重复该步骤,返回所述周期性的检测主库中是否存在写入主库的时间晚于所述完备时间点之后的数据的步骤。
除此之外,上述周期性的检测主库中是否存在写入主库的时间晚于所述完备时间点之后的数据的步骤还可以通过其他方法实现,比如在特定时间段检测主库中是否存在写入主库的时间晚于所述完备时间点之后的数据,在此不作限定。
2)检测该写入主库的时间晚于所述完备时间点之后的数据在备库中是否存在;
若存在,则表明主库和备库之间没有存在差异的数据;
若不存在,则将所述写入主库的时间晚于所述完备时间点之后的数据视为主库和备库之间存在差异的数据。
此外,需要说明的是,在本步骤所述的向备库查询校验数据之前,还包括:基于MySQL数据库的主备库异步复制原理,将主库中存储的将待备份的数据以及所述验证数据通过日志方式备份至备库,具体实现如下:
将写入主库的数据和校验数据记录到binlog中;
将所述binlog中记录的数据事件复制到relay log中;
执行所述relay log中记录的数据事件,并以该relay log中记录的数据和校验数据更新备库。
此处,需要说明的是,上述将主库中的数据和校验数据复制到备库中,需要花费一定的时间,基于此,当主库突然出现异常时,很可能造成主库中的数据和校验数据并未全部复制到备库中,备库中的数据和校验数据存在缺失,本发明正是基于此来检测主库和备库之间的数据的差异。
步骤S202,获取该校验数据插入主库的时间,并将该时间作为完备时间点。
本步骤得以实施的前提是上述步骤S201中,在备库中查询到所述校验数据;
根据上述步骤S201在备库中查询到的所述校验数据,获取该校验数据插入主库的时间,并将该时间作为完备时间点,具体实现如下:
在备库的数据表中找到包含有该校验数据的relay log,根据所述relay log中记录的数据事件,从所述数据事件中读该校验数据插入主库的时间,并将该校验数据插入主库的时间作为所述完备时间点。
除此之外,上述获取该校验数据插入主库的时间的步骤还可以采用其他方法实现,比如从所述校验数据中读取该校验数据插入主库的时间,并将该时间作为所述完备时间,在此不做限定。
步骤S203,检测主库中是否存在写入主库的时间晚于所述完备时间点之后的数据。
上述步骤S201,向备库查询校验数据,上述步骤S202,获取所述完备时间点,本步骤中,检测主库中是否存在写入主库的时间晚于所述完备时间点之后的数据,即:检测主库和备库之间是否有存在差异的数据。
在上述步骤S201中所述周期的时间间隔足够短的情况下,如果检测到主库中存在写入主库的时间晚于所述完备时间点之后的数据,则表明主库和备库之间有存在差异的数据,进入下述步骤S204;
如果检测到主库中不存在写入主库的时间晚于所述完备时间点之后的数据,则表明主库和备库之间的数据完全相同,主库和备库之间没有存在差异的数据。
步骤S204,将所述写入主库的时间晚于所述完备时间点的数据视为主库和备库之间存在差异的数据。
本步骤得以实施的前提是,上述步骤S103中检测到主库中存在写入主库的时间晚于所述完备时间点之后的数据。
在上述步骤S201中所述周期的时间间隔足够短的情况下,如果检测到主库中存在写入主库的时间晚于所述完备时间点之后的数据,则表明由于主备库异步复制的时间延时,使主库和备库之间有一部分存在差异的数据,该部分存在差异的数据在主库中存在,但是还未来得及复制到备库中,将该部分存在差异的数据作为主库和备库之间存在差异的数据。
本申请提供的一种用于数据备份的装置实施例如下:
在上述的实施例中,提供了一种用于数据备份的方法,与之相对应的,本申请提供了一种用于数据备份的装置,由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关的部分请参见上述方法实施例对应说明即可。下述描述的装置实施例仅仅是示意性的。
参照图3,其示出了根据本实施例提供的一种用于数据备份的装置示意图。
本申请提供的一种用于数据备份的装置,包括:
校验数据查询单元301,用于向备库查询校验数据,其中,所述校验数据为在主库中插入的数据,且在将写入到主库中的数据通过日志方式备份至备库过程中,所述校验数据同时备份到备库中;
完备时间点获取单元302,用于获取该校验数据插入主库的时间,并将该时间作为完备时间点;
数据记录删除单元303,用于将镜像数据中早于该完备时间点之前的数据记录删除;
其中,所述镜像数据为在向主库中写入数据时,同步写入到设定存储空间的数据。
可选的,所述校验数据为在主库中插入的数据,相应的,该校验数据通过下述单元插入主库:
数据写入检测单元,用于周期性的检测在预设的时间段内是否有数据写入主库;
若是,则进入校验数据检测单元;
若否,则返回所述数据写入检测单元;
所述校验数据检测单元,用于检测主库中是否存在所述校验数据;
若存在,以替换主库中存储的校验数据的方式将该校验数据插入主库;
若不存在,则将该校验数据插入主库。
可选的,所述写入到主库中的数据和校验数据,通过日志方式备份至备库,相应的,所述数据和校验数据通过下述单元备份至备库:
数据写入单元,用于将写入主库的数据和校验数据记录到二进制日志中;
数据复制单元,用于将所述二进制日志中记录的数据事件复制到中继日志中;
数据更新单元,用于执行所述中继日志中记录的数据事件,并以该中继日志中记录的数据和校验数据更新备库。
可选的,所述数据记录删除单元303,包括:
数据写入时间获取子单元,用于获取所述镜像数据写入所述存储空间的时间;
数据比较子单元,用于将所述镜像数据写入所述存储空间的时间与所述完备时间点进行比较,获得该镜像数据中早于完备时间点之前的数据记录;
数据删除子单元,用于将所述镜像数据中早于完备时间点之前的数据记录删除。
本申请提供的一种用于检测主备库数据差异的装置实施例如下:
在上述的实施例中,提供了一种用于检测主备库数据差异的方法,与之相对应的,本申请提供了一种用于检测主备库数据差异的装置,由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关的部分请参见上述方法实施例对应说明即可。下述描述的装置实施例仅仅是示意性的。
参照图4,其示出了根据本实施例提供的一种用于检测主备库数据差异的装置示意图。
本申请提供的一种用于检测主备库数据差异的装置,包括:
校验数据查询单元401,用于向备库查询校验数据,其中,所述校验数据为在主库中插入的数据,且在将写入到主库中的数据通过日志方式备份至备库过程中,所述校验数据同时备份到备库中;
完备时间点获取单元402,用于获取该校验数据插入主库的时间,并将该时间作为完备时间点;
数据检测单元403,用于检测主库中是否存在写入主库的时间晚于所述完备时间点之后的数据;
若是,则进入差异数据生成单元;
所述差异数据生成单元404,用于将所述写入主库的时间晚于所述完备时间点的数据视为主库和备库之间存在差异的数据。
可选的,所述数据检测单元403,包括:
第一数据检测子单元,用于周期性的检测主库中是否存在写入主库的时间晚于所述完备时间点之后的数据;
若是,则进入第二数据检测子单元;
所述第二数据检测子单元,用于检测该写入主库的时间晚于所述完备时间点之后的数据在备库中是否存在;
若存在,则主库和备库之间没有存在差异的数据;
若不存在,则将所述写入主库的时间晚于所述完备时间点之后的数据视为主库和备库之间存在差异的数据。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。