# 手动备份Doris数据
在企业数据管理中，数据备份是保障数据安全的重要手段。Doris集群在运行过程中可能面临硬件故障、人为误操作、软件缺陷等风险，导致数据丢失或损坏。通过定期备份Doris数据，可以在发生故障时快速恢复数据，保障业务连续性。Doris支持将数据以文件形式备份到远端存储系统（如HDFS），实现数据快照备份和迁移。本文介绍如何手动备份Doris数据到远端存储系统。
#### 数据备份原理介绍
备份操作是将指定表或分区的数据，直接以Doris存储的文件的形式，上传到远端仓库中进行存储。当用户提交Backup请求后，系统内部会做如下操作：
1. 快照及快照上传 备份都是对快照进行操作，快照阶段会对指定的表或分区数据文件进行快照。快照只是对当前数据文件产生一个硬链，耗时较少。快照后，对表进行的更改、导入等操作都不再影响备份的结果。快照完成后，系统会开始对这些快照文件进行逐一上传，由各个Backend并发完成。
   
2. 元数据准备及上传 数据文件快照上传完成后，Frontend会首先将对应元数据写成本地文件，然后通过Broker将本地元数据文件上传到远端仓库，完成备份作业操作。
   
 
#### 约束与限制
- 该章节操作仅适用于MRS 3.3.1之前版本，MRS 3.3.1及之后版本集群请使用Manager提供的备份恢复功能，具体操作请参见备[份Doris业务数据](https://support.huaweicloud.com/usermanual-mrs/admin_guide_000423.html)。
- 备份恢复相关的操作目前只允许拥有**ADMIN**权限的用户执行。
- 一个Database内，只允许有一个正在执行的备份作业。
- Doris数据备份支持最小分区（Partition）级别的操作，当表的数据量很大时，建议按分区分别执行，以降低失败重试的代价。
- 因为备份恢复操作，操作的都是实际的数据文件，所以当一个表的分片过多，或者一个分片有过多的小版本时，可能即使总数据量很小，依然需要备份很长时间。
- 当通过**SHOW BACKUP** 或者**SHOW RESTORE** 命令查看作业状态时，有可能会在TaskErrMsg列中看到错误信息，只要**State** 列不为**CANCELLED**，则说明作业依然在继续。这些Task有可能会重试成功，但有些Task错误，会导致作业失败。
- 如果备份的表是动态分区表，备份之后会自动禁用动态分区属性，在执行数据恢复操作前需手动将该表的动态分区属性启用，命令为： **ALTER TABLE** *tbl1* **SET** **("dynamic_partition.enable"="true")**
  
- 数据备份操作不会保留表的**colocate_with**属性。
 
#### 前提条件
- 已创建包含Doris服务的集群，集群内各服务运行正常。
- 待连接Doris数据库的节点与MRS集群网络互通。
- 已安装MySQL客户端，相关操作可参考[使用MySQL客户端连接Doris](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_249271.html)章节。
- 创建具有Doris管理权限的用户。
  - 集群已启用Kerberos认证（安全模式） 在FusionInsight Manager中创建一个人机用户，例如"dorisuser"，创建一个拥有"Doris管理员权限"的角色绑定给该用户。
    使用新建的用户**dorisuser**重新登录FusionInsight Manager，修改该用户初始密码。
    
  
  - 集群未启用Kerberos认证（普通模式） 使用**admin**用户连接Doris后，创建具有管理员权限的角色并绑定给用户。
    
   
 
#### 备份Doris数据
1. 登录安装了MySQL的节点，执行以下命令，连接Doris数据库。 
   如果集群已启用Kerberos认证（安全模式），需先执行以下命令：
   ```
   export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1
   ```
   连接Doris数据库：
   ```
   mysql -u数据库登录用户 -p数据库登录用户密码 -P数据库连接端口 -hDoris FE实例IP地址
   ```
   其中：
   - 数据库连接端口为Doris FE的查询连接端口，可以通过登录Manager，单击"集群 \> 服务 \> Doris \> 配置"，查询Doris服务的"query_port"参数获取。
   
   - Doris FE实例IP地址可通过登录MRS集群的Manager界面，单击"集群 \> 服务 \> Doris \> 实例"，查看任一FE实例的IP地址。
   
   - 用户也可以使用MySQL连接软件或者Doris WebUI界面连接数据库。
   
   
   
   

2. 执行以下命令在HDFS中创建一个远程仓库**example_repo** ：
   
   - 集群已启用Kerberos认证（安全模式）
     ```
     CREATE REPOSITORY `example_repo`
     WITH BROKER `hdfs_broker`
     ON LOCATION "hdfs://hadoop-name-node:25000/path/to/repo/"
     PROPERTIES
     (
     "hadoop.security.authentication"="kerberos",
     "kerberos_principal"="doris/hadoop.hadoop.com@HADOOP.COM",
     "kerberos_keytab"="/opt/huawei/Bigdata/FusionInsight_Doris_8.3.0/install/FusionInsight-Doris-1.2.3/doris-fe/bin/doris.keytab"
     );
     ```
     
   
   
   
   - 集群未启用Kerberos认证（普通模式）
     ```
     CREATE REPOSITORY `example_repo`
     WITH BROKER `hdfs_broker`
     ON LOCATION "hdfs://hadoop-name-node:25000/path/to/repo/"
     PROPERTIES
     (
     "username" = "hdfs",
     "password" = ""
     );
     ```
     
   
   
   
   
3. 查看已经创建的仓库： 
   ```
   SHOW REPOSITORIES;
   ```
   
   

4. 备份数据到**example_repo** 中，可备份表数据也可以备份分区数据，例如：
   
   - 全量备份**example_db** 中的表**example_tbl** 数据到**example_repo** 中：
     ```
     BACKUP SNAPSHOT example_db.snapshot_label1
     TO example_repo
     ON (example_tbl)
     PROPERTIES ("type" = "full");
     ```
     
   
   - 全量备份**example_db** 中的表**example_tbl** 的**p1** 、**p2** 分区，以及表**example_tbl2** 到**example_repo** 中：
     ```
     BACKUP SNAPSHOT example_db.snapshot_label2
     TO example_repo
     ON
     (
     example_tbl PARTITION (p1,p2),
     example_tbl2
     );
     ```
     
   
   
   
   
5. 执行以下命令查看backup作业的执行情况： 
   ```
   show BACKUP;
   ```
   
   
6. 在远端仓库中查看备份是否成功。 
   ```
   SHOW SNAPSHOT ON example_repo WHERE SNAPSHOT = "snapshot_label1";
   ```
   回显结果如下所示，即表示在远端仓库中备份数据成功：
   ```
   +-----------------+---------------------+--------+
   | Snapshot        | Timestamp           | Status |
   +-----------------+---------------------+--------+
   | snapshot_label1 | 2022-04-08-15-52-29 | OK     |
   +-----------------+---------------------+--------+
   1 row in set (0.15 sec)
   ```
   
   
**验证操作：**
备份完成后，可通过以下方式验证备份是否成功：
1. 执行以下命令，确认仓库状态正常。
   ```
   SHOW REPOSITORIES;
   ```
   
2. 查看所有快照信息。
   ```
   SHOW SNAPSHOT ON example_repo;
   ```
   
3. 登录HDFS，检查远端存储路径下是否生成了备份文件。
 
#### 常见问题
- **备份作业执行失败**
  备份作业失败的常见原因包括：远端存储不可达、用户权限不足、表或分区不存在、Broker配置错误等。
  请检查远端存储（HDFS）是否可访问，确认用户具有ADMIN权限，检查表或分区是否存在，查看Broker配置是否正确。查看作业的TaskErrMsg列，定位具体错误信息。
  
- **备份时间过长**
  备份时间过长可能是因为表的分片过多、一个分片有过多的小版本、或网络带宽不足。
  建议按分区分别执行备份操作，降低单次备份的数据量。检查HDFS集群的网络带宽和IO性能。如果表的分片过多，可以考虑合并分片或调整分片策略。
  
 
#### 相关文档
- 了解如何使用MySQL客户端连接Doris，请参考[使用MySQL客户端连接Doris](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_249271.html)。
- 了解如何恢复Doris备份数据，请参考[手动恢复Doris数据](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_249203.html)。
 
