## モジュール 1: TiDB Cloud クラスタへの接続

{% if TIDB_ENVIRONMENT == 'TiDB Cloud Starter' %}

### 手順 1. リモート Linux にログインする

+ ここをクリック - [ターミナル 1](ssh://monitor1-ssh#1) して、ハンズオンラボ用に割り当てられた仮想マシンに接続された新しいターミナルを開きます。

{% elif TIDB_ENVIRONMENT == 'TiDB Cloud Essential' %}

### 手順 1. 新しい TiDB Cloud Essential クラスタを作成する

> [!TIP]
> すでにハンズオンラボまたは評価目的でプロジェクト `tidblabs-project` 配下に TiDB Cloud Essential クラスタが作成済みの場合、この手順はスキップできます。

- [TiDB Cloud コンソールのプロジェクトページ](https://tidbcloud.com/org-settings/projects/) にアクセスします。
- 「Create New Project」をクリックします。新しいプロジェクト名は `tidblabs-project` とし、「Confirm」をクリックします。ご自身の TiDB Cloud アカウントに有効なクレジットカードが登録されている、または十分な TiDB Cloud クレジットが申請済みであることを確認してください。どちらもない場合は新しいプロジェクトを作成できません。

![create-tidblabs-project.jpg 85%](https://lab-static.pingcap.com/images/2025/11/12/a0d8440ea67b16e4d3b4d22fa522fb1f1014abe4.jpg)

- プロジェクト名をクリックしてプロジェクトページに入ります。

![click-tidblabs-project.png 85%](https://lab-static.pingcap.com/images/2025/11/13/385a38090615446a95ad7aae6977fb20f804bd50.png)

- `Clusters` ページで `Create Cluster` をクリックします。このボタンはページ中央または右上に表示されます。`Essential` を選択し、クラウドプロバイダーは `${LAB:CLOUD_PROVIDER}`、リージョンは `${LAB:REGION_NAME} (${LAB:REGION_CODE})` を選択してください。

![choose-essential-cp-region.jpg 85%](https://lab-static.pingcap.com/images/2025/11/13/7c9f14094559f38023dbde0a45e144365bb8bd72.jpg)

- 新しいクラスタ名は `tidblabs` とし、Capacity、Dual-layer Data Encryption、High Availability はデフォルト設定のままで問題ありません。右側の「Create」をクリックしてください。このクラスタは、ワークロード次第で自動的に RCU 2K～RCU 4K の間でスケールします。RCU の詳細は[ドキュメント](https://pingcap.co.jp/tidb-cloud-essential-pricing-details/)を参照してください。

![create-tidblabs-essential-cluster.png 85%](https://lab-static.pingcap.com/images/2025/11/13/62e0c238d48c9a6b5298e8d4e11636bcfcb67a65.png)

- 数秒待つと、クラスタがアクティブになります。

![tidblabs-essential-active.jpg 85%](https://lab-static.pingcap.com/images/2025/11/13/5358b8f697ad135498f08d69d7c58d1018c552b9.jpg)

- 右上の「Connect」ボタンをクリックします。

![click-connect-for-essential.jpg 85%](https://lab-static.pingcap.com/images/2025/11/13/d40772019b0ae45bda91931ad0259f09f551f8d3.jpg)

- 「Connect」パネルで Connect Type を `Public` にし、Operating System で `Debian/Ubuntu/Arch` を選択し、「Generate Password」をクリックします。

![tidblabs-essential-password-connect-generate.jpg 85%](https://lab-static.pingcap.com/images/2025/11/13/999bc20961199e2a4322451d19a15d930d931050.jpg)

- ここをクリック - [ターミナル 1](ssh://monitor1-ssh#1) して、ハンズオンラボで割り当てられた Ubuntu 仮想マシンに接続される新しいターミナルを開きます。

- 「Connect」パネル上の 4つの値（HOST、PORT、USERNAME、PASSWORD）をコピーし、下記コマンドの対応するプレースホルダ（<、>で囲まれた部分）を書き換えてから、[ターミナル 1](ssh://monitor1-ssh#1) で実行し、環境変数を設定してください。

![tidblabs-essential-four-info.jpg 85%](https://lab-static.pingcap.com/images/2025/11/13/a08ea9cdbbaa9de290fe5a413da7db71c4e20ac5.jpg)

```bash
export SERVERLESS_CLUSTER_HOST=<HOST>
export SERVERLESS_CLUSTER_PORT=<PORT>
export SERVERLESS_CLUSTER_USERNAME='<USERNAME>'
export SERVERLESS_CLUSTER_PASSWORD='<PASSWORD>'
```

{% endif %}

### 手順 2. TiDB Cloud クラスタへの接続を確認する

{% if TIDB_ENVIRONMENT == 'TiDB Cloud Starter' %}

+ 以下の操作はリモート仮想マシンで実行されます。次の3つのパターンでTiDB Cloud Starterに接続します。（MySQLクライアントを終了したい場合は、`EXIT`を使用します。）

+ A. 接続（SSLあり）：次のコマンドを使用して接続します。

  ```bash
  mysql \
   --comments -u '${LAB:SERVERLESS_CLUSTER_USERNAME}' -p'${LAB:SERVERLESS_CLUSTER_PASSWORD}' \
   -h ${LAB:SERVERLESS_CLUSTER_HOST} -P ${LAB:SERVERLESS_CLUSTER_PORT} \
   --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/ssl/certs/ca-certificates.crt
  ```

  ```output
  mysql>
  ```

  ```sql
  EXIT;
  ```

+ B. 接続（SSLあり）：`--ssl-mode`オプションを指定しない場合、デフォルトモードは`PREFERRED`で、MySQLクライアントは最初にSSL接続を確立しようとし、SSLが失敗した場合は暗号化されていない接続にフォールバックします。

  ```bash
  mysql \
   --comments -u '${LAB:SERVERLESS_CLUSTER_USERNAME}' -p'${LAB:SERVERLESS_CLUSTER_PASSWORD}' \
   -h ${LAB:SERVERLESS_CLUSTER_HOST} -P ${LAB:SERVERLESS_CLUSTER_PORT}
  ```

  ```output
  mysql>
  ```

  ```sql
  EXIT;
  ```

+ C. 接続（SSLなし）：`--ssl-mode=DISABLED`に変更します。接続エラーが発生します。

  ```bash
  mysql \
   --comments -u '${LAB:SERVERLESS_CLUSTER_USERNAME}' -p'${LAB:SERVERLESS_CLUSTER_PASSWORD}' \
   -h ${LAB:SERVERLESS_CLUSTER_HOST} -P ${LAB:SERVERLESS_CLUSTER_PORT} \
   --ssl-mode=DISABLED
  ```

  ```output
  mysql: [Warning] Using a password on the command line interface can be insecure.
  ERROR 1105 (HY000): Connections using insecure transport are prohibited. See https://docs.tidb.io/tidbcloud/secure-connections-to-serverless-tier-clusters
  ```

{% elif TIDB_ENVIRONMENT == 'TiDB Cloud Essential' %}

+ 以下の操作はリモート仮想マシンで実行されます。次の3つのパターンでTiDB Cloud Essentialに接続します。（MySQLクライアントを終了したい場合は、`EXIT`を使用します。）

+ A. 接続（SSLあり）：次のコマンドを使用して接続します。

  ```bash
  mysql \
   --comments -u ${SERVERLESS_CLUSTER_USERNAME} -p${SERVERLESS_CLUSTER_PASSWORD} \
   -h ${SERVERLESS_CLUSTER_HOST} -P ${SERVERLESS_CLUSTER_PORT} \
   --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/ssl/certs/ca-certificates.crt
  ```

  ```output
  mysql>
  ```

  ```sql
  EXIT;
  ```

+ B. 接続（SSLあり）：`--ssl-mode`オプションを指定しない場合、デフォルトモードは`PREFERRED`で、MySQLクライアントは最初にSSL接続を確立しようとし、SSLが失敗した場合は暗号化されていない接続にフォールバックします。

  ```bash
  mysql \
   --comments -u ${SERVERLESS_CLUSTER_USERNAME} -p${SERVERLESS_CLUSTER_PASSWORD} \
   -h ${SERVERLESS_CLUSTER_HOST} -P ${SERVERLESS_CLUSTER_PORT}
  ```

  ```output
  mysql>
  ```

  ```sql
  EXIT;
  ```

+ C. 接続（SSLなし）：`--ssl-mode=DISABLED`に変更します。接続エラーが発生します。

  ```bash
  mysql \
   --comments -u ${SERVERLESS_CLUSTER_USERNAME} -p${SERVERLESS_CLUSTER_PASSWORD} \
   -h ${SERVERLESS_CLUSTER_HOST} -P ${SERVERLESS_CLUSTER_PORT} \
   --ssl-mode=DISABLED
  ```

  ```output
  mysql: [Warning] Using a password on the command line interface can be insecure.
  ERROR 1105 (HY000): Connections using insecure transport are prohibited. See https://docs.tidb.io/tidbcloud/secure-connections-to-serverless-tier-clusters
  ```

{% endif %}

### 手順 3. 基本的なデータベース操作

{% if TIDB_ENVIRONMENT == 'TiDB Cloud Starter' %}

+ TiDBに接続します。

  ```bash
  mysql \
   --comments -u '${LAB:SERVERLESS_CLUSTER_USERNAME}' -p'${LAB:SERVERLESS_CLUSTER_PASSWORD}' \
   -h ${LAB:SERVERLESS_CLUSTER_HOST} -P ${LAB:SERVERLESS_CLUSTER_PORT} \
   --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/ssl/certs/ca-certificates.crt
  ```

  ```output
  mysql>
  ```

+ 新しいデータベースを作成します。

  ```sql
  DROP DATABASE IF EXISTS ${LAB:SERVERLESS_CLUSTER_DATABASE_NAME};
  CREATE DATABASE ${LAB:SERVERLESS_CLUSTER_DATABASE_NAME};
  SHOW DATABASES\G
  ```

  ```output
  *************************** 1. row ***************************
  Database: INFORMATION_SCHEMA
  *************************** 2. row ***************************
  Database: PERFORMANCE_SCHEMA
  *************************** 3. row ***************************
  Database: lab_demo_201_2370028
  *************************** 4. row ***************************
  Database: mysql
  *************************** 5. row ***************************
  Database: test
  5 rows in set (0.02 sec)
  ```

+ 新しいテーブルを作成します。

  ```sql
  USE ${LAB:SERVERLESS_CLUSTER_DATABASE_NAME};
  CREATE TABLE color (id INT AUTO_INCREMENT, name TEXT, Point INT, PRIMARY KEY (id));
  INSERT INTO color (name, Point) VALUES ('red', 1);
  INSERT INTO color (name, Point) VALUES ('orange', 1);
  INSERT INTO color (name, Point) VALUES ('yellow', 2);
  SELECT * FROM color;
  ```

  ```output
  Database changed
  Query OK, 0 rows affected (0.14 sec)

  Query OK, 1 row affected (0.04 sec)

  Query OK, 1 row affected (0.01 sec)

  Query OK, 1 row affected (0.01 sec)

  +----+--------+-------+
  | id | name   | Point |
  +----+--------+-------+
  |  1 | red    |     1 |
  |  2 | orange |     1 |
  |  3 | yellow |     2 |
  +----+--------+-------+
  3 rows in set (0.01 sec)
  ```

{% elif TIDB_ENVIRONMENT == 'TiDB Cloud Essential' %}

+ TiDB に接続します。

  ```bash
  mysql \
   --comments -u ${SERVERLESS_CLUSTER_USERNAME} -p${SERVERLESS_CLUSTER_PASSWORD} \
   -h ${SERVERLESS_CLUSTER_HOST} -P ${SERVERLESS_CLUSTER_PORT} \
   --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/ssl/certs/ca-certificates.crt
  ```

  ```output
  mysql>
  ```

+ 新しいデータベースを作成します。

  ```sql
  DROP DATABASE IF EXISTS lab_demo_${LAB:LAB_INSTANCE_ID};
  CREATE DATABASE lab_demo_${LAB:LAB_INSTANCE_ID};
  SHOW DATABASES\G
  ```

  ```output
  *************************** 1. row ***************************
  Database: INFORMATION_SCHEMA
  *************************** 2. row ***************************
  Database: PERFORMANCE_SCHEMA
  *************************** 3. row ***************************
  Database: lab_demo_${LAB:LAB_INSTANCE_ID}
  *************************** 4. row ***************************
  Database: mysql
  *************************** 5. row ***************************
  Database: test
  5 rows in set (0.02 sec)
  ```

+ 新しいテーブルを作成します。

  ```sql
  USE lab_demo_${LAB:LAB_INSTANCE_ID};
  CREATE TABLE color (id INT AUTO_INCREMENT, name TEXT, Point INT, PRIMARY KEY (id));
  INSERT INTO color (name, Point) VALUES ('red', 1);
  INSERT INTO color (name, Point) VALUES ('orange', 1);
  INSERT INTO color (name, Point) VALUES ('yellow', 2);
  SELECT * FROM color;
  ```

  ```output
  Database changed
  Query OK, 0 rows affected (0.14 sec)

  Query OK, 1 row affected (0.04 sec)

  Query OK, 1 row affected (0.01 sec)

  Query OK, 1 row affected (0.01 sec)

  +----+--------+-------+
  | id | name   | Point |
  +----+--------+-------+
  |  1 | red    |     1 |
  |  2 | orange |     1 |
  |  3 | yellow |     2 |
  +----+--------+-------+
  3 rows in set (0.01 sec)
  ```

{% endif %}

### 手順 4. MySQL互換性の確認

+ TiDBはMySQLと100%互換性があるわけではありません。ここでは、ウィンドウ関数やサポートされていないストアドプロシージャなどの MySQL 8.x 機能を確認します。次のURLから互換性を確認できます：[https://docs.pingcap.com/ja/tidb/stable/mysql-compatibility/](https://docs.pingcap.com/ja/tidb/stable/mysql-compatibility/)。

+ デフォルトの文字セットと照合順序が異なることを確認します。

  ```sql
  SHOW CREATE TABLE color\G
  ```

  ```output
  *************************** 1. row ***************************
         Table: color
  Create Table: CREATE TABLE `color` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` text DEFAULT NULL,
    `Point` int(11) DEFAULT NULL,
    PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin AUTO_INCREMENT=30001
  1 row in set (0.00 sec)
  ```

+ ウィンドウ関数の例。

  ```sql
  SELECT
    id,
    name,
    Point,
    RANK() OVER w as 'rank'
  FROM color
  WINDOW w AS (ORDER BY Point);
  ```

  ```output
  +----+--------+-------+------+
  | id | name   | Point | rank |
  +----+--------+-------+------+
  |  1 | red    |     1 |    1 |
  |  2 | orange |     1 |    1 |
  |  3 | yellow |     2 |    3 |
  +----+--------+-------+------+
  3 rows in set (0.01 sec)
  ```

+ ストアドプロシージャ。これはサポートされていないため失敗します。

  ```sql
  delimiter //
  CREATE PROCEDURE sample()
  BEGIN
  SELECT * FROM color;
  END //
  delimiter ;
  ```

  ```output
  ERROR 8108 (HY000): Unsupported type *ast.ProcedureInfo
  ```

- データベース接続は継続したまま、次のモジュールに進んでください。
