
# 通过OBS协议备份恢复Doris业务数据
#### 应用场景
为了确保Doris数据安全，避免因表目录或文件损坏导致集群不可用，或在执行表迁移等重大操作时，需备份数据。从而保证系统在出现异常或未达到预期结果时可以及时恢复数据，对业务的影响降到最低。
操作流程：
- [步骤一：创建OBS文件系统并获取AK/SK]
- [步骤二：备份Doris集群数据]
- [步骤三：恢复Doris集群数据]
 
#### 约束限制
- 该操作仅适用于Doris 2.0.5以上引擎版本。
- 该操作仅适用于Doris存算一体集群。
- 备份恢复目前只允许拥有admin权限的用户执行。
- 一个数据库中只允许有一个正在执行的备份作业。
 
#### 准备工作
- 已注册华为账号并开通华为云，具体请参见[注册华为账号并开通华为云](https://support.huaweicloud.com/usermanual-account/account_id_001.html)，且在使用CloudTable前检查账号状态，账号不能处于欠费或冻结状态。
- 已创建虚拟私有云和子网，参见创建[虚拟私有云和子网](https://support.huaweicloud.com/usermanual-vpc/zh-cn_topic_0013935842.html)。
- 已创建Doris集群，并正常运行。
- Doris集群已安装MySQL客户端，具体请参见[安装MySQL客户端](https://support.huaweicloud.com/usermanual-cloudtable/cloudtable_01_0228.html#section1)。
 
 #### 步骤一：创建OBS文件系统并获取AK/SK
**创建OBS并行文件系统**
1. 登录[对象存储服务控制台](https://console.huaweicloud.com/console/?locale=zh-cn#/obs/manager/buckets)。
2. 选择左侧导航栏"并行文件系统"，进入并行文件系统管理页面。
3. 单击页面右上角"创建并行文件系统"，进入创建页面。
4. 配置"基础配置"、"并行文件系统配置"、"功能配置"，确认参数无误，单击"立即创建"。具体请参见[创建并行文件系统](https://support.huaweicloud.com/usermanual-obs/obs_13_0002.html)章节。
   - 企业项目需要和Doris集群保持一致。
   
   - 如果设置私有桶，请在权限控制中[创建访问策略](https://support.huaweicloud.com/browsertg-obs/obs_03_1049.html)。
    
5. 在并行文件系统列表中单击新建的并行文件系统名称，单击"概览"，查看并记录"Endpoint"信息。
**获取AK/SK**
6. 将鼠标移到右上角登录用户名处，在下拉列表中选择"我的凭证"。
7. 在"API凭证"中，记录并保存"账号ID"的值，作为DomainID。
8. 单击"访问密钥"页签，单击"新增访问密钥"，输入验证码或密码。单击"确定"，生成并下载访问密钥，在.csv文件中获取AK/SK信息。 AK/SK为敏感信息，防止丢失带来安全隐患。
   
 
 #### 步骤二：备份Doris集群数据
1. 使用SSH登录工具，通过弹性IP远程登录到Linux弹性云服务器。 具体登录操作步骤请参见弹性云服务器《用户指南》中的" [SSH密码方式登录](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0017955633.html)"章节。
   
2. 连接Doris集群。具体请参见[使用MySQL客户端连接Doris普通集群](https://support.huaweicloud.com/usermanual-cloudtable/cloudtable_01_0228.html)。
   ```
   ./mysql -uadmin -ppassword -h集群内网地址 -P9030
   ```
   
3. 创建仓库example_repo。
   ```
   CREATE REPOSITORY `example_repo`
   WITH OBS
   ON LOCATION "obs://cloudtable-test-obs/backup"
   PROPERTIES
   (
   "obs.endpoint"="***",
   "obs.access_key"="***",
   "obs.secret_key"="***"
   );
   ```
   - example_repo：在OBS中创建的存储仓库，用于备份数据。
   
   - ON LOCATION：指定OBS上的存储路径。
    
4. 查看已创建的仓库。
   ```
   SHOW REPOSITORIES;
   ```
   显示结果如下，表示仓库创建成功。
   ```
   +--------+--------------+---------------------+------------+---------------------+--------+------+--------+
   | RepoId | RepoName     | CreateTime          | IsReadOnly | Location            | Broker | Type | ErrMsg |
   +--------+--------------+---------------------+------------+---------------------+--------+------+--------+
   | 10785  | example_repo | 2025-07-29 11:38:27 | false      | obs://z125-n/BUCKUP | -      | OBS  | NULL   |
   +--------+--------------+---------------------+------------+---------------------+--------+------+--------+
   ```
   
5. 全量备份数据表demo数据库下的表到仓库example_repo中。
   ```
   BACKUP SNAPSHOT demo.snapshot_label1
   TO example_repo
   ON (example_tbl)
   PROPERTIES ("type" = "full");
   ```
   - demo.snapshot_label1：为备份快照名称。
   
   - TO example_repo：指定将快照备份到名为"example_repo"的仓库中。
   
   - ON (example_tbl)：指定备份对象。
   
   - type：指备份的类型。full：全量备份，适用于首次备份和定期完整备份。
    
6. 执行以下命令查看BACKUP作业执行情况。
   ```
   show BACKUP;
   ```
   
7. 在远端仓库中查看备份是否成功。
   ```
   SHOW SNAPSHOT ON example_repo WHERE SNAPSHOT = "snapshot_label1";
   ```
   - ON example_repo：指定要查询的存储库名称为example_repo。
   
   - snapshot_label1：为所查询的快照名称。
   
   
   显示结果如下表示在远端仓库中备份数据成功。
   ```
   +-----------------+---------------------+--------+
   | Snapshot        | Timestamp           | Status |
   +-----------------+---------------------+--------+
   | snapshot_label1 | 2025-07-29-14-18-54 | OK     |
   +-----------------+---------------------+--------+
   ```
   
 
 #### 步骤三：恢复Doris集群数据
1. 使用SSH登录工具，通过弹性IP远程登录到Linux弹性云服务器。 具体登录操作步骤请参见弹性云服务器《用户指南》中的" [SSH密码方式登录](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0017955633.html)"章节。
   
2. 连接Doris集群。具体请参见[使用MySQL客户端连接Doris普通集群](https://support.huaweicloud.com/usermanual-cloudtable/cloudtable_01_0228.html)。
   ```
   ./mysql -uadmin -ppassword -h集群内网地址 -P9030
   ```
   
3. 创建仓库example_repo（选）。
   - 在同一个集群不同数据库进行备份恢复时，只需在备份数据集群创建仓库example_repo。
   
   - 不同集群进行备份恢复数据时，需要在恢复数据集群中创建仓库example_repo。
   
   
   ```
   CREATE REPOSITORY `example_repo`
   WITH OBS
   ON LOCATION "obs://cloudtable-test-obs/backup"
   PROPERTIES
   (
   "obs.endpoint"="***",
   "obs.access_key"="***",
   "obs.secret_key"="***"
   );
   ```
   
4. 从远端已备份数据仓库中恢复数据。从example_repo中恢复demo中的表example_tbl到数据库demo1中。
   ```
   RESTORE SNAPSHOT demo1.`snapshot_label1`
   FROM `example_repo`
   ON ( `example_tbl` )
   PROPERTIES
   (
   "backup_timestamp"="2023-08-16-20-13-55",
   "replication_num" = "3"
   );
   ```
   "backup_timestamp"可通过以下命令获取：
   ```
   SHOW SNAPSHOT ON example_repo WHERE SNAPSHOT = "snapshot_label1";
   ```
   
5. 执行以下命令查看恢复作业的执行情况。
   ```
   SHOW RESTORE\G;
   ```
   
6. 在demo1数据库中查看恢复的数据表。如果显示example_tbl数据表，证明数据恢复成功。
   ```
   show tables;
   +-----------------+
   | Tables_in_demo1 |
   +-----------------+
   | example_tbl     |
   +-----------------+
   ```
   
 
#### 常见问题
- 问题现象：数据恢复失败，提示指定了错误的备份时间戳。如图所示： ![](https://support.huaweicloud.com/bestpractice-cloudtable/zh-cn_image_0000002392027846.png "点击放大")
  
- 解决办法：远端备份仓库时间戳错误，将"："修改"-"。
 
