
# 手动恢复Doris数据
Doris支持将当前数据以文件的形式，通过Broker备份到远端存储系统中。再通过恢复命令，从远端存储系统中将数据恢复到任意Doris集群中。可实现将Doris数据定期进行快照备份及数据迁移操作。
#### 数据恢复原理介绍
Doris数据恢复操作需指定一个远端仓库中已存在的备份数据，再将备份数据恢复到本地集群中。当提交Restore请求后，系统内部会做如下操作：
1. 在本地创建对应的元数据 系统会在本地集群中创建恢复对应的表分区等结构。创建完成后，该表可见，但是不可访问。
   
2. 本地snapshot 将在本地集群中创建的表做一个快照，是一个空快照（刚创建的表没有数据），用于在Backend上产生对应的快照目录，接收从远端仓库下载的快照文件。
   
3. 下载快照 远端仓库中的快照文件，会被下载到对应的生成的快照目录中，由各个Backend并发完成。
   
4. 生效快照 快照下载完成后，要将各个快照映射为当前本地表的元数据。然后重新加载这些快照，使之生效，完成最终的恢复作业。
   
 
#### 约束与限制
- 该章节操作仅适用于MRS 3.3.1之前版本，MRS 3.3.1及之后版本集群请使用Manager提供的备份恢复功能，具体操作请参见[恢复Doris业务数据](https://support.huaweicloud.com/usermanual-mrs/admin_guide_000424.html)。
- 备份恢复相关的操作目前只允许拥有**ADMIN**权限的用户执行。
- 一个Database内，只允许有一个正在执行的恢复作业。
- Doris数据恢复支持最小分区（Partition）级别的操作，当表的数据量很大时，建议按分区分别执行，以降低失败重试的代价。
- 因为备份恢复操作，操作的都是实际的数据文件。所以当一个表的分片过多，或者一个分片有过多的小版本时，可能即使总数据量很小，依然需要恢复很长时间。
- 当通过**SHOW BACKUP** 或者**SHOW RESTORE** 命令查看作业状态时，有可能会在TaskErrMsg列中看到错误信息，只要**State** 列不为**CANCELLED**，则说明作业依然在继续。这些Task有可能会重试成功，但有些Task错误，会导致作业失败。
- 如果恢复作业是一次覆盖操作（指定恢复数据到已经存在的表或分区中），那么从恢复作业的COMMIT阶段开始，当前集群上被覆盖的数据有可能不再被还原。如果恢复作业失败或被取消，有可能造成之前的数据损坏且无法访问。这种情况下，只能通过再次执行恢复操作，并等待作业完成。因此，不推荐使用覆盖的方式恢复数据，除非确认当前数据已不再使用。
 
#### 前提条件
- 已创建包含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数据](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_249202.html)完成备份需要恢复的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. 从远端已备份数据的仓库中恢复表或分区数据。例如： 
   - 从**example_repo** 中恢复备份**snapshot_label1** 中的表**example_tbl** 到数据库**example_db2** ，恢复为1个副本：
     ```
     RESTORE SNAPSHOT example_db2.`snapshot_label1`
     FROM `example_repo`
     ON ( `example_tbl` )
     PROPERTIES
     (
     "backup_timestamp"="2023-08-16-20-13-55",
     "replication_num" = "1"
     );
     ```
     "backup_timestamp"可通过以下命令获取：
     ```
     SHOW SNAPSHOT ON example_repo WHERE SNAPSHOT = "snapshot_label1";
     ```
     
   
   - 从**example_repo** 中恢复备份**snapshot_label2** 中的表**example_tbl** 的分区**p1** 和**p2** ，以及恢复表**example_tbl2** 到数据库**example_db1** ，并重命名为**new_tbl** ，默认恢复为3个副本：
     ```
     RESTORE SNAPSHOT example_db1.`snapshot_label2`
     FROM `example_repo`
     ON
     (
     `backup_tbl` PARTITION (`p1`, `p2`),
     `backup_tbl2` AS `new_tbl`
     )
     PROPERTIES
     (
     "backup_timestamp"="2023-08-16-20-13-55"
     );
     ```
     "backup_timestamp"可通过以下命令获取：
     ```
     SHOW SNAPSHOT ON example_repo WHERE SNAPSHOT = "snapshot_label2";
     ```
     
   
   
   
   
3. 执行以下命令查看恢复作业的执行情况： 
   ```
   SHOW RESTORE\G;
   ```
   
   
 
