ㅤㅤㅤ
ㅤㅤㅤ
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ(成功的唯一秘诀——坚持最终一分钟。——柏拉图)
ㅤㅤㅤ
ㅤㅤㅤ
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ
备份的作用
- 保证数据安全与完整
- 为了保证数据在被人为失误、操作不当、蓄意等情况下删除或损坏后,能及时、有效的进行恢复并不会很大程度上影响到业务运行。
- 为业务提供不间断服务
○ 实际生产环境对数据库的要求,首先就是具备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的入口
- 使用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();