Docs 菜单
Docs 主页
/
MongoDB Atlas
/

导出云备份快照

在此页面上

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

注意

此功能不适用于M0 免费集群和 Flex 集群。要详细学习;了解哪些功能不可用,请参阅 Atlas M0 (免费集群)、M2 和 M5 限制。

Atlas允许您将云备份快照导出到对象存储服务。

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

Atlas目前支持以下对象存储服务:

  • AWS S3 存储桶

  • Azure Blob 存储

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

  • 每日

  • 每周

  • 每月

  • 每年

Atlas 可自动导出频率类型与导出频率匹配的任何备份快照。导出的结果是该快照的完整备份。

例子

请考虑以下内容:

  • 设立每周和每月快照计划的备份策略

  • 设置每月导出频率的导出策略

假设在月底,每周和每月的快照发生在同一天。将有 4 个快照,其中 3 个是每周快照,第四个快照虽然被 Atlas 视为每周快照,但它也是每月快照,因为发生在同一天。Atlas 只会导出每月快照,因为导出频率与该快照的快照频率匹配。要同时导出每周快照,请将导出策略更新为同时导出每周快照。如果导出频率设置为每周,Atlas 将导出全部 4 个快照。

随着导出的进行,您可能会在对象存储服务中看到部分结果。

无论 生存时间 (Time to Live) 设置如何, Atlas都会将文档保留在快照中。您可以在超过“生存时间”截止时间后的快照中访问权限这些文档。

除了 AWS 或Azure本身产生的数据传输费用外, Atlas还针对导出到$.125 AWS S3 存储桶或Azure Blob 存储容器的每GB数据收取 的费用。 Atlas会在导出之前压缩数据。要估计导出的数据量,请将集群中每个数据库的 dataSize 相加。此总数应与导出的未压缩大小相对应,这将是Atlas因数据导出操作而产生的最大费用。

当您执行以下操作时,Atlas 会将空文件上传到 /exported_snapshots/.permissioncheck

  • 添加用于导出的新对象存储

  • 开始导出

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

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

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

注意

默认情况下,Atlas 会在元数据文件的路径中使用组织和项目 UUID。要使用组织和项目名称而不是 UUID,请通过 APIuseOrgAndGroupNamesInExportPrefix 标志设置为 true。Atlas 会使用下划线 (_) 替换所有空格,并从路径中的组织和项目名称中删除任何可能需要特殊处理的字符 应避免使用的字符

.complete 元数据文件采用 JSON 格式,包含以下字段:

字段
说明

orgId

唯一的 24 位十六进制数字字符串,用于标识 Atlas 组织。

orgName

Atlas 组织的名称。

groupId

唯一的 24 位十六进制数字字符串,用于标识 Atlas 组织中的项目。

groupName

Atlas 项目的名称。

clusterUniqueId

用于标识 Atlas 集群的唯一的 24 位十六进制数字字符串。

clusterName

Atlas 项目的名称。

snapshotInitiationDate

拍摄快照的日期。

totalFiles

上传到对象存储的文件总数。

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文件上传到对象存储的以下路径中:

/exported_snapshots/<orgUUID>/<projectUUID>/<clusterName>/<initiationDateOfSnapshot>/<timestamp>/<dbName>/<collectionName>/metadata.json

注意

默认情况下,Atlas 会在元数据文件的路径中使用组织和项目 UUID。要使用组织和项目名称而不是 UUID,请通过 APIuseOrgAndGroupNamesInExportPrefix 标志设置为 true。Atlas 会用下划线 (_) 替换所有空格,并从路径中的组织和项目名称中删除任何可能需要特殊处理的字符应避免使用的字符

元数据文件采用 JSON 格式,包含以下字段:

字段
说明

collectionName

用于标识集合的用户可读标签。

indexes

db.collection.getIndexes 命令返回的格式列出集合上的所有索引。

options

在集合上定义的配置选项。要了解有关选项的更多信息,请参阅 db.createCollection() 命令。

type

(可选)集合类型。仅时间序列集合支持此字段,其值为 timeseries。对于标准集合,请将此字段保留为未设置。

Atlas不支持导出 view 类型集合。

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不会删除对象存储中的任何部分数据。

Atlas上传gzip 压缩的扩展JSON2 (v) 文档。 Atlas不会按顺序上传这些文档。以下是对象存储上文件的路径:

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

您无法执行以下操作:

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

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

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

  2. 配置 AWS IAM 角色策略,为您的 AWS 资源授予 Atlas 写入权限或 S3:PutObjectS3:GetBucketLocation 权限。要了解有关配置 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. Storage Blob DelegatorStorage Blob Data Contributor 角色分配给 Azure 服务主体。

    要为您的服务主体分配角色,您需要以下信息:

    角色
    说明

    Storage Blob Delegator

    这允许服务主体签署 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>

    Storage Blob Data Contributor

    这允许对 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 S3 存储桶的快照,或创建和管理从 Atlas Administration API 导出到 Azure Blob 存储容器的快照。

注意

您无法使用 Atlas CLI 将快照导出到 Azure Blob Storage 容器。

您可以使用 Atlas CLI 来管理导出作业(如创建或查看导出作业)。

要使用 Atlas CLI 将 M10 或更高版本的 Atlas 集群的一个备份快照导出到现有 AWS S3 存储桶,请运行以下命令:

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 backups exports jobs listatlas backups exports jobs describe 的 Atlas CLI 文档。

提示

请参阅:相关链接

您可以使用 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 S3 存储桶或 Azure Blob 存储容器以导出快照的访问权限,请向云备份资源端点发送 POST 请求。这让 AWS S3 存储桶或 Azure Blob 存储容器能够接收 Atlas 云备份快照。在发送请求以授予访问权限时,您必须提供以下信息:

  • 唯一的 24 位十六进制字符串,用于标识 Atlas 必须使用该字符串来访问 AWS S3 存储桶的统一 AWS 访问角色 ID。要了解更多信息,请参阅设置统一的 AWS 访问权限。

要检索 Atlas 向其导出快照的所有 AWS S3 存储桶和 Azure Blob 存储容器,请向云备份资源端点发送 GET 请求。

要删除导出存储桶,您必须首先禁用将快照自动导出到项目中所有集群的 AWS S3 存储桶或 Azure Blob 存储容器,然后使用导出存储桶的 ID 向云备份资源端点发送 DELETE 请求。如有必要,向端点发送 GET请求,检索导出存储桶 ID。

使用以下方法管理导出作业。

要将一个 Atlas 备份快照导出到 AWS S3 存储桶或 Azure Blob 存储容器,请向云备份资源端点发送一个 POST 请求,其中包含要导出的快照的 ID 以及 AWS S3 存储桶或 Azure Blob 存储容器的 ID。

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

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

后退

使用静态加密进行恢复