tiupを使ってTiDBで遊ぼう
この記事は、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