## 模块 4：备份与恢复表

### 步骤 1. 备份 `emp.sal` 表

+ 使用 `Backup & Restore` 工具备份 `emp` 数据库中的 `sal` 表。
+ 以下是对参数的解释：
  + `--pd "${HOST_PD1_PRIVATE_IP}:2379"`：PD 节点的 IP 地址。
  + `--storage "s3://pe-class-${LAB:REGION_NAME}/${LAB:USER_UNIQUE_TAG}/empsal"`：备份文件存储的 S3 存储桶和对象前缀。
  + `--db emp --table sal`：分别指定数据库名称和表名称。
  + `--ratelimit 128`：每个 TiKV 执行备份任务的最大速度（单位为 MiB/s）。
  + `--log-file backuptable.log`: `Backup & Restore` 日志记录的目标文件。

  ```bash
  source ~/hosts-env.sh
  tiup br:v7.5.1 backup table \
    --pd "${HOST_PD1_PRIVATE_IP}:2379" \
    --db emp \
    --table sal \
    --storage "s3://pe-class-${LAB:REGION_NAME}/${USER_UNIQUE_TAG}/empsal"  \
    --send-credentials-to-tikv=false \
    --ratelimit 128 \
    --log-file backuptable.log
  ```

  ```output
  Detail BR log in backuptable.log
  Table Backup <----------------------------------------------------------------------------------------------------------------------------------------> 100.00%
  Checksum <--------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
  [2022/06/25 20:25:08.432 +08:00] [INFO] [collector.go:69] ["Table Backup success summary"] [total-ranges=6] [ranges-succeed=6] [ranges-failed=0] [backup-checksum=963.74443ms] [backup-fast-checksum=219.535µs] [backup-total-ranges=2] [backup-total-regions=6] [total-take=4.664522392s] [Size=58300863] [BackupTS=434152381823320066] [total-kv=5688094] [total-kv-size=301MB] [average-speed=64.54MB/s] [backup-data-size(after-compressed)=58.3MB]
  ```

### 步骤 2. 删除 `emp.sal` 表

  ```bash
  mysql -h ${HOST_DB1_PRIVATE_IP} --port 4000 -u root
  ```

  ```sql
  SELECT COUNT(*) FROM emp.sal;
  ```

  ```output
  mysql> SELECT COUNT(*) FROM emp.sal;
  +----------+
  | COUNT(*) |
  +----------+
  |  2844047 |
  +----------+
  1 row in set (0.00 sec)
  ```

  ```sql
  DROP TABLE emp.sal;
  ```

  ```output
  mysql> DROP TABLE emp.sal;
  ```

  ```sql
  SELECT COUNT(*) FROM emp.sal;
  ```

  ```output
  mysql> SELECT COUNT(*) FROM emp.sal;
  ERROR 1146 (42S02): Table 'emp.sal' doesn't exist
  ```

### 步骤 3. 恢复 `emp.sal` 表

+ 使用 `Backup & Restore` 工具恢复 `emp.sal` 表。

  ```bash
  source ~/hosts-env.sh
  tiup br:v7.5.1 restore table \
    --pd "${HOST_PD1_PRIVATE_IP}:2379" \
    --db "emp" \
    --table "sal" \
    --storage "s3://pe-class-${LAB:REGION_NAME}/${USER_UNIQUE_TAG}/empsal" \
    --send-credentials-to-tikv=false \
    --log-file restoretable.log
  ```

  ```output
  Detail BR log in restoretable.log
  Table Restore <--------------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
  [2022/06/25 20:39:21.447 +08:00] [INFO] [collector.go:69] ["Table Restore success summary"] [total-ranges=7] [ranges-succeed=7] [ranges-failed=0] [split-region=150.684µs] [restore-ranges=6] [total-take=3.206398749s] [restore-data-size(after-compressed)=58.3MB] [Size=58300863] [BackupTS=434152605812523049] [total-kv=5688094] [total-kv-size=301MB] [average-speed=93.89MB/s]
  ```

### 步骤 4. 检查恢复后的 `emp.sql` 表

+ 连接到 TiDB，验证 `emp` 数据库中的 `sal` 表已恢复。

  ```bash
  mysql -h ${HOST_DB1_PRIVATE_IP} --port 4000 -u root
  ```

  ```bash
  SELECT COUNT(*) FROM emp.sal;
  ```

  ```output
  mysql> SELECT COUNT(*) FROM emp.sal;
  +----------+
  | COUNT(*) |
  +----------+
  |  2844047 |
  +----------+
  1 row in set (0.53 sec)
  ```
