数据库恢复方法及装置的制造方法_2

文档序号:9326764阅读:来源:国知局
取所述主库上已完成的操作。
[0066] 例如,所述按时间顺序获取所述主库上已完成的操作,可以包括:
[0067] 顺序读取记载在主库操作日志中的操作。
[0068] 通常当数据库上完成了一操作后,数据库会在其操作日志中按顺序记录下该操作 及完成的时间。所以读取主库的操作日志,便可逐一获取到主库上已完成的操作。
[0069] 在步骤S102中,每次获取到所述操作后,以当前获取的所述操作的完成时间为基 础延迟预设时长后在所述从库上执行相同的操作。
[0070] 以上两个步骤可以看作是利用从库对主库进行备份的过程。
[0071] 执行与主库相同的操作也可称为复制主库的操作。对于预设时长的大小本实施例 并不进行限制,用户可以根据需要在初始时进行设置,例如可以设置为30分钟;此外也可 以根据用户的输入对所述预设时长进行修改。
[0072] 从库作为主库的备份数据库,初始时存储与主库相同的数据。而备份过程则是一 种异步备份,在主库发生变化(即在主库上完成各种操作)的过程中,也令从库发生同样的 变化,且与主库相比,从库的变化会延迟预设时长,例如延迟30分钟。
[0073] 作为示例该场景可参见图2所示,在图2中201为主库,202为从库,主库上的操作 执行完毕后写入主库的操作日志,而从库则可以通过I/O线程读取主库的操作日志,将主 库操作日志中的操作写入到从库的待执行操作列表中,按顺序将每个操作延迟30分钟后 通过SQL线程在从库上执行。
[0074] 还可以进一步参见表1所示,在表1中可以看到,从库复制了主库上的各项操作, 且从库上的操作都比主库上相同的操作延迟了 30分钟。
[0075] 表 1
[0076]
[0077] 在步骤S103中,当所述主库出现错误时,确定导致错误的错误操作。
[0078] 例如,可以在主库的操作日志中对错误操作进行定位。
[0079] 在步骤S104中,判断所述错误操作是否已经在所述从库上执行。
[0080] 在步骤S105中,如果所述错误操作尚未在所述从库上执行,则使用所述从库的数 据对所述主库的数据进行恢复。
[0081] 以上三个步骤可以看作是利用从库对主库进行恢复的过程。
[0082] 这样当发现主库出现了错误时,如果错误是在主库上执行该错误操作后的预设时 长内被发现的,也即发现错误时从库尚未执行相同的错误操作,那么该错误就可被纠正,可 使用从库的数据对主库进行修复,从而挽回主库的数据。
[0083] 需要说明的是,在有些情况下,如果错误发现的较晚,发现错误时从库已经执行了 相同的错误操作,那么就需要其他技术来对主库进行恢复,这类情况不在本公开的讨论范 畴之内。
[0084] 参见图3所示,在本实施例或本公开其他某些实施例中,以当前获取的所述操作 的完成时间为基础延迟预设时长后在所述从库上执行相同的操作,可以包括:
[0085] 在步骤S301中,获取所述从库的当前时间。
[0086] 在步骤S302中,判断当前获取的所述操作的完成时间与所述当前时间之差是否 小于所述预设时长;
[0087] 在步骤S303中,如果小于所述预设时长,则返回步骤S301。
[0088] 在步骤S304中,如果大于或等于所述预设时长,则在所述从库上执行与所述操作 相同的操作。
[0089] 在一些情况下,需要进行恢复时,从库可能尚未执行到错误操作之前的操作,此时 为了使主库能够恢复到错误操作前的状态,可以使从库追赶上主库的进度。例如,假设错误 操作是操作18,但是从库只执行到操作10,那么可以先让从库一直执行到操作17,即达到 主库在执行操作18之前的状态,从而使主库可以借助从库而恢复到操作18之前的状态。
[0090] 所以参见图4所示,在本实施例或本公开其他某些实施例中,使用所述从库的数 据对所述主库的数据进行恢复,可以包括:
[0091] 在步骤S401中,在所述从库上执行完所述错误操作之前的操作。
[0092] 在步骤S402中,使用所述从库当前的数据对所述主库的数据进行修复,以使所述 主库的数据恢复到执行所述错误操作之前的状态。
[0093]当然在本公开其他实施例中,也可以采用其他方式使用所述从库的数据对所述主 库的数据进行恢复,例如,还可以在出现错误时令从库停止执行主库的步骤,然后使用从库 上的数据对主库进行修复,再在主库上执行完错误操作之前的步骤,从而也可使主库的数 据恢复到执行所述错误操作之前的状态。对此本实施例并不进行限制。
[0094] 在相关技术中,当出现错误需要恢复数据时,因为当前时刻与备份时刻之间很可 能已经发生了很多操作,但相关技术只能恢复到备份时刻,所以可能会造成数据的丢失。而 在本公开方案中,可以恢复到错误操作的前一操作的状态。换句话说,相关技术在恢复数据 时只能精确到前一"时刻",而本公开方案则可以精确到前一"操作",这就在很大程度上避 免了数据的丢失,将损失减少到尽可能小,提升了数据库运行时的安全性和可靠性。
[0095] 图5是根据一示例性实施例示出的一种数据库恢复装置的框图。所述装置用于由 主库和从库组成的数据库系统,初始时所述从库的数据与所述主库的数据相同。
[0096] 参见图5所示,所述装置包括:
[0097] 主库操作获取模块501,用于按时间顺序获取所述主库上已完成的操作,每次获取 到所述操作后,触发从库异步备份模块;
[0098] 从库异步备份模块502,用于以主库操作获取模块当前获取的所述操作的完成时 间为基础,延迟预设时长后在所述从库上执行相同的操作;
[0099] 恢复判断模块503,用于当所述主库出现错误时,确定导致错误的错误操作,判断 所述错误操作是否已经在所述从库上执行,如果所述错误操作尚未在所述从库上执行,则 触发数据恢复模块;
[0100] 数据恢复模块504,用于使用所述从库的数据对所述主库的数据进行恢复。
[0101] 参见图6所示,在本实施例或本公开其他某些实施例中,所述从库异步备份模块 502可以包括:
[0102] 时间获取子模块601,用于获取所述从库的当前时间;
[0103] 时间对比子模块602,用于判断判断当前获取的所述操作的完成时间与所述当前 时间之差是否小于所述预设时长,如果小于所述预设时长,则触发时间获取子模块,如果大 于或等于所述预设时长,则在所述从库上执行与所述操作相同的操作。
[0104] 参见图7所示,在本实施例或本公开其他某些实施例中,所述数据恢复模块504可 以包括:
[0105] 恢复准备子模块701,用于在所述从库上执行完所述错误操作之前的操作;
[0106] 数据修复子模块702,用于使用所述从库当前的数据对所述主库的数据进行修复, 以使所述主库的数据恢复到执行所述错误操作之前的状态。
[0107] 参见图8所示,在本实施例或本公开其他某些实施例中,所述主库操作获取模块 501可以包括:
[0108] 顺序读取子模块801,用于顺序读取记载在主库操作日志中的操作;
[0109] 备份触发子模块802,用于每次获取到所述操作后,触发从库异步备份模块。
[0110] 参见图9所示,在本实施例或本公开其他某些实施例中,所述装置还可以包括:
[0111] 时长修改模块505,用于根据用户的输入对所述预设时长进行修改。
[0112] 关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法 的实施例中进行了详细描述,此处将不做详细阐述说明。
[0113] 在相关技术中,当出现错误需要恢复数据时,因为当前时刻与备份时刻之间很可 能已经发生了很多操作,但相关技术只能恢复到备份时刻,所以可能会造成数据的丢失。而 在本公开方案中,可以恢复到错误操作的前一操作的状态。换句话说,相关技术在恢复数据 时只能精确到前一"时刻",而本公开方案则可以精确到前一"操作",这就在很大程度上避 免了数据的丢失,将损失减少到尽可能小,提升了数据库运行时的安全性和可靠性。
[0114] 本公开还公开了一种数据库恢复装置,所述装置用于由主库和从库组成的数据
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1