# TiDB Playgroundクラスタを作成する

### 概要
+ この演習では、ラップトップで`tiup playground`を使用してTiDB Playgroundクラスタを作成します
+ TiDB Playgroundクラスタタイプは、テスト目的で設計されており、追加費用なしに開発者がTiDBのインターフェースをより理解しやすくするために役立ちます

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

### 注意
+ 一部のステップでは、2つの異なるターミナルウィンドウにコマンドを入力する必要があります。演習の期間中、2つのターミナルを起動して開いておくと便利かもしれません。
+ この演習における環境は、IPアドレス、ポート番号、ユーザー名、パスワード、ディレクトリ、演習スクリプトの推定所要時間を含め、異なる場合があります。
+ ターミナルウィンドウの`$`はOSのプロンプトです。
+ ターミナルウィンドウ内の "`tidb>`" または "`mysql>`" は、SQL コマンドプロンプトです。
+ この演習は、ノートパソコンなど、単一のマシンで実行できます。
+ これらの演習は`TiUP Playground`向けに設計されています。それを本番目的で使用しないように注意することが重要です。


### 前提条件
+ macOSまたはLinuxを使用しています。
+ [git](https://git-scm.com/)がインストールされています。
+ `mysql`コマンドラインクライアントをインストール済みです。


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


### タスク
1. スクリプトのレポジトリをクローンします。
2. デモスクリプトを確認して、理解します。
3. TiUP PlaygroundでTiDBサンドボックスクラスタを作成します。
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-demo.sh`を確認します。これを実行すると、9のインスタンス（3つのPDサーバーインスタンス、3つのTiKVサーバーインスタンス、2つのTiDBサーバーインスタンス、そして1つのTiFlashサーバーインスタンス）を持つTiDB Playgroundクラスタがアクティブになります。Palygroundのディレクトリタグは`demo`であり、Placement Driverサーバーのポート番号は`5379`です。
      ```
      $ cat playground-start-demo.sh 
      #!/bin/bash
      ~/.tiup/bin/tiup playground v6.5.1 \
        --tag demo \
        --db 2 \
        --pd 3 \
        --kv 3 \
        --tiflash 1 \
        --pd.port 5379
      ```


     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` を入力すると、Playground クラスタが終了します。
     ```
     $ ./playground-start-demo.sh
     ...
     To view the dashboard: http://127.0.0.1:5379/dashboard
     PD client endpoints: [127.0.0.1:5379 127.0.0.1:5380 127.0.0.1:5381]
     To view the Prometheus: http://127.0.0.1:59227
     To view the Grafana: http://127.0.0.1:59252
     ```

     TiDB Playgroundクラスタの状態を確認し、結果の情報を表示するには、新しいターミナルウィンドウを開いてください。
     ```
     $ cd tidb-course-201-lab/scripts
     $ ./playground-check.sh
     ...
     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
     ...
     tidb:4000>
     ```


     TiDBのバージョンを検証します。得られる結果は出力と異なる場合があります。
     ```sql
     SELECT TIDB_VERSION()\G
     ```
     ```
     tidb:4000> SELECT TIDB_VERSION()\G
     *************************** 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;
     Bye
     ```

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

     ```
     $ ./connect-4001.sh
     ...
     tidb:4001>
     ```


     TiDBのバージョンを検証します。得られる結果は出力と異なる場合があります。
     ```sql
     SELECT TIDB_VERSION()\G
     ```
     ```
     tidb:4000> SELECT TIDB_VERSION()\G
     *************************** 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:4001> exit;
     Bye
     ```


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

4. 監視ダッシュボードにアクセスするには、ブラウザを開いて、`http://127.0.0.1:5379/dashboard`を入力します。

     ダッシュボードサービスを提供する正しいアドレスとポートに自動的にリダイレクトされる場合があります。この場合、サービスのポート番号は`5380`です。

     <img src="./diagram/2011E011Dashboard_aa_001_20230415.png" width="20%" align="top"/>

     TiDB Playgroundクラスタのログイン資格情報は、ユーザー名`root`、パスワードは空です。`Overview`ページでは、インスタンスタイプと数が期待どおりであることを確認します。 

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

5. （任意）必要であれば、TiDB Playgroundクラスタをクリーンアップできます。


     以前に実行した `playground-start-demo.sh` を実行したターミナルに移動します。下記は表示される例です。
      ```
      ...
      CLUSTER START SUCCESSFULLY, Enjoy it ^-^
      ...
      To view the dashboard: http://127.0.0.1:5379/dashboard
      PD client endpoints: [127.0.0.1:5379 127.0.0.1:5380 127.0.0.1:5381]
      To view the Prometheus: http://127.0.0.1:59227
      To view the Grafana: http://127.0.0.1:59252
      ```


     TiDB Playground クラスタを中止するには、`Ctrl-C` を一度押します。すべての PD、TiKV、TiDB、TiFlash サーバーインスタンスが終了します。
      ```
      ^CPlayground receive signal:  interrupt
      Got signal interrupt (Component: playground ; PID: 47472)
      ...
      Wait pd(47473) to quit...
      Wait pd(47474) to quit...
      Wait pd(47475) to quit...
      tikv quit
      ```

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

### 追加の演習: TiDB Cloud Serverless Tier と TiDB Cloud Dedicated Tier の使用デモを見る

  <tr>
  <td><a href="https://pingcap-japan.storylane.io/share/aq4zwebfgzhv"><img src="./diagram/TiDBServerlessTour_ja_001_20230415.png" width="18.669%" align="start"/></a></td>
  <td><a href="https://pingcap-japan.storylane.io/share/htuq4moamxr5"><img src="./diagram/TiDBCloudTour_ja_002_20230407.png" width="20%" align="start"/></a></td>
  </tr>

## 演習終わり