CLOVER🍀

That was when it all began.

Ubuntu Linux 22.04 LTSに、MySQL互換の分散データベースTiDBをインストールして(ローカルでクラスターを立ち上げて)みる

これは、なにをしたくて書いたもの?

MySQL互換の分散データベースであるTiDBを少し試してみたいなと思いまして。

TiDB: The Advanced Distributed SQL Database

今回は、あまりなにも考えずにUbuntu Linux 22.04 LTSにインストールしてみます。

TiDB

TiDBは、PingCAPが開発しているオープンソースでMySQL互換のデータベースです。

TiDB: The Advanced Distributed SQL Database

GitHubリポジトリーはこちら。

GitHub - pingcap/tidb: TiDB is an open-source, cloud-native, distributed, MySQL-Compatible database for elastic scale and real-time analytics. Try AI-powered Chat2Query free at : https://tidbcloud.com/free-trial

TiDBのトップページを見ると、以下を特徴にしているようです。

提供形態としては、以下の3つがあります。

自分は、基本的にはセルフホスティングで扱います。

ドキュメントはこちら。

TiDB Introduction | PingCAP Docs

環境

今回の環境は、こちら。Ubuntu Linux 22.04 LTSです。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.4 LTS
Release:        22.04
Codename:       jammy


$ uname -srvmpio
Linux 5.15.0-105-generic #115-Ubuntu SMP Mon Apr 15 09:52:04 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

TiDBをインストールする

まずは対応OSを見てみます。

Software and Hardware Recommendations / OS and platform requirements

基本的にはRed Hat Enterprise Linux互換のOSが推奨みたいですね。

Ubuntu Linuxでも動作することは書かれていますが、エンタープライズレベルの運用品質は保証しないそうです。

その後に続く必要リソースはまったく足りないのですが、まあ気にせずに今回は進めてみます。

こちらを見て進めればよさそうです。

Quick Start Guide for the TiDB Database Platform | PingCAP Docs

まずはTiUpというツールをインストールします。

$ curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh

インストールが終わると、こんな表示が出ます。

Successfully set mirror to https://tiup-mirrors.pingcap.com
Detected shell: bash
Shell profile:  /home/xxxxx/.bashrc
/home/vagrant/.bashrc has been modified to add tiup to PATH
open a new terminal or source /home/xxxxx/.bashrc to use it
Installed path: /home/xxxxx/.tiup/bin/tiup
===============================================
Have a try:     tiup playground
===============================================

シェルを新しく立ち上げるか、.bashrcを読み込めばtiupコマンドが使えるようになります。

$ . .bashrc

バージョン確認。

$ tiup --version
1.15.0 v1.15.0-nightly-8
Go Version: go1.21.9
Git Ref: master
GitHash: 2c38be765363cf699104a3f234513460d155add2

ローカルでTiDB、TiKV、PD、TiFlashのインスタンスをひとつずつ起動します。
※これらの構成要素についてはまた後に調べましょう

$ tiup playground

tiup playgroundはローカルでクラスターを立ち上げるコマンドのようです。なので、インストールというよりはQuickStart的に
ローカルでクラスターを起動するというのが今回やっていることですね。

今回は、TiDB 8.0.0のインストールを始めました。

Note: Version constraint  is resolved to v8.0.0. If you'd like to use other versions:

起動すると、こんな表示が出ます。

🎉 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

ダッシュボード、Grafanaもついているようです。

接続もtiupコマンドで行うようです。

$ tiup client

初回はダウンロードが行われます。

プロンプトはこんな感じでした。

my:root@127.0.0.1:4000=>

バージョンを確認してみます。

my:root@127.0.0.1:4000=> select version();
     version()
--------------------
 8.0.11-TiDB-v8.0.0
(1 row)

データベースを作成してみます。

my:root@127.0.0.1:4000=> create database my_database;
CREATE DATABASE


my:root@127.0.0.1:4000=> use my_database;

テーブルを作成してデータの登録、取得の確認。

my:root@127.0.0.1:4000=> create table t1(c1 varchar(20));
CREATE TABLE
my:root@127.0.0.1:4000=> insert into t1(c1) values('Hello World');
INSERT 1
my:root@127.0.0.1:4000=> select * from t1;
     c1
-------------
 Hello World
(1 row)

MySQLのクライアントツールでもアクセスできるみたいなので、インストールしておきましょう。

$ curl -LO https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb
$ sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb
$ sudo apt update
$ sudo apt install mysql-shell mysql-client

なんとなく、通常のMySQLクライアントとMySQL Shellの両方をインストールしておきました。

接続。rootのパスワードは空です。

$ mysqlsh root:@localhost:4000 --sql

データベースを切り替えて、先ほど登録したテーブルとデータを確認。

 MySQL  localhost:4000 ssl  SQL > use my_database;
Default schema set to `my_database`.
Fetching global names, object names from `my_database` for auto-completion... Press ^C to stop.
 MySQL  localhost:4000 ssl  my_database  SQL > select * from t1;
+-------------+
| c1          |
+-------------+
| Hello World |
+-------------+
1 row in set (0.0029 sec)

OKですね。

ここで、tiup playgroundコマンドをCtrl-cで止めます。

ところで、現時点の安定版は7.5のようなのですが、8.0.0をインストールしていましたね。この差はなんなのでしょうか?
バージョンについては、こちらに記載があります。

TiDB Versioning | PingCAP Docs

こちらのページを見ると、どうやら8.0は開発マイルストーンリリース(DMR)のようです。

では、今度は7.5をインストールしてみることにします。

1度すべてのコンポーネントを削除。

$ tiup uninstall --all
Uninstalled all components successfully!

tiup listで現在のコンポーネントのバージョンを確認。すべてのコンポーネントのバージョンを確認すると遅いので、TiDBに絞って
確認しました。

$ tiup list tidb

7.5系の最新バージョンは7.5.1のようなので、こちらを指定することにします。

$ tiup playground v7.5.1

ちなみに、TiDBの各コンポーネントはデフォルトでローカルにのみバインドするようなので、必要であれば以下のほうに--hostオプションを
指定します。

$ tiup playground v7.5.1 --host 0.0.0.0

--hostオプションだけではなく、--db.hostなど細かく指定できるようなのでそちらはtiup playground --helpで確認しましょう。

ちなみに、今回--host 0.0.0.0付きで実行したらこんな感じになりました。

🎉 TiDB Playground Cluster is started, enjoy!

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

見た感じ特定のIPアドレスにバインドされているように見えますが、実際にはすべてのネットワークインターフェースに対して
バインドされています。

接続して

$ tiup client

バージョン確認。

my:root@192.168.121.182:4000=> select version();
     version()
--------------------
 8.0.11-TiDB-v7.5.1
(1 row)

7.5.1なのですが、これを見て気づきましたが8.0.11というのはベースのMySQLのバージョンでしょうね。

最後にダッシュボードとGrafanaにログインして終わりにしましょう。

ダッシュボードは、http://[host]:2379/dashboardにアクセスします。デフォルトのユーザー名はroot、パスワードは空です。

Grafanaは、http://[host]:3000にアクセスします。デフォルトのユーザー名とパスワードは、両方ともadminです。
ログインすると、すぐにパスワードの変更を求められますけど。

最初はなにがあるかわかりにくいですが、トップフォルダーにアクセスするとテスト用のクラスターを認識していることがわかります。
展開するとこんな感じです。

作成されているダッシュボード。

ちなみに、コンソールには出力されていませんでしたがhttp://[host]:9090/でPrometheusのダッシュボードにもアクセスできます。

こちらは認証不要です。

今回はこんなところでしょうか。

おわりに

MySQL互換の分散データベースであるTiDBを、Ubuntu Linux 22.04 LTS上でローカルにクラスターを起動してみました。

導入自体はTiUpで簡単にできるのですが、リソース少なめの環境で試していたら全然立ち上がらなくて苦労しました…。
まあ、そういう環境で使うものじゃないですよね…。

手持ちの環境がちょっと貧弱なのであまり使いこなせない気はしますが、少しずつ見ていけたらいいかなと思います。