背景技术
在大型分布式数据库中,对于数据的保护显得尤为重要,备份则是对数据进行保护的一种合理手段。若要对不断更新的数据进行保护,则可以在指定时间点对数据库数据进行备份。这样,当数据库发生故障时,可以及时还原到最近一次备份的时间点,避免数据大规模丢失。目前已知对数据库进行备份主要采取以下两种策略:
(1)利用操作系统本身的定时系统,编写脚本,定时将数据库物理存储数据进行复制。
该方案通过利用操作系统本身的定时系统,编写脚本,便可在脚本指定的周期时间进行定时操作,将数据库物理存储的数据进行复制,保存于其他安全的物理存储设备中。
(2)利用操作系统本身的定时系统,编写脚本,定时执行 SQL 备份语句。
该方案通过利用操作系统本身的定时系统,与数据库本身的备份功能相结合,定时执行 SQL 备份语句, 则可在脚本指定的定时周期进行数据库数据备份。
方案(1)(2)均强依赖于操作系统,局限性高,需要熟悉对应操作系统脚本编写的人员进行脚本的编写,且此类方式定时备份的相关信息不够直观、不易保存。同时,方案(1)为物理备份,必须停止数据库才可进行复制,很多业务场景不适用。方案(2)虽摆脱了此种限制,可以应用于在线业务,但仍受限于操作系统及脚本等方面。
KaiwuDB 中的定时备份
KaiwuDB 分布式数据库提供了一种定时备份方法。此种方法可通过数据库本身定时对数据库数据进行备份,避免数据的大规模丢失,保障数据的安全性。同时,相比于其他类似技术,该方法解决了定时备份任务强依赖于操作系统及脚本的问题,使得定时备份变得更为灵活且容易实现,更利于数据库管理人员操作使用。另外,备份方式使用数据库本身的逻辑备份方式,属于逻辑备份而非物理备份,可以解决备份时需要停止数据库业务的问题,拓宽了业务场景的同时保障了数据的安全可靠。
KaiwuDB 能够在不停止业务的情况下按照指定的周期对数据进行备份,具体过程如下:
步骤 1- 用户执行创建定时备份任务的 SQL 语句,其中包括备份目标、备份周期和备份位置等信息;
步骤 2- 数据库解析 SQL 语句,将关键信息写入数据库内定时备份的系统表中,同时创建出后台执行的定时备份任务,结合附图 1;
步骤 3- 数据库按照数据库中设置的时间间隔,每隔该时间,对系统表进行一次扫描,筛选出该执行的备份操作并执行,结合附图 2;
步骤 4- 若执行备份成功,则继续执行步骤 3;若不成功,则停止定时备份任务并提示数据库使用者,同时将问题信息写入日志。
进一步的,步骤 1 用户执行创建定时备份操作,设置备份的周期,及将指定的数据库(模式、表)备份到指定的节点、分区、落盘位置等。
随后执行步骤 2,数据库服务解析 SQL 语句生成语法树,再通过语法树生成执行计划,将关键信息写入数据库内定时备份的系统表中,其中具体步骤包括:
步骤 2.1- 用户输入创建定时备份的 SQL 语句后,解析器通过词法解析,句法解析和语义解析,将语句生成语法树。
步骤 2.2- 优化器由语法树生成逻辑计划,再由逻辑计划生成具体执行时的物理计划。
步骤 2.3- 基于执行计划,将备份的关键信息写入数据库内定时备份的系统表中,并在后台创建一个定时备份进程,用于定时扫描该系统表,结合附图 1.
图 1
数据库内定时备份的系统表中具体信息例如:
{
schedule_id 定时备份任务唯一标识
schedule_name 定时备份任务名称
created 定时备份任务创建时间
owner 定时备份任务归属用户
schedule_expr 定时备份周期表达式
next_run 下次执行备份的时间
target 定时备份任务的对象
}
随后执行步骤 3:数据库按照数据库中设置的时间间隔,每隔该时间,对系统表进行一次扫描,筛选出该执行的备份操作并执行,其中具体步骤包括:
步骤 3.1- 按照设置的时间间隔,扫描定时备份的系统表,查询是否应该执行该次备份。具体执行判断示例为:
将当前时间 time.now 与系统表中对应备份的 next_run 进行对比判断,若当前时间大于等于 next_run,则应当执行该次备份,若小于,则无需执行。
步骤 3.2- 若满足执行条件,则执行该次备份并在定时备份的系统表中更新该次备份的定时信息,若满足,则不执行及更新,等待下次扫描,结合附图 2.
图 2
具体更新示例为:执行备份,更新该次备份的定时信息,即更新系统表中对应备份的 next_run 值,其应当为当前 next_run 值加 schedule_expr 换算出的时间周期。
随后执行步骤 4:执行步骤 3 中扫描出的满足条件的备份,若不成功,则停止定时备份任务并提示数据库使用者,同时将问题信息写入日志。
优势
此种定时备份方法不依赖于操作系统及脚本,而是通过在数据库内输入 SQL 语句设置定时备份任务,使得定时备份变得更为灵活且容易实现,更易于数据库管理人员去制定定时备份策略、设置定时备份方式;通过备份,对数据进行保护,避免数据的大规模丢失,保障数据的安全性。同时,此种定时备份方法执行的备份是基于数据库内部的备份,而非对外在数据进行拷贝,故而可以在不停止数据库的同时对数据进行备份,不会影响正常业务的开展。