导出云备份快照
注意
此功能不适用于 M0
免费集群、 M2
和M5
集群。要详细了解哪些功能不可用,请参阅 Atlas M 0 (自由集群)、M 2和 M 5限制。
Atlas 允许您将云备份快照导出到 AWS S 3存储桶或 Azure Blob 存储容器。
要了解如何管理自动备份策略和计划,请参阅管理备份策略。
Atlas 如何导出快照
您可以手动导出单个快照,也可以设置导出策略来自动导出快照。对于自动导出,您必须在导出策略中指定频率:
每日
每周
每月
每年
Atlas 可自动导出频率类型与导出频率匹配的任何备份快照。导出的结果是该快照的完整备份。
例子
请考虑以下内容:
设立每周和每月快照计划的备份策略
设置每月导出频率的导出策略
假设在月底,每周和每月的快照发生在同一天。将有 4
个快照,其中 3
个是每周快照,第四个快照虽然被 Atlas 视为每周快照,但它也是每月快照,因为发生在同一天。Atlas 只会导出每月快照,因为导出频率与该快照的快照频率匹配。要同时导出每周快照,请将导出策略更新为同时导出每周快照。如果导出频率设置为每周,Atlas 将导出全部 4
个快照。
Atlas 一次导出一个集合的快照。随着导出的进行,您可能会在S 3存储桶或 Azure Blob 存储容器中看到部分结果。如果 Atlas 当前正在导出5或更多副本集,则 Atlas 会对任何新作业进行排队。对于分片集群,无论分片数量有多少,Atlas 都会同时导出所有分片的快照。
除了 AWS 或 Azure 本身产生的数据传输费用外,Atlas 还针对导出到$.125
AWS S3 存储桶或 Azure Blob 存储容器的每 GB 数据收取 的费用。 Atlas 会在导出之前压缩数据。要估算导出的数据量,请将集群中每个数据库的 dataSize 相加 。此总数应与导出的未压缩大小相对应,这将是 Atlas 因数据导出操作而产生的最大成本。
Atlas 上传的文件
当您执行以下操作时,Atlas 会将空文件上传到 /exported_snapshots/.permissioncheck
:
添加新的AWS S 3存储桶或 Azure Blob 存储容器以进行导出
开始导出
完成导出后,Atlas 会为每个集合上传名为 .complete
和 metadata.json
的元数据文件。
Atlas 会将名为.complete
的元数据文件上传到S 3存储桶的以下路径中:
/exported_snapshots/<orgUUID>/<projectUUID>/<clusterName>/<initiationDateOfSnapshot>/<timestamp>/
注意
默认情况下,Atlas 在元数据文件的路径中使用组织和项目 UUID。要使用组织和项目名称而不是 UUID,请通过useOrgAndGroupNamesInExportPrefix
true
API 将 标志设置为 。 Atlas 会将所有空格替换为下划线 (_
),并删除 可能需要特殊处理的所有字符 以及 要避免使用的字符 来自路径中的组织和项目名称。
.complete
元数据文件采用JSON格式,包含以下字段:
字段 | 说明 |
---|---|
orgId | 唯一的 24 位十六进制数字字符串,用于标识 Atlas 组织。 |
orgName | Atlas 组织的名称。 |
groupId | 唯一的 24 位十六进制数字字符串,用于标识 Atlas 组织中的项目。 |
groupName | Atlas 项目的名称。 |
clusterUniqueId | 用于标识 Atlas 集群的唯一的 24 位十六进制数字字符串。 |
clusterName | Atlas 项目的名称。 |
snapshotInitiationDate | 拍摄快照的日期。 |
totalFiles | 上传到S 3存储桶或 Azure Blob 存储容器的文件总数。 |
labels | 已导出快照的集群所具有的标签。 |
customData | 您在创建导出作业时指定的自定义数据(如果有)。 |
例子
{ "orgId": "60512d6f65e4047fe0842095", "orgName": "org1", "groupId": "60512dac65e4047fe084220f", "groupName": "group1", "clusterUniqueId": "60512dac65e4047fe0842212", "clusterName": "cluster0", "snapshotInitiationDate": "2020-04-03T05:50:29.321Z" "totalFiles": 23, "labels": [ { "key": "key1", "value": "xyz" }, { "key": "key2", "value": "xyzuio" } ], "customData": [ { "key": "key1", "value": "xyz" }, { "key": "key2", "value": "xyzuio" } ] }
Atlas 会将每个集合的metadata.json
文件上传到S 3存储桶的以下路径中:
/exported_snapshots/<orgUUID>/<projectUUID>/<clusterName>/<initiationDateOfSnapshot>/<timestamp>/<dbName>/<collectionName>/metadata.json
注意
默认情况下,Atlas 在元数据文件的路径中使用组织和项目 UUID。要使用组织和项目名称而不是 UUID,请通过useOrgAndGroupNamesInExportPrefix
API 将 标志设置为 true。 Atlas 会将所有空格替换为下划线 (_
),并删除所有 可能需要特殊处理的字符 以及 要避免使用的字符 来自路径中的组织和项目名称。
元数据文件为JSON格式,包含以下字段:
字段 | 说明 |
---|---|
collectionName | 用于标识集合的用户可读标签。 |
indexes | 集合上所有索引的列表,采用db.collection.getIndexes命令返回的格式。 |
options | 在集合上定义的配置选项。要了解有关选项的更多信息,请参阅db.createCollection()命令。 |
type | 集合类型。值可以是以下之一:
标准集合不会返回此字段。 |
uuid | 集合的 UUID。要了解有关 UUID 的更多信息,请参阅UUID。 |
例子
{ "options":{ "viewOn":"othercol", "pipeline":[{"$project":{"namez":"$name"}}] }, "indexes":[], "collectionName":"viewcol", "type":"view" }
{ "options":{ "timeseries":{ "timeField":"timestamp", "granularity":"seconds", "bucketMaxSpanSeconds":{"$numberInt":"3600"} } }, "indexes":[], "collectionName":"timeseriescol", "type":"timeseries" }
{ "indexes": [ { "v":{"$numberInt":"2"}, "key":{ "_id":{"$numberInt":"1"} }, "name":"_id_" } ], "uuid":"342c40a937c34c478bab03de8ce44f3e", "collectionName":"somecol" }
如果导出作业失败:
Atlas 不会自动尝试再次导出。
Atlas 不会删除S 3存储桶或 Azure Blob 存储容器中的任何部分数据。
导出的数据格式
Atlas 将数据库内容以.json.gz
格式上传到S 3或 Azure Blob 存储,其中包含扩展JSON格式的文档。以下是S 3或 Azure Blob 存储上的文件路径:
/exported_snapshots/<orgName>/<projectName>/<clusterName>/<initiationDateOfSnapshot>/<timestamp>/<dbName>/<collectionName>/<shardName>.<increment>.json.gz
其中:
<orgName> | 您的 Atlas 组织的名称。 |
<projectName> | 您的 Atlas 项目的名称。 |
<clusterName> | 您的 Atlas 集群的名称。 |
<initiationDateOfSnapshot> | 拍摄快照的日期。 |
<timestamp> | 创建导出作业时的时间戳。 |
<dbName> | Atlas 集群中数据库的名称。 |
<collectionName> | Atlas 集合的名称。 |
<shardName> | 副本集名称。 |
<increment> | 上传数据段时递增的计数。从 0 开始。 |
限制
适用以下限制:
您只能导出当前支持的 MongoDB 版本的快照,但无论哪个版本,您始终可以下载已保存的快照。
无法导出回退快照。
每个快照只能有一个活动导出。
重要
当您将快照从分片集群导出到S 3存储桶或 Azure Blob 存储容器时,每个分片的导出时间戳可能不同。这可能会导致各分片出现重复或不一致的数据。
必需的访问权限
要管理云备份快照,您必须拥有项目的 Project Owner
访问权限。拥有 Organization Owner
访问权限的用户必须将自己添加为该项目的 Project
Owner
,然后才能管理云备份快照。
先决条件
要导出云备份快照,您需要一个启用了云备份的M10
或更高版本的 Atlas 集群。此外,要导出到AWS S 3存储桶或 Azure Blob 存储容器,您必须执行以下操作:
配置 AWS IAM 角色
STS:AssumeRole
,授予 Atlas 访问您的 AWS 资源的权限。要了解有关为 Atlas 配置 AWS 访问权限的更多信息,请参阅 设置统一 AWS 访问权限。配置 AWS IAM 角色策略 授予 Atlas
S3:PutObject
S3:GetBucketLocation
对 AWS 资源的写入权限或 和 权限。要了解有关配置 AWS 资源写访问权限的更多信息,请参阅 设置统一 AWS 访问权限。例子
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetBucketLocation", "Resource": "arn:aws:s3:::bucket-name" }, { "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::bucket-name/*" } ] }
使用 Atlas 项目 的访问策略 设置 Azure 服务主体。
将 存储 Blob 委托者和 存储 Blob 数据贡献者 角色分配给 Azure 服务主体。
要将角色分配给服务主体,您需要以下信息:
角色说明存储 Blob 委托器这允许服务主体签署 SAS 令牌以访问Azure存储容器。要分配此角色,请运行以下命令:
az role assignment create --assignee-object-id <service-principal-id> --role "Storage Blob Delegator" --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-account-name> 存储 Blob 数据贡献者这允许对Azure存储容器进行读取、写入和删除 blob 访问。要分配此角色,请运行以下命令:
az role assignment create --assignee-principal-type ServicePrincipal --assignee-object-id <service-principal-id> --role "Storage Blob Data Contributor" --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-account-name>/blobServices/default/containers/<container-name>
导出管理
您可以创建和管理从 Atlas CLI 和 Atlas Administration API 导出到AWS S 3存储桶的快照,或从 Atlas Administration API 导出到 Azure Blob 存储容器的快照。
注意
无法使用 Atlas CLI 将快照导出到 Azure Blob 存储容器。
管理导出任务
您可以使用 Atlas CLI 来管理导出作业(如创建或查看导出作业)。
创建导出作业
要使用 Atlas CLI 将 M 10或更高的 Atlas 集群的一个备份快照导出到现有 AWS S 3存储桶,请运行以下命令:
atlas backups exports jobs create [options]
要使用 Atlas CLI 监视特定备份导出作业的完成情况,请运行以下命令:
atlas backups exports jobs watch <exportJobId> [options]
要了解前面命令的语法和参数的更多信息,请参阅 Atlas CLI 文档中的 atlas backups exports jobs create 和 atlas backups exports jobs watch。
查看导出作业
要使用 Atlas CLI 列出指定项目的云备份恢复作业,请运行以下命令:
atlas backups exports jobs list <clusterName> [options]
要使用 Atlas CLI 返回指定的云备份恢复作业的详细信息,请运行以下命令:
atlas backups exports jobs describe [options]
要了解有关上述命令的语法和参数的更多信息,请参阅 Atlas CLI 文档中的atlas backups exportsjobs list和atlas backups exportsjobs describe。
管理导出存储桶
您可以使用 Atlas CLI 来管理导出存储桶(如创建、查看或删除导出存储桶)。
创建一个导出桶
要使用 Atlas CLI 通过现有 AWS S3 存储桶为 Atlas 备份创建导出目标,请运行以下命令:
atlas backups exports buckets create <bucketName> [options]
要了解有关命令语法和参数的更多信息,请参阅 Atlas CLI 文档中的 atlas backups exports buckets create。
查看导出存储桶
要使用 Atlas CLI 列出指定项目的云备份恢复存储桶,请运行以下命令:
atlas backups exports buckets list [options]
要使用 Atlas CLI 返回指定的云备份恢复存储桶的详细信息,请运行以下命令:
atlas backups exports buckets describe [options]
要了解前面命令的语法和参数的更多信息,请参阅 Atlas CLI 文档中的 atlas backups exports buckets list 和 atlas backups exports buckets describe。
删除导出存储桶
要使用 Atlas CLI 删除 Atlas 备份的导出目标,请运行以下命令:
atlas backups exports buckets delete [options]
要了解有关命令语法和参数的更多信息,请参阅 Atlas CLI 文档中的 atlas backups exports buckets delete。
要授予和管理云提供商访问权限以及创建和管理快照导出作业,您使用的API必须具有Project Owner
角色。
管理导出存储桶
使用以下内容管理导出存储桶或容器。
创建一个导出桶
要授予AWS S 3存储桶或 Azure Blob 存储容器的访问权限以导出快照,请向云备份资源端点发送POST
请求。这使AWS S 3存储桶或 Azure Blob 存储容器能够接收 Atlas 云备份快照。在发送授予访问权限的请求时,您必须提供以下信息:
唯一的24十六进制字符串,用于标识 Atlas 访问AWS S 3存储桶时必须使用的统一 AWS 访问角色 ID。要了解更多信息,请参阅设置统一 AWS 访问。
唯一的24十六进制字符串,用于标识 Atlas 访问 Azure Blob 存储必须使用的Azure服务主体。要了解更多信息,请参阅设置和管理 Azure 服务主体访问权限。
Azure Blob 存储帐户的服务端点。要了解详情,请参阅 Azure 文档。
UUID 字符串,用于标识 Microsoft Entra 租户 ID。要了解更多信息,请参阅 Microsoft Entra 文档。
列出所有导出存储桶
要检索 Atlas 将快照导出到的所有AWS S 3存储桶和 Azure Blob 存储容器,请向云备份资源端点发送GET
请求。
删除一个导出存储桶
要删除导出存储桶,必须首先为项目中的所有集群禁用将快照自动导出到AWS S 3存储桶或 Azure Blob 存储容器的功能,然后向云备份资源端点发送DELETE
请求,ID 为的导出存储桶。如有必要,向端点发送GET
请求以检索导出存储桶 ID。
管理导出任务
使用以下内容管理导出作业。
创建快照导出作业
要将一个 Atlas 备份快照导出到AWS S 3存储桶或 Azure Blob 存储容器,请向云备份资源端点发送POST
请求,其中包含要导出的快照的 ID 以及AWS S 3存储桶或 Azure Blob 存储容器。