
# 恢复误删除的多个库数据
#### 操作场景
在数据库软件的使用过程中，误删数据库是导致数据丢失的高危场景。DROP DATABASE/TRUNCATE TABLE等DDL操作会直接删除物理数据对象，其不可逆性使得恢复依赖于物理文件全量备份和增量日志。在数据量较大的情况下，使用传统数据库备份恢复手段的恢复耗时可能达到小时级。
本章节提供如下三种恢复方式：
- 如果您可以确认误操作的时间点，可以通过[恢复到指定时间点]来恢复数据。
- 如果您可确认误删的数据库及时间点，可以使用[表级时间点恢复]数据。
- 如果您已[开启库表回收站](https://support.huaweicloud.com/kerneldesc-taurusdb/taurusdb_20_0057.html)，删除数据库或表后TaurusDB会将被删除表移入"__recyclebin__"库暂存。库表级回收站支持修改被删除的表在回收站中的最长保留时间，数据表在未达到回收站最长保存时间前，可以随时使用存储过程将库表从回收站中快速恢复。
 
#### 操作流程
| 操作步骤                                                               | 说明                |
|:---|:---|
| [步骤1：创建数据库]      | 使用控制台创建数据库。       |
| [步骤2：建表及插入数据]  | 使用DAS新建数据库表及插入数据。 |
| [步骤3：误删除数据库]    | 模拟控制台误删除数据库的操作。   |
| [步骤4：恢复库数据]   | 使用备份文件恢复误删除的库数据。  |
| [步骤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、design_patterns，单击"确定"。
 
 #### 步骤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. 在顶部菜单栏选择"SQL操作 \> SQL窗口"，打开一个SQL窗口。
6. 执行如下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','依赖倒置原则');
       ```
       
      
   
   - 在数据库design_patterns中新建表和插入数据
     - 新建表
       ```
       CREATE TABLE `creational_pattern` (
         `id` int unsigned NOT NULL,
         `name` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
         PRIMARY KEY (`id`)
       ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
       ```
       ```
       CREATE TABLE `structural_pattern` (
         `id` int unsigned NOT NULL,
         `name` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
         PRIMARY KEY (`id`)
       ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
       ```
       ```
       CREATE TABLE `behavioral_pattern` (
         `id` int unsigned NOT NULL,
         `name` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
         PRIMARY KEY (`id`)
       ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
       ```
       
     
     - 插入数据
       ```
       insert into creational_pattern (id,name) VALUES (1001,'Singleton pattern'),(1002,'Abstract Factory'),(1003,'Builder Pattern'),(1004,'Factory Method pattern'),(1005,'Prototype pattern');
       ```
       ```
       insert into structural_pattern (id,name) VALUES (2001,'Adapter pattern'),(2002,'Bridge pattern'),(2003,'Decorator pattern'),(2004,'Composite pattern'),(2005,'Facade pattern'),(2006,'Flyweight pattern'),(2007,'Proxy pattern');
       ```
       ```
       insert into behavioral_pattern (id,name) VALUES (3001,'Template method pattern'),(3002,'Command pattern'),(3003,'Iterator pattern'),(3004,'Observer pattern'),(3005,'Mediator pattern'),(3006,'Memento pattern'),(3007,'Interpreter pattern'),(3008,'State pattern'),(3009,'Strategy pattern'),(3010,'Chain-of-responsibility pattern'),(3011,'Visitor pattern');
       ```
       
      
   
   
   
   
 
 #### 步骤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. 选择principles和design_patterns数据库，单击操作列的"删除"。
6. 在弹出框中，根据提示输入"DELETE"，单击"确定"。
 
 #### 步骤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. 勾选确认信息，单击"下一步"。
  
  7. 核对任务信息，无误后单击"确定"。 
     恢复到当前实例会将当前实例上的数据全部覆盖，并且恢复过程中数据库不可用，请在业务低峰期进行恢复。
     
     
  
  8. 查看恢复结果。 
     恢复到的目标实例运行状态由"恢复中"变为"正常"，说明恢复成功。
     
     
   
- [通过库表级回收站恢复]
  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_0000002631529218.png "点击放大")
     
     
  
  8. 执行SQL，创建数据库design_patterns_new，用于恢复数据。 
     ```
     CREATE DATABASE `design_patterns_new`;
     ```
     
     
  
  9. 执行SQL，恢复被误删库design_patterns的表到指定数据库design_patterns_new。 
     **语法：**
     ```
     call dbms_recyclebin.restore_db ('DB_NAME', 'DEST_DB');
     ```
     - DB_NAME：回收站中表的原库名。
     
     - DEST_DB：指定表恢复到的数据库。
     
     
     **示例：**
     ```
     CALL dbms_recyclebin.restore_db('design_patterns','design_patterns_new');
     ```
     
     
   
 #### 步骤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. 在弹出的对话框中输入密码，单击"测试连接"。
7. 测试连接成功后，单击"登录"。
8. 查看并确认目标库名和表数据，确认是否恢复完成。
 
