基于分布式数据库本身的定时备份方法
背景技术
在大型分布式数据库中,对于数据的保护显得尤为重要,备份则是对数据进行保护的一种合理手段。若要对不断更新的数据进行保护,则可以在指定时间点对数据库数据进行备份。这样,当数据库发生故障时,可以及时还原到最近一次备份的时间点,避免数据大规模丢失。目前已知对数据库进行备份主要采取以下两种策略:
(1)利用操作系统本身的定时系统,编写脚本,定时将数据库物理存储数据进行复制。
该方案通过利用操作系统本身的定时系统,编写脚本,便可在脚本指定的周期时间进行定时操作,将数据库物理存储的数据进行复制,保存于其他安全的物理存储设备中。
(2)利用操作系统本身的定时系统,编写脚本,定时执行SQL备份语句。
该方案通过利用操作系统本身的定时系统,与数据库本身的备份功能相结合,定时执行SQL备份语句, 则可在脚本指定的定时周期进行数据库数据备份。
方案(1)(2)均强依赖于操作系统,局限性高,需要熟悉对应操作系统脚本编写的人员进行脚本的编写,且此类方式定时备份的相关信息不够直观、不易保存。同时,方案(1)为物理备份,必须停止数据库才可进行复制,很多业务场景不适用。方案(2)虽摆脱了此种限制,可以应用于在线业务,但仍受限于操作系统及脚本等方面。
云溪数据库中的定时备份
云溪分布式数据库提供了一种定时备份方法。此种方法可通过数据库本身定时对数据库数据进行备份,避免数据的大规模丢失,保障数据的安全性。同时,相比于其他类似技术,该方法解决了定时备份任务强依赖于操作系统及脚本的问题,使得定时备份变得更为灵活且容易实现,更利于数据库管理人员操作使用。另外,备份方式使用数据库本身的逻辑备份方式,属于逻辑备份而非物理备份,可以解决备份时需要停止数据库业务的问题,拓宽了业务场景的同时保障了数据的安全可靠。
云溪数据库能够在不停止业务的情况下按照指定的周期对数据进行备份,具体过程如下:
步骤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语句设置定时备份任务,使得定时备份变得更为灵活且容易实现,更易于数据库管理人员去制定定时备份策略、设置定时备份方式;通过备份,对数据进行保护,避免数据的大规模丢失,保障数据的安全性。同时,此种定时备份方法执行的备份是基于数据库内部的备份,而非对外在数据进行拷贝,故而可以在不停止数据库的同时对数据进行备份,不会影响正常业务的开展。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android 13 Beta 3 发布,达到平台稳定
Google 近日发布了 Android 13 Beta 3,该操作系统的最新预发布版本为我们带来了一个重要的里程碑 —— 平台稳定。 虽然名为 Beta 3,但这是 Google 推出的第四个 Beta 版(之前是 Beta 1、Beta 2 和 Beta 2.1)。与之前的 Beta 版不同,这个新的 Beta 版并没有引入太多的新功能,而是作为软件的最终定型。展望未来,之后的 Beta 版将是对这个版本的细微改进。 通过 Beta 3,Android 13 达到平台稳定,这意味着所有面向应用的行为和 API,包括官方 API Level 33 SDK 和 NDK API,现在都是最终版本。因此从 Beta 3 开始,开发者可以放心地开发和发布兼容性更新,因为平台不会再发生改变。 然而,这也意味着这个新版本并没有太多的新东西可以讨论。Google 自己关于这个问题的博文只是简单地引用了我们此前已经知道的功能。 从 Google 的开发时间表来看,7 月份应该还有一个 Beta 版发布。在此之后,我们预计 Android 13 的稳定版本将在 8 月正式发布。
- 下一篇
Kotlin 1.7.0 已发布,推出新的 Kotlin К2 编译器
Kotlin 1.7.0 已经发布啦。新版本推出了新的 Kotlin/JVM K2 编译器的 Alpha 版本,稳定了语言特性,并为 JVM、JS 和 Native 平台带来了性能改进。 以下是此版本的主要更新: 新的 Kotlin К2 编译器现在处于 Alpha 阶段,它提供了显着的性能改进。它目前仅适用于 JVM,包括 kapt 在内的所有编译器插件都无法使用它。 Gradle 中增量编译的一种新方法。增量编译现在也支持在依赖的非 Kotlin 模块中进行更改,并且与 Gradle 兼容。 已经稳定了选择性加入需求注释、绝对不可空的类型和构建器推断。 现在有一个用于 args 类型的下划线运算符。可以使用它在指定其他类型时自动推断参数类型。 此版本允许通过委托(delegation)实现内联类的内联值。您现在可以创建在大多数情况下不分配内存的轻量级包装器。 在此阅读Kotlin 1.7.0 中新增功能的完整更改列表。 其他内容: 更新了 Kotlin 路线图
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS关闭SELinux安全模块
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2配置默认Tomcat设置,开启更多高级功能