Dynamodb 备份策略

发布于:2022-11-10 ⋅ 阅读:(588) ⋅ 点赞:(0)

ㅤㅤㅤ
ㅤㅤㅤ
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ(成功的唯一秘诀——坚持最终一分钟。——柏拉图)
ㅤㅤㅤ
ㅤㅤㅤ
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ在这里插入图片描述

备份的作用

  • 保证数据安全与完整
    • 为了保证数据在被人为失误、操作不当、蓄意等情况下删除或损坏后,能及时、有效的进行恢复并不会很大程度上影响到业务运行。
  • 为业务提供不间断服务
    ○ 实际生产环境对数据库的要求,首先就是具备7×24×365不间断服务的能力,这也是一定要备份数据库的其中原因之一

备份的应用场景

  • 数据丢失应用场景:
    • 人为操作失误造成某些数据被误操作
    • 软件 BUG 造成部分数据或全部数据丢失
    • 硬件故障造成数据库部分数据或全部数据丢失
    • 软件漏洞造成数据被恶意篡改
    • 数据库或者数据迁移异常
    • 自然灾害造成数据库硬件故障

dynamodb和aws备份区别

  • dynamodb备份跨区,复制,标签,冷存储选项
  • api和cli除了以上不支持外,还不支持备份库,保留期

AWS云控制台备份

  • 按需备份(一次性备份)
    • 备份机制
    • 备份设置选项
      • 默认设置
        • 开启后在一小时内开始备份
      • 自定义设置
        • 自定义勾选开始备份的时间,备份开始的时间单位为小时,可以设置数据迁移到冷存储的策略,也可以指定数据的保留期限
    • 该备份机制只能够备份一次,无法持续备份
    • 备份执行期间不能暂停,取消备份操作,不能删除备份,禁用备份源
    • aws dynamodb热存储和冷存储的区别以及应用场景
      • 热存储
        • 默认所有的数据都存储在热存储区中,它用于索引和更新,同时提供对数据的快速访问。如果想要低延迟和快速访问数据,热存储是最佳的选择
      • 冷存储
        • 随着业务的发展,数据库中有很多访问频率较低的数据,或者可以容忍更高的延迟,那么这些数据放在冷存储中的收益更高,能够大幅度降低存储成本
  • 备份复制
    • 在aws中点击备份复制,默认继承备份源的配置,需要注意的是过期时间也会继承,所以如果需要永不过期,那么备份源的配置也必须是永不过期的
  • 还原方案
    • 选择一个已备份好的表进行还原,还原的表名不能和原表明相同且必须是唯一值,否则还原失败
  • 删除备份
    • 在控制台中删除,删除后不可恢复
  • 计划备份
    • 备份机制
      • 包含了备份要求,备份时间,备份保留规则和生命周期规则
      • 备份设置选项
      • 从aws中提供的模板进行选择,这些模板有已经配置好的规则,比如
      • 每日备份一次,保留35天
      • 每日,每月备份一次,保留一年
      • 每日,每周,每月备份一次,保留五年
      • 每日,每周,每月备份一次,保留七年
      • 其中期限和冷存储可以自由选择时间,也可以选择永久保存
    • 创建新计划,不使用模板
      • 自定义配置计划策略
        • 备份频率
          • 小时,日,周,月,自定义表达式等
        • 连续备份
          • 使用连续备份,可以通过选择还原时间(精确到秒)来执行时间点还原 (PITR)。最多可以将连续备份存储 35 天。
          • 结合备份频率,可以选择每天制作一个连续备份并设置保留期
        • 备份时间段 时间单位为UTC,北京时间需要加8小时
          • 包含备份的开始和持续时间,默认是从凌晨5点开始,持续8个小时,也可以自由选择备份时段
        • 冷存储
          • 只有保留期超过90天的才可以设置冷存储策略,冷存储适合存储访问频率低,对性能无要求的数据。存储的费用也更低
        • 保留期
          • 备份存储时长,到期后,aws会自动删除备份,最少保留一天,最多保留100年。备份周期以日,周,月,年为单位,也可以选择永久保存
    • 使用JSON配置备份计划
      • 使用json配置文件的形式生成备份计划,备份机制和上面的相同
        • 目前json的数据格式没找到文档,但aws提供了从其他备份计划中生成JSON的入口
// ruleName 规则名称
// scheduleExpression 计划表达式 cron(0 5/1 ? * * *) 在每小时的第 0 分钟, 每隔 1 小时, 在上午 05:00 UTC开始
// startWindowMinutes 开始备份时间 8小时后
// completionWindowMinutes 完成备份时间 7小时
// lifecycle 生命周期
// toDeletedAfterDays 多少天后删除
{
  "templateRules": [
    {
      "ruleName": "test_backup_no_schedule_rule_1",
      "scheduleExpression": "cron(0 5/1 ? * * *)",
      "startWindowMinutes": 480,
      "completionWindowMinutes": 10080,
      "lifecycle": {
        "toDeletedAfterDays": 1
        }
      }
  ]
}

Dynamodb备份

Dynamodb-cli备份
  • 备份机制
    • 和按需备份机制相同,只不过是使用aws的cli脚本来完成备份操作

    • aws本地环境依赖~/.aws/credentials路径的配置文件,默认为default

      aws dynamodb create-backup --table-name Music \
       --backup-name MusicBackup
      
按时间点备份
  • 备份机制
    • 时间点恢复以每秒的精细度自动备份表数据,它有助于保护 DynamoDB 表免遭意外写入或删除操作。使用时间点恢复,您不必担心创建、维护或计划按需备份。例如,假设测试脚本意外写入生产 DynamoDB 表中。使用时间点恢复,您可以将该表还原到最近 35 天中的任何时间点
    • 需要在aws所属表-备份-时间点恢复-编辑-开启
    • 还原的时间点最早为开启的时间节点。如果禁用了表再重新启动,则会重置这个表的启动时间
Dynamodb api备份
  • 备份机制
  • dynamodb api不支持冷存储,备份时长的设置
    • 默认不进行冷存储,备份时长为永久
  • 使用aws提供的npm工具包来完成对dynamodb的备份操作
    • 示例代码

      // aws 时间表达式文档 https://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/events/ScheduledEvents.html
      // serverless 定时器配置文档 https://www.serverless.com/framework/docs/providers/aws/events/schedule
      // 初始化aws云连接
      const AWS = require('aws-sdk');
      const dynamodb = new AWS.DynamoDB({
          accessKeyId: 'xxx',
          secretAccessKey: 'xxxx',
      });
      
      const method = async () => {
          // 创建备份
          const { BackupArn } = await dynamodb.createBackup({
              BackupName: 'shadow-status-table-local-202210141214',
              TableName: 'shadow-status-table-local'
          }).promise();
          // 删除备份
          await dynamodb.deleteBackup({
              BackupArn
          }).promise();
          // 备份还原
          await dynamodb.restoreTableFromBackup({
              TargetTableName: 'shadow-status-table-local-code',
              BackupArn
          }).promise();
          // 开启/禁用表时间点备份
          const enableTimeBackup = false;
          await dynamodb.updateContinuousBackups({
              PointInTimeRecoverySpecification: {
                  PointInTimeRecoveryEnabled: enableTimeBackup
              },
              TableName: 'shadow-status-table-local-code'
          }).promise();
      };
      method();
      

AWS 备份的最佳实践


网站公告

今日签到

点亮在社区的每一天
去签到