title | summary | aliases | |||||
---|---|---|---|---|---|---|---|
备份存储 |
了解 BR 支持的备份存储服务的 URI 格式、鉴权方案和使用方式。 |
|
TiDB 支持 Amazon S3、Google Cloud Storage (GCS)、Azure Blob Storage 和 NFS 作为备份恢复的存储。具体来说,可以在 br
的 --storage
或 -s
选项中指定备份存储的 URI。本文介绍不同外部存储服务中 URI 的定义格式、存储过程中的鉴权方案以及存储服务端加密。
命令行参数 | 描述 | 默认值 |
---|---|---|
--send-credentials-to-tikv |
是否将 BR 获取到的权限凭证发送给 TiKV。 | true |
在默认情况下,使用 Amazon S3、Google Cloud Storage (GCS)、Azure Blob Storage 存储时,BR 会将凭证发送到每个 TiKV 节点,以减少设置的复杂性。该操作由参数 --send-credentials-to-tikv
(或简写为 -c
)控制。
但是,这个操作不适合云端环境,如果采用了 IAM Role 方式授权,那么每个节点都有自己的角色和权限。在这种情况下,你需要设置 --send-credentials-to-tikv=false
(或简写为 -c=0
)来禁止发送凭证:
./br backup full -c=0 -u pd-service:2379 --storage 's3://bucket-name/prefix'
使用 SQL 进行备份恢复时,可加上 SEND_CREDENTIALS_TO_TIKV = FALSE
选项:
BACKUP DATABASE * TO 's3://bucket-name/prefix' SEND_CREDENTIALS_TO_TIKV = FALSE;
本部分介绍存储服务的 URI 格式:
[scheme]://[host]/[path]?[parameters]
-
scheme
:s3
-
host
:bucket name
-
parameters
:access-key
:访问密钥secret-access-key
:秘密访问密钥session-token
:会话令牌use-accelerate-endpoint
:是否在 Amazon S3 上使用加速端点,默认为false
endpoint
:Amazon S3 兼容服务自定义端点的 URL,例如<https://s3.example.com/>
force-path-style
:使用路径类型 (path-style),而不是虚拟托管类型 (virtual-hosted-style),默认为true
storage-class
:上传对象的存储类别,例如STANDARD
、STANDARD_IA
sse
:加密上传的服务端加密算法,可以设置为空、AES256
或aws:kms
sse-kms-key-id
:如果sse
设置为aws:kms
,则使用该参数指定 KMS IDacl
:上传对象的标准 ACL (Canned ACL),例如private
、authenticated-read
role-arn
:当需要使用特定的 IAM 角色来访问第三方 Amazon S3 的数据时,使用这个参数来指定 IAM 角色的对应 Amazon Resource Name (ARN)(例如arn:aws:iam::888888888888:role/my-role
)。关于使用 IAM 角色访问第三方 Amazon S3 数据的场景,请参考 AWS 相关文档介绍。external-id
:当需要使用特定的 IAM 角色来访问第三方 Amazon S3 的数据时,可能需要同时提供正确的外部 ID 来确保用户有权限代入该 IAM 角色。这个参数用来指定对应的外部 ID,确保成功代入 IAM 角色。外部 ID 可以是任意字符串,并且不是必须的,一般由控制 Amazon S3 数据访问的第三方来指定。如果第三方对于 IAM 角色没有要求指定外部 ID,则可以不需要提供该参数也能顺利代入对应的 IAM 角色,从而访问对应的 Amazon S3 数据。
-
scheme
:gcs
或gs
-
host
:bucket name
-
parameters
:credentials-file
:迁移工具节点上凭证 JSON 文件的路径storage-class
:上传对象的存储类别,例如STANDARD
或COLDLINE
predefined-acl
:上传对象的预定义 ACL,例如private
或project-private
-
scheme
:azure
或azblob
-
host
:container name
-
parameters
:account-name
:存储账户名account-key
:访问密钥sas-token
:共享访问签名令牌access-tier
:上传对象的存储类别,例如Hot
、Cool
、Archive
,默认值为该存储账户的默认访问层。
本部分示例以 host
(上表中 bucket name
、container name
)为 external
为例进行介绍。
备份快照数据到 Amazon S3
./br backup full -u "${PD_IP}:2379" \
--storage "s3://external/backup-20220915?access-key=${access-key}&secret-access-key=${secret-access-key}"
从 Amazon S3 恢复快照备份数据
./br restore full -u "${PD_IP}:2379" \
--storage "s3://external/backup-20220915?access-key=${access-key}&secret-access-key=${secret-access-key}"
备份快照数据到 GCS
./br backup full --pd "${PD_IP}:2379" \
--storage "gcs://external/backup-20220915?credentials-file=${credentials-file-path}"
从 GCS 恢复快照备份数据
./br restore full --pd "${PD_IP}:2379" \
--storage "gcs://external/backup-20220915?credentials-file=${credentials-file-path}"
备份快照数据到 Azure Blob Storage
./br backup full -u "${PD_IP}:2379" \
--storage "azure://external/backup-20220915?account-name=${account-name}&account-key=${account-key}"
从 Azure Blob Storage 恢复快照备份数据中 test
数据库
./br restore db --db test -u "${PD_IP}:2379" \
--storage "azure://external/backup-20220915account-name=${account-name}&account-key=${account-key}"
将数据存储到云服务存储系统时,根据云服务供应商的不同,需要设置不同的鉴权参数。本部分介绍使用 Amazon S3、GCS 及 Azure Blob Storage 时所用存储服务的鉴权方式以及如何配置访问相应存储服务的账户。
在备份之前,需要为 br 命令行工具访问 Amazon S3 中的备份目录设置相应的访问权限:
- 备份时 TiKV 和 br 命令行工具需要的访问备份数据目录的最小权限:
s3:ListBucket
、s3:PutObject
和s3:AbortMultipartUpload
。 - 恢复时 TiKV 和 br 命令行工具需要的访问备份数据目录的最小权限:
s3:ListBucket
、s3:GetObject
和s3:PutObject
。br 命令行工具会将断点信息写到备份数据目录下的./checkpoints
子目录。在恢复日志备份数据时,br 命令行工具会将备份恢复集群的表 ID 映射关系写到备份数据目录下的./pitr_id_maps
子目录。
如果你还没有创建备份数据保存目录,可以参考创建存储桶在指定的区域中创建一个 S3 存储桶。如果需要使用文件夹,可以参考使用文件夹在 Amazon S3 控制台中组织对象在存储桶中创建一个文件夹。
配置访问 Amazon S3 的账户可以通过以下两种方式:
-
方式一:指定访问密钥
如果指定访问密钥和秘密访问密钥,将按照指定的访问密钥和秘密访问密钥进行鉴权。除了在 URI 中指定密钥外,还支持以下方式:
- br 命令行工具读取
$AWS_ACCESS_KEY_ID
和$AWS_SECRET_ACCESS_KEY
环境变量 - br 命令行工具读取
$AWS_ACCESS_KEY
和$AWS_SECRET_KEY
环境变量 - br 命令行工具读取共享凭证文件,路径由
$AWS_SHARED_CREDENTIALS_FILE
环境变量指定 - br 命令行工具读取共享凭证文件,路径为
~/.aws/credentials
- br 命令行工具读取
-
方式二:基于 IAM Role 进行访问
为运行 TiKV 和 br 命令行工具的 EC2 实例关联一个配置了访问 S3 访问权限的 IAM role。正确设置后,br 命令行工具可以直接访问对应的 S3 中的备份目录,而不需要额外的设置。
br backup full --pd "${PD_IP}:2379" \ --storage "s3://${host}/${path}"
配置访问 GCS 的账户可以通过指定访问密钥的方式。如果指定了 credentials-file
参数,将按照指定的 credentials-file
进行鉴权。除了在 URI 中指定密钥文件外,还支持以下方式:
- br 命令行工具读取位于
$GOOGLE_APPLICATION_CREDENTIALS
环境变量所指定路径的文件内容 - br 命令行工具读取位于
~/.config/gcloud/application_default_credentials.json
的文件内容 - 在 GCE 或 GAE 中运行时,从元数据服务器中获取的凭证
-
方式一:指定共享访问签名
在 URI 中配置
account-name
和sas-token
,则使用该参数指定的存储账户名和共享访问签名令牌。由于共享访问签名令牌中带有&
的字符,需要将其编码为%26
后再添加到 URI 中。你也可以直接对整个sas-token
进行一次百分号编码。 -
方式二:指定访问密钥
在 URI 中配置
account-name
和account-key
,则使用该参数指定的存储账户名和密钥。除了在 URI 中指定密钥文件外,还支持 br 命令行工具读取$AZURE_STORAGE_KEY
的方式。 -
方式三:使用 Azure AD 备份恢复
在 br 命令行工具运行环境配置环境变量
$AZURE_CLIENT_ID
、$AZURE_TENANT_ID
和$AZURE_CLIENT_SECRET
。-
当集群使用 TiUP 启动时,TiKV 会使用 systemd 服务。以下示例介绍如何为 TiKV 配置上述三个环境变量:
注意:
该流程在第 3 步中需要重启 TiKV。如果你的集群不适合重启,请使用指定访问密钥的方式进行备份恢复。
-
假设该节点上 TiKV 端口为
24000
,即 systemd 服务名为tikv-24000
:systemctl edit tikv-24000
-
编辑三个环境变量的信息:
[Service] Environment="AZURE_CLIENT_ID=aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" Environment="AZURE_TENANT_ID=aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" Environment="AZURE_CLIENT_SECRET=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
-
重新加载配置并重启 TiKV:
systemctl daemon-reload systemctl restart tikv-24000
-
-
为命令行启动的 TiKV 和 br 命令行工具配置 Azure AD 的信息,只需要确定运行环境中存在
$AZURE_CLIENT_ID
、$AZURE_TENANT_ID
和$AZURE_CLIENT_SECRET
。通过运行下列命令行,可以确认 br 命令行工具和 TiKV 运行环境中是否存在这三个环境变量:echo $AZURE_CLIENT_ID echo $AZURE_TENANT_ID echo $AZURE_CLIENT_SECRET
-
使用 br 命令行工具将数据备份至 Azure Blob Storage:
./br backup full -u "${PD_IP}:2379" \ --storage "azure://external/backup-20220915?account-name=${account-name}"
-
TiDB 备份恢复功能支持对备份到 Amazon S3 的数据进行 S3 服务端加密 (SSE)。S3 服务端加密也支持使用用户自行创建的 AWS KMS 密钥,详细信息请参考 BR S3 服务端加密。
TiDB 备份恢复功能从 v6.3.0 支持 AWS S3 Object Lock 功能。你可以在 AWS 中开启 S3 Object Lock 功能来防止备份数据写入后被修改或者删除。