👋

tiupを使ってTiDBで遊ぼう

2023/12/03に公開

この記事は、TiDB Advent Calendar 2023 3日目の記事です。

皆さんはTiDBを使う時、まずどのように始めていますか?TiDBにはエコシステムとしていくつかのツールを提供していますが、それらのエコシステムを統一的に扱うためのtiupというコマンドラインツールを提供しています。
この記事では、tiupを使って簡単にTiDBを始める方法をご紹介します。

tiupとは

そもそもtiupとは何でしょうか。tiupはTiDBのエコシステムが提供するツールやソフトウェアを管理するためのパッケージマネージャーです。例えば、TiDBまたはMySQL互換のDBからデータをexportするdumplingというツールがあります。このツール自体を単体でインストールして利用することができますが、以下のようにして、ツールをインストールし、tiupのサブコマンドとして利用することもできます。

$ tiup install dumpling

tiupを利用すれば、ユーザーはわざわざツールをダウンロードするためのURLを探す必要はありませんし、必要であれば任意のバージョンを指定してインストールすることもできます。

tiupはパッケージマネージャーとしてだけでなく、TiDBを操作および管理するコマンドラインツールでもあります。詳細は省きますが、例えばオンプレミス環境でTiDBクラスタを構築したい場合、YAMLファイルに構成を定義して以下のようにコマンドを実行すれば、TiDBクラスタを簡単に立ち上げることができます。

$ tiup cluster deploy <cluster-name> <version> <topology.yaml> [flags]

興味があるかたは https://docs.pingcap.com/tidb/stable/tiup-cluster をご覧ください。

tiupで手軽にTiDBを始めよう

前置きが長くなりましたが、ここからが本題です。tiupで手軽にTiDBを始めるにはどうしたら良いでしょうか。"手軽に"というのは、細かい前提条件を知ることなく、環境を汚さず、始めるときも止めるときにスパッと簡単にできることです。答えは簡単で、以下のコマンドラインを入力すればあっという間にTiDBクラスタがお手元の環境で立ち上がります。以後、tiup playgroundで起動したクラスタをPlaygroundクラスタと呼びます。

$ tiup playground

デフォルトではポート4000番を利用します。4000番が使えない場合は空いてるポートを探して利用しますので、同時に複数のPlaygroundクラスタを起動させることも可能です。

これでTiDBを始めることができました!あとはお好みのDBクライアントで接続して、そのまま使うことができます。

ご利用にあたって2つ注意点があります。
1つ目は、Playgroundクラスタはデータを保持しないということです。クラスタが終了したらデータは消えてしまいます。もし保持したい場合は --tagオプションをつけてください。

2つ目は、Playgroundクラスタを本番環境で利用しないでください。こちらは動作確認や開発環境用途でご利用ください。

TiDBを始めるだけならこれで終わりなのですが、それだとつまらないですね?まだ小ネタがありますので、もう少しだけお付き合いください。

手軽にPlaygroundクラスタに接続したい

Playgroundクラスタがたちあがると、以下のようなメッセージがでて、接続先を知ることができます。

...
🎉 TiDB Playground Cluster is started, enjoy!

Connect TiDB:   mysql --comments --host 127.0.0.1 --port 4000 -u root
TiDB Dashboard: http://127.0.0.1:2379/dashboard
Grafana:        http://127.0.0.1:3000

このmysqlコマンドをコピペして接続しても良いのですが、ちょっと面倒くさいですね。そんなときは tiup client と入力すると、ローカルにあるPlaygroundクラスタの一覧が出てきて簡単に接続できます。

$ tiup client
tiup is checking updates for component client ...
...
# 実際には画面が切り替わって以下が表示される
┌─Choose a endpoint to connect─────────────────────────────────────────────────┐
│ TvphGLj mysql://root@127.0.0.1:4000                                          │
└──────────────────────────────────────────────────────────────────────────────┘

複数のPlaygroundクラスタがある場合は一覧にすべて出てくるので、接続先の選択も簡単です。

手軽にデモDBを用意したい

tiupを使ってPlaygroundには簡単に接続できることがわかりました。そうなると、次は色々試してみたいですね?もちろん空のDBを使って自由に何かをすることはできますが、サンプルデータが欲しくなります。

TiDBはMySQLプロトコルと互換があるので、MySQLに対応したサンプルデータのSQLを投入しても良いですし、DDLとCSVがあればLOAD DATAコマンドを使ってデータを投入することもできます。でも、ちょっと面倒くさいですね。そんなときは tiup demo bookshop prepareでサンプルデータを簡単に用意することができます。

# Playgroundクラスタがlocalhost:4000で起動しているとします
$ tiup demo bookshop prepare
tiup is checking updates for component demo ...
Starting component `demo`: ...
dataset bookshop prepare
INFO[0000] Creating the tables if not existed....        dataset=bookshop
INFO[0000] Creating table books.                         dataset=bookshop
INFO[0000] Creating table users.                         dataset=bookshop
...

このコマンドを使うと、Playgroundクラスタに bookshop というDBが作成され、数十秒程度で以下のテーブルが用意されます。

mysql > show tables;
+--------------------+
| Tables_in_bookshop |
+--------------------+
| authors            |
| book_authors       |
| books              |
| orders             |
| ratings            |
| users              |
+--------------------+
6 rows in set (0.00 sec)

もちろん、各テーブルにはデータが入っています。

mysql > select count(*) from authors;
+----------+
| count(*) |
+----------+
|    20000 |
+----------+
1 row in set (0.02 sec)

mysql > select * from authors limit 10;
+---------+----------------------+--------+------------+------------+
| id      | name                 | gender | birth_year | death_year |
+---------+----------------------+--------+------------+------------+
|  213443 | Royce Kerluke        |      1 |       1942 |       1942 |
|  297380 | Salvador Lang        |      1 |       1949 |       1949 |
|  712024 | Lurline McLaughlin   |      0 |       1997 |       NULL |
|  775120 | Hermann Dickinson    |      0 |       1996 |       1999 |
|  904655 | Preston Kohler       |      0 |       1991 |       NULL |
|  914730 | Sincere Christiansen |      0 |       1995 |       NULL |
|  983275 | Athena Harris        |      1 |       1961 |       1995 |
| 1491253 | Loma Kuvalis         |      1 |       1976 |       NULL |
| 1676871 | Kiara Doyle          |      1 |       1975 |       2004 |
| 1774643 | Angelina Fadel       |      0 |       1948 |       1981 |
+---------+----------------------+--------+------------+------------+
10 rows in set (0.00 sec)

これらのテーブルの構造は https://docs.pingcap.com/tidb/stable/dev-guide-bookshop-schema-design#description-of-the-tables でご確認いただけます。

これでTiDBを使ったアプリケーション開発をすぐに始めることができますね!

え?これを使ったサンプルアプリとか無いのかって?ありますよ!TiDB Cloud上で提供されているTiDB ServerlessとVercelを使ったLive demoを https://vercel.com/templates/next.js/tidb-cloud-starter で見ることができますので、ぜひ参考にしてくださいね。

まとめ

いかがでしたか?この記事では以下の3つのコマンドを通じて、tiupを使ってTiDBを気軽に始められることをご紹介しました。

  • tiup playground: ローカル環境に簡易なTiDBクラスタを立ち上げます。デフォルトではデータを保持しないので、保持したい場合は --tagオプションをつけてください。本番環境には適していません。
  • tiup client: ローカルのPlaygroundクラスタに接続します。
  • tiup demo bookshop prepare: サンプルDBbookshopを、指定したTiDBクラスタに作成します。

この記事が、皆さんがTiDBを始める切っ掛けになれば嬉しいです!

Discussion