Docs 菜单
Docs 主页
/
MongoDB 阿特拉斯
/

导出云备份快照

在此页面上

  • Atlas 如何导出快照
  • 导出的数据格式
  • 限制
  • 必需的访问权限
  • 先决条件
  • 导出管理

注意

此功能不适用于 M0免费集群、 M2M5集群。要详细了解哪些功能不可用,请参阅 Atlas M 0 (自由集群)、M 2和 M 5限制。

Atlas 允许您将云备份快照导出到 AWS S 3存储桶或 Azure Blob 存储容器。

要了解如何管理自动备份策略和计划,请参阅管理备份策略

您可以手动导出单个快照,也可以设置导出策略来自动导出快照。对于自动导出,您必须在导出策略中指定频率:

  • 每日

  • 每周

  • 每月

  • 每年

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 会将空文件上传到 /exported_snapshots/.permissioncheck

  • 添加新的AWS S 3存储桶或 Azure Blob 存储容器以进行导出

  • 开始导出

完成导出后,Atlas 会为每个集合上传名为 .completemetadata.json 的元数据文件。

Atlas 会将名为.complete的元数据文件上传到S 3存储桶的以下路径中:

/exported_snapshots/<orgUUID>/<projectUUID>/<clusterName>/<initiationDateOfSnapshot>/<timestamp>/

注意

默认情况下,Atlas 在元数据文件的路径中使用组织和项目 UUID。要使用组织和项目名称而不是 UUID,请通过useOrgAndGroupNamesInExportPrefix trueAPI 将 标志设置为 。 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

集合类型。值可以是以下之一:

  • view - 用于集合视图

  • timeseries - 用于时间序列集合

标准集合不会返回此字段。

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 开始。

适用以下限制:

重要

当您将快照从分片集群导出到S 3存储桶或 Azure Blob 存储容器时,每个分片的导出时间戳可能不同。这可能会导致各分片出现重复或不一致的数据。

要管理云备份快照,您必须拥有项目的 Project Owner 访问权限。拥有 Organization Owner 访问权限的用户必须将自己添加为该项目的 Project Owner,然后才能管理云备份快照。

要导出云备份快照,您需要一个启用了云备份的M10或更高版本的 Atlas 集群。此外,要导出到AWS S 3存储桶或 Azure Blob 存储容器,您必须执行以下操作:

  1. 配置 AWS IAM 角色 STS:AssumeRole,授予 Atlas 访问您的 AWS 资源的权限。要了解有关为 Atlas 配置 AWS 访问权限的更多信息,请参阅 设置统一 AWS 访问权限。

  2. 配置 AWS IAM 角色策略 授予 AtlasS3: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/*"
    }
    ]
    }
  1. 使用 Atlas 项目 的访问策略 设置 Azure 服务主体。

  2. 存储 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 createatlas 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 listatlas 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 listatlas 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 访问。

要检索 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 存储容器。

要按 ID 检索一个快照导出作业,请向云备份资源端点发送GET请求,并附带导出作业的 ID。

要检索所有正在运行的快照导出作业,请向云备份资源端点发送GET请求。

后退

使用静态加密进行恢复

来年

恢复资源