
# 恢复误删除的表数据
#### 操作场景
在数据库软件的使用过程中，误删表是导致数据丢失的高危场景。DROP DATABASE/TRUNCATE TABLE等DDL操作会直接删除物理数据对象，其不可逆性使得恢复依赖于物理文件全量备份和增量日志。在数据量较大的情况下，使用传统数据库备份恢复手段的恢复耗时可能达到小时级。
本章节提供如下两种恢复方式：
- 如果您可确认误删表数据的时间点，可以使用表级时间点恢复数据。
- 如果您已开启库表回收站，删除数据库或表后TaurusDB会将被删除表移入"__recyclebin__"库暂存。库表级回收站支持修改被删除的表在回收站中的最长保留时间，数据表在未达到回收站最长保存时间前，可以随时使用存储过程将库表从回收站中快速恢复。
 
#### 操作流程
| 操作步骤                                                               | 说明                  |
|:---|:---|
| [步骤1：创建数据库]      | 使用控制台创建数据库。         |
| [步骤2：建表及插入数据]  | 使用DAS新建数据库表及插入数据。   |
| [步骤3：误删除表数据]    | 登录DAS，模拟误删除数据库表的操作。 |
| [表级时间点恢复]       | 使用表级时间点恢复误删除的表数据。   |
| [步骤5：确认数据恢复结果] | 登录DAS，确认数据是否恢复。     |
   
#### 使用须知
恢复到当前实例会将当前实例上的数据全部覆盖，并且恢复过程中数据库不可用，请在业务低峰期进行恢复。
 #### 步骤1：创建数据库
1. [登录TaurusDB管理控制台](https://console.huaweicloud.com/gaussdbformysql/#/management/list)。
2. 单击管理控制台左上角的![](https://support.huaweicloud.com/bestpractice-taurusdb/figure/zh-cn_image_0000002671347251.png)，选择区域。
3. 进入"实例管理"页面，选择目标实例，单击实例名称，进入"实例概览"页面。
4. 在左侧导航栏，单击"数据库管理"，进入数据库管理页面。
5. 单击"创建数据库"，在弹出框中设置数据库名称，新建principles数据库，单击"确定"。
 
 #### 步骤2：建表及插入数据
1. [登录TaurusDB管理控制台](https://console.huaweicloud.com/gaussdbformysql/#/management/list)。
2. 单击管理控制台左上角的![](https://support.huaweicloud.com/bestpractice-taurusdb/figure/zh-cn_image_0000002671347251.png)，选择区域。
3. 在"实例管理"页面，选择目标实例，单击操作列的"登录"，进入数据管理服务数据库登录界面。 
   您也可以在"实例管理"页面，单击目标实例名称，进入"实例概览"页面，在页面右上角，单击"登录"，进入数据管理服务数据库登录界面。
   
   
4. 正确输入数据库用户名和密码，单击"测试连接"。
5. 测试连接通过后，单击"登录"，即可进入您的数据库并进行管理。
6. 在顶部菜单栏选择"SQL操作 \> SQL窗口"，打开一个SQL窗口。
7. 执行如下SQL，新建表和插入数据。 
   principles数据库中新建表和插入数据
   ```
   CREATE TABLE `solid_principle` (
     `abbr` varchar(32) COLLATE utf8mb4_general_ci NOT NULL,
     `name_en` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
     `name_cn` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
     PRIMARY KEY (`abbr`)
   ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
   ```
   ```
   insert into solid_principle (abbr,name_en,name_cn) VALUES 
   ('S','Single Responsibility Principle','单一职责原则'),('O','Open Close Principle','开闭原则'),('L','Liskov Substitution Principle','里氏替换原则'),('I','Interface Segregation Principle','接口隔离原则'),('D','Dependency Inversion Principle','依赖倒置原则');
   ```
   
   
 
 #### 步骤3：误删除表数据
1. [登录TaurusDB管理控制台](https://console.huaweicloud.com/gaussdbformysql/#/management/list)。
2. 单击管理控制台左上角的![](https://support.huaweicloud.com/bestpractice-taurusdb/figure/zh-cn_image_0000002671347251.png)，选择区域。
3. 在"实例管理"页面，选择目标实例，单击操作列的"登录"，进入数据管理服务数据库登录界面。 
   您也可以在"实例管理"页面，单击目标实例名称，进入"实例概览"页面，在页面右上角，单击"登录"，进入数据管理服务数据库登录界面。
   
   
4. 正确输入数据库用户名和密码，单击"测试连接"。
5. 测试连接通过后，单击"登录"，即可进入您的数据库并进行管理。
6. 在顶部菜单栏选择"SQL操作"\>"SQL查询"，打开一个SQL窗口。
7. 选择principles数据库，执行SQL，删除表数据。 
   ```
   delete from `solid_principle`;
   ```
   
   
 
#### 步骤4：恢复表数据
- [表级时间点恢复]
  
  1. [登录TaurusDB管理控制台](https://console.huaweicloud.com/gaussdbformysql/#/management/list)。
  
  2. 单击管理控制台左上角的![](https://support.huaweicloud.com/bestpractice-taurusdb/figure/zh-cn_image_0000002671347251.png)，选择区域。
  
  3. 在"实例管理"页面，选择目标实例，单击实例名称，进入"实例概览"页面。
  
  4. 在左侧导航栏，单击"备份恢复"，在"全量备份"子页签下，单击"表级时间点恢复"。
  
  5. 跳转至"表级时间点恢复"页面，填选恢复日期、可恢复的时间区间、要恢复到的时间点和选择恢复库表。 
     - **系统会自动生成以时间戳为后缀的库表名**，如果需要，您也可以自定义恢复后的库表名，表名不能重复。
     
     - 恢复时间点库表是将选择的恢复时间点前最新一次全量备份中的库表数据恢复到某一个时间点，"最新库表"是将当前时间点存在的库表数据恢复到某一个时间点。
     
     - 如果是恢复的时间点前最新一次全量备份之后创建的库表，默认无法选中，可选择"最新库表"获取最新库表信息。
     
     - 如果需要恢复的库表已不存在或被误删，需要先登录数据库并创建同名库表，然后在"最新库表"中选择该库表进行恢复。
     
     
     
     
  
  6. 单击"下一步：确认恢复信息"，核对需要恢复的库表信息，确认无误后，单击"立即恢复"。
  
  7. 在"实例管理"页面，可查看该实例状态为"恢复中"，恢复过程中该实例业务不中断。 
     同时，您可在"任务中心"页面，查看"表级时间点恢复"任务的执行进度及结果。
     
     
   
- [库表级回收站恢复]
  1. [登录TaurusDB管理控制台](https://console.huaweicloud.com/gaussdbformysql/#/management/list)。
  
  2. 单击管理控制台左上角的![](https://support.huaweicloud.com/bestpractice-taurusdb/figure/zh-cn_image_0000002671347251.png)，选择区域。
  
  3. 在"实例管理"页面，选择目标实例，单击操作列的"登录"，进入数据管理服务数据库登录界面。 
     您也可以在"实例管理"页面，单击目标实例名称，进入"实例概览"页面，在页面右上角，单击"登录"，进入数据管理服务数据库登录界面。
     
     
  
  4. 正确输入数据库用户名和密码，单击"测试连接"。
  
  5. 测试连接通过后，单击"登录"，即可进入您的数据库并进行管理。
  
  6. 在顶部菜单栏选择"SQL操作"\>"SQL查询"，打开一个SQL窗口。
  
  7. 执行SQL，查询回收站中暂存的表。 
     ```
     CALL dbms_recyclebin.show_tables();
     ```
     ![](https://support.huaweicloud.com/bestpractice-taurusdb/figure/zh-cn_image_0000002662008357.png "点击放大")
     
     
  
  8. 执行SQL，恢复表solid_principle到原数据库principles。 
     **语法：**
     ```
     call dbms_recyclebin.restore_table('TABLE_NAME');
     ```
     TABLE_NAME：回收站中表的当前表名。
     **示例：**
     ```
     CALL dbms_recyclebin.restore_table('principles@solid_principle@69fd4d8f');
     ```
     
     
   
 #### 步骤5：确认数据恢复结果
1. [登录TaurusDB管理控制台](https://console.huaweicloud.com/gaussdbformysql/#/management/list)。
2. 单击管理控制台左上角的![](https://support.huaweicloud.com/bestpractice-taurusdb/figure/zh-cn_image_0000002671347251.png)，选择区域。
3. 进入"实例管理"页面，选择目标实例，单击目标实例的操作列的"登录"。
4. 在弹出的对话框中输入密码，单击"测试连接"。
5. 测试连接成功后，单击"登录"。
6. 查看并确认目标库的表数据，确认是否恢复完成。
 
