基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
发起租户级备份
更新时间:2025-09-10 19:10:45
obshell 发起 OceanBase 数据库的租户级备份支持两种方式:
通过调用 API 发起备份
通过 obshell 命令发起备份
本文将以一个 3 副本的 OceanBase 集群为例,介绍如何通过 obshell 发起租户级备份。
前提条件
OceanBase 集群已被 obshell 运维管理,详细的判断方法及接管操作可参见 接管非 obshell 部署集群。
OceanBase 集群的所有 OBServer 节点和 obshell 都正常运行。
部署模式
本文中三台机器的使用情况如下(obshell 使用默认端口 2886):
| 角色 | 机器 | 备注 |
|---|---|---|
| OBServer 节点 | 10.10.10.1 | OceanBase 数据库 zone1 |
| OBServer 节点 | 10.10.10.2 | OceanBase 数据库 zone2 |
| OBServer 节点 | 10.10.10.3 | OceanBase 数据库 zone3 |
通过 API 备份
说明
obshell 会对被调用的 API 进行安全校验。因此,您在每次调用 API 之前都需先参考 API 混合加密 一文对请求进行加密,并在 curl 命令中配置加密后的请求头部(${request_headers})和请求体(${request_body})。
步骤 1:(可选)设置租户级备份配置
调用任一 obshell 的 /api/v1/tenant/:name/backup/config 接口可以进行租户级备份配置。
说明
若之前已配置过租户级备份,则不需要多次调用该接口。
命令行中调用对应 API 接口的说明可参见 设置单个租户的备份配置。该接口会创建一个异步任务,查看任务进度的方法可参见 获取任务的详细信息。等待任务完成,则配置完成。
[admin@test001 ~]$ curl -H "Content-Type: application/json" -H 'X-OCS-Header:${request_headers}' -X POST -d '${request_body}' http://10.10.10.1:2886/api/v1/tenant/tenant1/backup/config
加密前的请求体内容如下:
{
"data_base_uri":"file:///data/backup/tenant/data",
"archive_base_uri":"file:///data/backup/tenant/archive",
"log_archive_concurrency":50,
"ha_low_thread_score":18,
"piece_switch_interval":"3d",
"archive_lag_target":"1h",
"delete_policy":{
"policy":"",
"recovery_window":"2d"
}
}
通过 obshell-sdk-python 请求对应 API 方法的介绍可参见 设置单个租户的备份配置。
...
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.post_tenant_backup_config_sync(
"file:///data/backup/tenant/data",
"file:///data/backup/tenant/archive",
log_archive_concurrency=100,
)
...
通过 obshell-sdk-go 请求对应 API 方法的介绍可参见 设置单个租户的备份配置。
...
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
request := client.V1().NewTenantBackupConfigPostRequest("tenant1", "file:///data/backup/data", "file:///data/backup/archive")
request.SetLogArchiveConcurrency(100)
dag, err := client.V1().TenantBackupConfigSyncWithRequest(request)
...
步骤 2:发起租户级备份
调用任一 obshell 的 /api/v1/tenant/:name/backup 接口可以发起租户级备份。
命令行中调用对应 API 接口的说明可参见 发起单个租户备份。该接口会创建一个异步任务,查看任务进度的方法可参见 获取任务的详细信息。等待任务完成,则备份结束。
[admin@test001 ~]$ curl -H "Content-Type: application/json" -H 'X-OCS-Header:${request_headers}' -X POST -d '${request_body}' http://10.10.10.1:2886/api/v1/tenant/tenant1/backup
加密前的请求体内容如下:
{
"mode":"full"
}
通过 obshell-sdk-python 请求对应 API 方法的介绍可参见 发起单个租户备份。
...
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.start_tenant_backup_sync("tenant1", "full")
...
通过 obshell-sdk-go 请求对应 API 方法的介绍可参见 发起单个租户备份。
...
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
request := client.V1().NewTenantBackupRequest("tenant1")
request.SetBackupMode("full")
dag, err := client.V1().TenantBackupSyncWithRequest(request)
...
步骤 3:查看租户级备份任务
调用任一 obshell 的 /api/v1/tenant/:name/backup/overview 接口可以查看租户级备份任务。
命令行中调用对应 API 接口的说明可参见 查看单个租户备份任务。
[admin@test001 ~]$ curl
-H "Content-Type: application/json"
-X GET
http://10.10.10.1:2886/api/v1/tenant/tenant1/backup/overview
通过 obshell-sdk-python 请求对应 API 方法的介绍可参见 查看单个租户备份任务。
...
client = ClientSet("10.10.10.1", 2886, PasswordAuth("****"))
client.v1.get_tenant_backup_overview("tenant1")
...
通过 obshell-sdk-go 请求对应 API 方法的介绍可参见 查看单个租户备份任务。
...
client, err := services.NewClientWithPassword("10.10.10.1", 2886, "****")
res, err := client.V1().GetTenantBackupOverview("tenant1")
...
通过 obshell 命令备份
步骤 1:执行备份
在任一节点调用 obshell tenant backup 命令,即可完成备份配置并触发一次备份。命令详见 obshell 租户命令组 中 obshell tenant backup 部分介绍。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell tenant backup tenant1 -a 'file:///data/backup/archive' -d 'file:///data/backup/data'
步骤 2:查询备份信息
所用命令的详细介绍可参见 obshell 备份命令组 中 obshell backup show 部分。
[admin@test001 ~]$ /home/admin/oceanbase/bin/obshell backup show -t tenant1