[TiDB] GUI SQLツールからTiDB Serverlessへの接続方法

## はじめに

みなさんTiDBに接続する際には何を使っていますか？ 
TiDB Cloudの接続時に接続方法が表示されるMySQL clientやMyCLIなどのコマンドラインクライアントももちろんですが、GUIクライアントでの接続も多いのではないかと思います。

TiDB Serverlessに接続する際にはTLS接続が必須となるため、クライアントによってはTLSの設定に何を設定すれば良いか困るケースもあります。ここでは、いくつかの代表的なGUIクライアントの接続方法を見ていきたいと思います。

### CAファイルの取得

:::note
つい先日のアップデートで、TiDB Serverlessの接続画面からCAファイルがダウンロードできるようになりました!
:::

TiDB Serverlessの接続画面で、`Operating System`でWindowsを選択してください。
このときに表示されるリンクから、CAファイルがダウンロード可能です。

![スクリーンショット 2023-12-13 9.28.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/acfe496f-34d0-92b2-21c2-0dcad8227972.png)


### CAファイルの取得（従来の方法）

:::note warn 
以下の記載は古い方法ですが、参考の為残しておきます
::: 

[ドキュメントに記載](https://docs.pingcap.com/ja/tidbcloud/secure-connections-to-serverless-clusters)されているように、TiDB Serverlessのサーバ証明書はLet's Encryptが発行しているものを利用しているので、下記のファイルをダウンロードしておきます。

* [Mozilla CA証明書バンドル](https://curl.se/docs/caextract.html): リンク先の cacert.pem からダウンロード

Mozillaのバンドルには複数のルート証明書が含まれているのでドキュメントではそちらを推奨していますが、複数の証明書が含まれているのを許容しないようなクライアントでは ISRG Root X1の方を使うようにと記載してあります。
ただ今回紹介するクライアントはすべてMozilla CA証明書バンドルを受け付けましたので、cacert.pemだけで問題ありません。

## DBeaver (Mac/Linux/Windows)
https://dbeaver.io/

クロスプラットフォームで動作するクライアントで、MySQL系以外にもさまざまなデータベースをサポートしています。

### 接続設定
TiDBもサポートされています。データベース接続画面からTiDBを選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/51cad284-f94e-b7fe-2215-374bfdf8239d.png)

接続設定では`ホスト`、`データベース`、`ユーザー名`、`パスワード`を指定。ポートは最初から4000になっているのでそのまま
![スクリーンショット 2023-12-04 7.52.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/0ed70346-d30c-7596-a6f9-74993dc960ae.png)

SSLタブで、`SSLを使用する`にチェックを入れ、`CA Certificate`に、ダウンロードしたCA証明書バンドルを指定します。
![スクリーンショット 2023-12-04 7.57.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/c0d32ca0-2140-7662-680d-5d601f8afbc3.png)

これでOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/fb6afddf-4164-9cc5-11da-f0c45b4a3ec1.png)

## VSCode (SQLTools) (Mac/Linux/Windows)
https://marketplace.visualstudio.com/items?itemName=mtxr.sqltools

VSCode上からデータベースに接続できるプラグインの中から、今回はSQL Toolsを取り上げます。
データベース毎のドライバがあり、ドライバをインストールすることで様々なデータベースに接続できるようになっています。

### 拡張機能のインストール

VSCodeの拡張機能管理画面から、`SQLTools` と `SQLTools MySQL/MariaDB/TiDB`をインストールします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/a3c76f97-a88a-3d87-abaa-07f535779aef.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/fa3ee44f-a319-33f6-75d4-098ab08ad4f2.png)

### 接続設定
拡張機能をインストールすると、左側にアイコンができるのでそれをクリックし、`New Connection`から接続設定を行います。
はじめにTiDBを選択し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/10aeb450-6ab0-4c05-54cf-938f4098f52d.png)

`Connection name`(何でも良い)、`Server Address`、`Port`、`Database`、`Username` をセットします。パスワードは後から聞かれます。
![スクリーンショット 2023-12-04 8.12.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/c9d3c1b2-bfb0-c208-891a-3824dd6d0749.png)

画面を下にスクロールして、SSLを`Enable`にして、証明書バンドルのパスを設定します。
![スクリーンショット 2023-12-04 8.15.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/de34df34-b4d8-91d2-177a-cef51b3fec98.png)

Test Connection時にパスワードの入力を求められるのでパスワードを入力すればOKです。
![スクリーンショット 2023-12-04 8.19.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/41897637-a70f-7912-f508-0e0805edea2e.png)

## HeidiSQL (Windows)
https://www.heidisql.com/

Windowsで動作するGUIクライアントです。様々なDBに接続できます。
TiDB接続用の設定はなく、MySQL/MariaDBとして接続します。

### 接続設定

ドライバとしてMySQL/MariaDBを選択し、`Hostname`、`User`、`Password`、`Port`を設定します。
![heidisql-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/c61f86cf-c5fe-d529-1cf6-c799be20d3ad.png)

SSLタブで、SSLの有効化と証明書バンドルのパスを設定します。
![heidisql-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/73523ce6-1e9b-3860-b477-eb8ac3da12a1.png)

これでOKです。
![heidisql-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/cee0776d-3d84-e2a3-25bb-5660059a919d.png)

## Sequel Ace (Mac)
https://sequel-ace.com/

Macで動作するGUIクライアントです。MySQL/MariaDB用です。

### 接続設定

`Host`、`Username`、`Password`、`Database`、`Port`を設定して、`Require SSL`にチェックを入れます。
`CA Cert`に証明書バンドルのパスを設定します。
![スクリーンショット 2023-12-04 8.54.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/b950ee37-6fb1-dea2-a099-bfd3c64db693.png)

これでOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/bdc33ee2-03de-6532-a83b-bd701022fba7.png)