## モジュール 3: データベースのバックアップとリストア

### 手順 1. `emp` データベースを Amazon S3 にバックアップ

+ [ターミナル 1](ssh://monitor1-ssh#1) で、`Backup & Restore` ユーティリティを使用して `emp` データベースをバックアップします。
+ パラメータの説明は以下の通りです:
  + `--pd "${HOST_PD1_PRIVATE_IP}:2379"`: PD ノードの IP アドレス。
  + `--storage "s3://pe-class-${LAB:REGION_NAME}/${LAB:USER_UNIQUE_TAG}/emp"`: バックアップファイルが保存される S3 バケットとオブジェクトプレフィックス。
  + `--send-credentials-to-tikv=false`: IAM クレデンシャルは EC2 インスタンスロールから取得されるため、クレデンシャルを渡す必要はありません。
  + `--db emp`: バックアップ対象のデータベース名を指定します。
  + `--ratelimit 128`: バックアップタスクを実行する TiKV 1 台あたりの最大速度 (MiB/s)。
  + `--log-file backupdb.log`: BR のログ出力先ファイルを指定します。

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

  ```output
  Detail BR log in backupdb.log
  Database Backup <--------------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
  Checksum <---------------------------------------------------------------------------------------------------------------------------------------------------------------> 100.00%
  [2022/12/04 16:30:56.102 +00:00] [INFO] [collector.go:69] ["Database Backup success summary"] [total-ranges=14] [ranges-succeed=14] [ranges-failed=0] [backup-checksum=1.769284373s] [backup-fast-checksum=495.092µs] [backup-total-ranges=7] [backup-total-regions=26] [total-take=10.347769213s] [BackupTS=437825423763570689] [total-kv=5988147] [total-kv-size=322.2MB] [average-speed=31.13MB/s] [backup-data-size(after-compressed)=65.51MB] [Size=65506701]
  ```

### 手順 2. TiDB に接続

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

  ```sql
  SHOW DATABASES;
  ```

  ```output
  mysql> SHOW DATABASES;
  +--------------------+
  | Database           |
  +--------------------+
  | INFORMATION_SCHEMA |
  | METRICS_SCHEMA     |
  | PERFORMANCE_SCHEMA |
  | emp                |
  | mysql              |
  | test               |
  +--------------------+
  6 rows in set (0.00 sec)
  ```

### 手順 3. `emp` データベースを削除

  ```sql
  DROP DATABASE emp;
  ```

  ```output
  mysql> DROP DATABASE emp;
  Query OK, 0 rows affected (39.90 sec)
  ```

  ```sql
  SHOW DATABASES;
  ```

  ```output
  mysql> SHOW DATABASES;
  +--------------------+
  | Database           |
  +--------------------+
  | INFORMATION_SCHEMA |
  | METRICS_SCHEMA     |
  | PERFORMANCE_SCHEMA |
  | mysql              |
  | test               |
  +--------------------+
  5 rows in set (0.00 sec)
  ```

  ```sql
  EXIT
  ```

  ```output
  mysql> EXIT;
  Bye
  ```

### 手順 4. Amazon S3 から `emp` データベースをリストア

+ `Backup & Restore` ユーティリティを使用して `emp` データベースをリストアします。

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

  ```output
  Detail BR log in restoredb.log
  DataBase Restore <------------------------------------------------------------------------------------------------------------------------------------> 100.00%
  [2022/06/25 20:00:56.031 +08:00] [INFO] [collector.go:69] ["DataBase Restore success summary"] [total-ranges=15] [ranges-succeed=15] [ranges-failed=0] [split-region=201.381µs] [restore-ranges=11] [total-take=3.770701239s] [restore-data-size(after-compressed)=65.55MB] [Size=65549823] [BackupTS=434152001321566251] [total-kv=5988147] [total-kv-size=322.2MB] [average-speed=85.44MB/s]
  ```

### 手順 5. `emp` データベースがリストアされたことを確認する

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

  ```sql
  SHOW DATABASES;
  ```

  ```output
  mysql> SHOW DATABASES;
  +--------------------+
  | Database           |
  +--------------------+
  | INFORMATION_SCHEMA |
  | METRICS_SCHEMA     |
  | PERFORMANCE_SCHEMA |
  | emp                |
  | mysql              |
  | test               |
  +--------------------+
  6 rows in set (0.00 sec)
  ```

  ```sql
  USE emp;
  ```

  ```output
  mysql> USE emp;
  Database changed
  ```

  ```sql
  SHOW TABLES;
  ```

  ```output
  mysql> SHOW TABLES;
  +---------------+
  | Tables_in_emp |
  +---------------+
  | dep           |
  | emp           |
  | sal           |
  | t             |
  +---------------+
  4 rows in set (0.00 sec)
  ```

  ```sql
  SELECT COUNT(*) FROM dep;
  ```

  ```output
  mysql> SELECT COUNT(*) FROM dep;
  +----------+
  | COUNT(*) |
  +----------+
  |        9 |
  +----------+
  1 row in set (0.01 sec)
  ```

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

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

  ```sql
  EXIT;
  ```
