# 创建一个 TiDB Playground 集群


### 实验概述
+ 在本实验中，您将在您的本地电脑上使用 TiUP Playground 创建一个 TiDB 集群
+ Playground 集群仅用于测试目的，它有助于开发人员在不增加额外成本的情况下更好地理解 TiDB 接口。


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



### 注意事项
+ 您的练习环境可能与本实验不同，包括但不限于 `IP地址`、`端口号`、`用户名`、`密码`、`目录`和练习脚本的预计运行时间。
+ 在您的终端窗口中，`$` 是操作系统命令提示符。
+ 在您终端窗口中的 `tidb>` 或 `mysql>` 是 SQL 命令提示符。
+ 这些练习可以在一台单独的机器上运行，比如您的笔记本电脑。
+ 这些练习是为了 TiUP Playground 而设计的。请注意，TiDB Playground 集群并不适用于生产环境。


### 前提条件
+ 您的操作系统是 macOS 或 Linux。
+ 你已经安装了 [git](https://git-scm.com/)
+ 你已经安装了 `mysql` 命令行客户端


### 预计完成时间
+ 完成这个练习大约需要您花费 10 分钟。


### 实验任务
1. 克隆脚本存储库。
2. 请仔细阅读实验脚本，确保你已经理解它们。
3. 创建一个 TiUP Playground TiDB 沙箱集群。
4. 理解如何清理 TiUP 沙箱集群。


### 实验步骤
1. 从 `GitHub` 克隆实验演示用的存储库。
   ```
   $ git clone https://github.com/pingcap/tidb-course-201-lab.git
   Cloning into 'tidb-course-201-lab'...
   ...
   ```


2. 将当前工作目录更改为 `scripts/` 并查看两个脚本。


   将工作目录更改为`tidb-course-201-lab/scripts`。
   ```
   $ cd tidb-course-201-lab/scripts
   ```


   查看脚本 `Playground -start-demo.sh`，运行它将启动一个包含 10 个实例的 TiDB Playground 集群(3个 PD server 实例、3个 TiKV server 实例、2个 TiDB server 实例和 1 个 TiFlash server 实例)。Playground 的目录标签是 `demo`，第一个 Placement Driver server 的端口号是 `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
   ```


   查看脚本 `playground-check.sh`，它用来显示 TiDB Playground 集群实例的简化状态。
   ```
   $ cat playground-check.sh
   #!/bin/bash
   ~/.tiup/bin/tiup playground display
   ```


3. 启动一个 TiDB Playground 集群，并连接集群内的 TiDB server 实例。

   下载并安装 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 server 实例。
   ```
   $ 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>
   ```

   执行一个简单查询，您的运行结果可能与本实验指南不同。
   ```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 server 实例。
   ```
   $ 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>
   ```


   运行一个简单的查询，您的运行结果可能与本实验指南不同。
   ```sql
   SELECT TIDB_VERSION()\G
   ```
   ```
   tidb:4001> 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
   ```


   检查 `demo` 目录，它包含了您的 TiDB Playground 集群的完整文件结构。
   ```
   $ 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`。


   您可能会被自动重定向到提供 `dashboard` 服务的正确地址和端口。在本实验指南中，`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
   ```


   按一次 `Ctrl-C` 来终止 TiDB Playground 集群。所有 PD、TiKV、TiDB 和 TiFlash server 实例都将被终止。
   ```
   ^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
   ```


## 结束练习

