# テスト用にTiDBクラスタを作成する

### 概要
+ これらの演習では、TiDB Playground クラスタ（ラップトップ上）または TiDB Serverlessを使用して TiDB クラスタを作成します。
+ 両方のクラスタタイプはテスト目的で設計されており、開発者がTiDBインタフェースをより良く理解するのに役立ちます。追加のコストはかかりません。

### 注意
+ いくつかのステップでは、2つの異なるターミナルウィンドウでコマンドを入力する必要があります。2つのターミナルを起動し、演習の間ずっと開いておくと便利でしょう。
+ 下記の演習において、`IP address`、`port number`、`username`、`password`、`directory`を含めた演習スクリプトの予想所要時間を含めた環境が異なる場合があります。
+ ターミナルウィンドウの"`$`"とはOSプロンプトです。
+ ターミナルウィンドウ内の "`tidb>`" または "`mysql>`" は、SQL コマンドプロンプトです。
+ これらの演習は、ノートパソコンなどの単一のマシン上で実行することができます。
+ これらの演習は、TiDB Playground クラスタおよび TiDB Serverless向けに設計されています。TiDB Playground クラスタは本番用途には設計されていないことに注意してください。

### 前提条件
+ macOSまたはLinuxを使用していること。
+ [Gitコマンドラインクライアント](https://git-scm.com/)がインストールされていること。
+ [MySQLコマンドラインクライアント](https://www.google.com/search?q=how+to+install+mysql+command+line+client)をインストールされていること。

## 演習 1: `tiup playground`コマンドを使用して TiDB Playgroundクラスタを作成する

 <img src="./diagram/2013E011_ja_001_20230404.png" width="60%" align="top"/>

### 概要
+ この演習では、`tiup playground`を使用してTiDB Playgroundクラスタを作成します。

### 所要時間
+ この演習は約10分程度かかります。

### タスク
1. ワークショップスクリプトのリポジトリをクローンします。
2. デモのスクリプトを確認して理解します。
3. TiDB Playgroundクラスタを作成します。
4. TiUP Playgroundサンドボックスクラスタをクリーンアップする方法を理解します。

### 手順
1. `GitHub`からデモのリポジトリをクローンし、表示された結果を確認します。
   ```
   $ git clone https://github.com/pingcap/tidb-course-201-lab.git
   Cloning into 'tidb-course-201-lab'...
   ...
   ```

2. 現在の作業ディレクトリを`scripts/`に変更して、2つのスクリプトを確認します。

   `tidb-course-201-lab/scripts`ディレクトリに作業ディレクトリを変更します。
   ```
   $ cd tidb-course-201-lab/scripts
   ```

   スクリプト`playground-start.sh`をレビューします。このスクリプトを実行すると、3つのPDサーバーインスタンス、3つのTiKVサーバーインスタンス、2つのTiDBサーバーインスタンス、そして1つのTiFlashサーバーインスタンスを含むTiDB Playgroundクラスタが開始されます。また、Playgroundのディレクトリタグは`classroom`です。
   ```
   $ cat playground-start.sh
   #!/bin/bash
   ~/.tiup/bin/tiup playground v6.5.1 --tag classroom --db 2 --pd 3 --kv 3 --tiflash 1
   ```

   TiDB Playgroundクラスタのインスタンスのステータスを表示するスクリプト`playground-check.sh`を確認します。
   ```
   $ cat playground-check.sh
   #!/bin/bash
   ~/.tiup/bin/tiup playground display
   ```

3. TiDB Playgroundクラスタを起動し、クラスタ内のTiDBサーバーインスタンスに接続します。
   TiUP ユーティリティをダウンロードしてインストールして、結果を確認します。
   ```
   $ curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
   ...
   Shell profile:  /Users/username/.zshrc
   Installed path: /Users/username/.tiup/bin/tiup
   ===============================================
   Have a try:     tiup playground
   ===============================================
   ```

   提供されたスクリプトを使用して、ローカルTiDB Playgroundクラスタを起動し、結果を表示します。もし、`Ctrl-C`を入力したら、TiDB Playgroundクラスタは終了します。
   ```
   $ ./playground-start.sh
   ...
   Connect TiDB:   mysql --host 127.0.0.1 --port 4000 -u root
   Connect TiDB:   mysql --host 127.0.0.1 --port 4001 -u root
   TiDB Dashboard: http://127.0.0.1:2379/dashboard
   Grafana:        http://127.0.0.1:51362
   ```

   TiDB Playground クラスタの状態を確認し、結果の情報を表示するために、新しいターミナルウィンドウを開いてください。
   ```
   $ cd tidb-course-201-lab/scripts
   $ ./playground-check.sh
   tiup is checking updates for component playground ...
   Starting component `playground`: /Users/username/.tiup/components/playground/v1.11.0/tiup-playground display
   Pid    Role     Uptime
   ---    ----     ------
   11473  pd       3m4.584159125s
   11474  pd       3m4.563855125s
   11475  pd       3m4.550561s
   11476  tikv     3m3.560119667s
   11477  tikv     3m3.540240667s
   11478  tikv     3m3.52733175s
   11480  tidb     3m2.545229042s
   11481  tidb     3m2.533429333s
   11502  tiflash  2m54.914668834s
   ```

   ユーザー`root`としてポート4000でTiDBサーバーインスタンスに接続します。
   ```
   $ cat connect-4000.sh
   #!/bin/bash
   export MYSQL_PS1="tidb:4000> "
   mysql -h 127.0.0.1 -P 4000 -u root
   ```

   ```
   $ ./connect-4000.sh
   ...
   Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


   tidb:4000>
   ```

   シンプルなクエリを実行して終了します。得られる結果は出力と異なることがあります。
   ```sql
   SELECT TIDB_VERSION()\G
   EXIT;
   ```
   ```
   --------------
   SELECT TIDB_VERSION()
   --------------

   *************************** 1. row ***************************
   TIDB_VERSION(): Release Version: v6.5.1
   Edition: Community
   Git Commit Hash: 4084b077d615f9dc0a41cf2e30bc6e1a02332df2
   Git Branch: heads/refs/tags/v6.5.1
   UTC Build Time: 2023-03-07 16:04:47
   GoVersion: go1.19.5
   Race Enabled: false
   TiKV Min Version: 6.2.0-alpha
   Check Table Before Drop: false
   Store: tikv
   1 row in set (0.00 sec)

   tidb:4000>  EXIT;
   Writing history-file /Users/username/.mysql_history
   Bye
   ```

   TiDB Playgroundクラスタの完全なファイル構造が含まれていることを確認するには、`classroom`ディレクトリを確認します。
   ```
   $ find ~/.tiup/data/classroom -maxdepth 1
   /Users/username/.tiup/data/classroom
   /Users/username/.tiup/data/classroom/tikv-0
   /Users/username/.tiup/data/classroom/tikv-1
   /Users/username/.tiup/data/classroom/pd-1
   /Users/username/.tiup/data/classroom/pd-0
   /Users/username/.tiup/data/classroom/grafana
   /Users/username/.tiup/data/classroom/dsn
   /Users/username/.tiup/data/classroom/tiup_process_meta
   /Users/username/.tiup/data/classroom/tikv-2
   /Users/username/.tiup/data/classroom/pd-2
   /Users/username/.tiup/data/classroom/prometheus
   /Users/username/.tiup/data/classroom/port
   /Users/username/.tiup/data/classroom/tidb-1
   /Users/username/.tiup/data/classroom/tiflash-0
   /Users/username/.tiup/data/classroom/tidb-0
   ```

4. TiDB Playground クラスタをクリーンアップする必要がある場合は、それを行うことができます。

   以前に `playground-start.sh` を実行したターミナルに移動します。画面はこのように表示されるかもしれません。
   ```
   ...
   To view the dashboard: http://127.0.0.1:2379/dashboard
   PD client endpoints: [127.0.0.1:2379 127.0.0.1:2382 127.0.0.1:2384]
   To view the Prometheus: http://127.0.0.1:9090
   To view the Grafana: http://127.0.0.1:3000
   ```

   TiDB Playground クラスタを終了するには、`Ctrl-C` を一度押します。すべての PD、TiKV、TiDB、TiFlash サーバーインスタンスが終了します。
   ```
   ^CPlayground receive signal:  interrupt
   tikv quit
   ```

   `classroom`をタグの接頭辞に持つすべてのPlaygroundファイルを削除するには、コマンド`tiup clean classroom`を実行します。
   ```
   $ ~/.tiup/bin/tiup clean classroom
   Clean instance of `playground`, directory: /Users/username/.tiup/data/classroom
   ```

## 演習 2: TiDB Serverlessクラスタの作成する

   <img src="./diagram/2013E012_ja_001_20230404.png" width="60%" align="top"/>

### 概要
+ この演習では、TiDB Serverlessクラスタを作成します。

### 所要時間
+ この演習は約10分程度かかります。

### タスク
1. TiDB Serverlessクラスタを作成します。

### 手順
1. TiDB Serverlessクラスタを作成します。

   [TiDB Cloud ワークショップ](https://jpn.edu.pingcap.com/catalog/info/id:209)の演習1の手順に従って、TiDB Serverlessクラスタを作成します。

2. TiDB Serverlessクラスタに接続します。
   ワーキングディレクトリを`scripts/`に変更します。
   ```
   $ cd tidb-course-201-lab/scripts
   ```

   TiDB Cloudコンソールから次の詳細を取得します: `HOST`、`USERNAME`、`PORT`、および`PASSWORD`。この情報を取得するには、接続したいクラスタの`Overview`ページで`Connect`ボタンをクリックし、`Connect to {cluster_name}`ポップアップウィンドウを探します。パスワードが分からない場合は、`Reset Password`ボタンをクリックして、`Copy password`をクリックして新しく生成されたパスワードをコピーします。

   <img src="./diagram/ServerlessConnectMySQLCLI_aa_001_20230112.png" width="50%" align="top"/>

   | スクリーンショットのオプション | ガイドにおけるプレースホルダー | このステップに対する変数のマッピング |
   | :----------------------------- | :----------------------------- | :----------------------------------- |
   | `-h`                           | `<hostname>`                   | `TIDB_CLOUD_HOST`                    |
   | `-u`                           | `<username>`                   | `TIDB_CLOUD_USERNAME`                |
   | `-P`                           | `<port>`                       | `TIDB_CLOUD_PORT`                    |
   | `-p`                           | `<username>`                   | `TIDB_CLOUD_PASSWORD`                |

   次のステップおよび演習でTiDB Cloud Serverless Tierを使用するには、ターミナルウィンドウで環境変数を設定する必要があります。これは、次の手順で必要とされます。
   ```
   $ export TIDB_CLOUD_HOST=<hostname>
   $ export TIDB_CLOUD_USERNAME=<username>
   $ export TIDB_CLOUD_PASSWORD=<password>
   $ export TIDB_CLOUD_PORT=<port>
   ```

   現在のターミナルで必須の4つの環境変数が設定されているかを確認します。これらの変数のいずれかが正しく設定されていない場合は、前の手順を確認する必要がある場合があります。
   ```
   $ echo $TIDB_CLOUD_HOST; echo $TIDB_CLOUD_USERNAME; echo $TIDB_CLOUD_PASSWORD; echo $TIDB_CLOUD_PORT;
   gateway01.us-west-2.prod.aws.tidbcloud.com
   4▧▧▧▧▧▧▧▧▧▧▧▧▧▧.root
   U▧▧▧▧▧▧▧▧▧▧▧▧▧▧E
   4000
   ```

   接続スクリプトを確認し、TiDB Cloudは`TLS`接続のみを受け付けることに留意します。`--ssl-ca`オプションがあなたのオペレーティングシステム上で機能することを確認します。スクリプトには、主要なプラットフォームの複数の標準パスを表示するコメント行が含まれています。
   ```
   $ cat connect-cloud.sh
   #!/bin/bash
   export MYSQL_PS1="tidb-cloud> "

   # Default `--ssl-ca` option is for macOS/Alpine. For other system, modify the `--ssl-ca` option respectively.
   # Debian/Unbuntu/Arch: --ssl-ca=/etc/ssl/certs/ca-certificates.crt
   # CentOS/RedHat/Fedora: --ssl-ca=/etc/pki/tls/certs/ca-bundle.crt
   # OpenSUSE: --ssl-ca=/etc/ssl/ca-bundle.pem

   mysql --connect-timeout 15 \
    -u $TIDB_CLOUD_USERNAME \
    -h $TIDB_CLOUD_HOST \
    -P 4000 \
    --ssl-mode=VERIFY_IDENTITY \
    --ssl-ca=/etc/ssl/cert.pem \
    -p$TIDB_CLOUD_PASSWORD
   ```

   TiDB Serverlessに接続するには、`connect-cloud.sh` スクリプトを実行します。
   ```
   $ ./connect-cloud.sh
   mysql: [Warning] Using a password on the command line interface can be insecure.
   ...
   tidb-cloud>
   ```

   簡単なクエリを実行し、終了します。得られた結果は出力と異なる場合があります。
   ```sql
   SELECT TIDB_VERSION()\G
   EXIT;
   ```
   ```
   --------------
   SELECT TIDB_VERSION()
   --------------

   *************************** 1. row ***************************
   TIDB_VERSION(): Release Version: v6.6.0-serverless
   Edition: Community
   Git Commit Hash: 5dd35327816b464e127ab74577d611ae889083a3
   Git Branch: release-6.6-serverless
   UTC Build Time: 2023-05-04 14:33:38
   GoVersion: go1.19.4
   Race Enabled: false
   TiKV Min Version: 6.1.0
   Check Table Before Drop: false
   Store: tikv
   1 row in set (0.16 sec)


   tidb-cloud> EXIT;
   Writing history-file /Users/username/.mysql_history
   Bye
   ```

## 演習終わり
