はじめに
TiDBはオープンソースなのでソースコードが公開されています。ソースコードが公開されていたらそれをビルドしたくなるのは人情というもの・・・
本記事ではTiDBのビルド方法について説明します。
TiDB開発ガイド
TiDBには開発ガイドがあり、ここにビルドやデバッグ、コントリビュートのやり方が記載されています。
ビルドだけではなく、TiDBの内部のアーキテクチャや構造についても解説してあるのでぜひごらんください。
ビルド
まずはgithubリポジトリをcloneしましょう。ビルドするブランチは好きなものでいいですが、今回はリリースしたばかりのv8.5を選択しました。
git clone https://github.com/pingcap/tidb.git
git fetch
git branch release-8.5
次にビルドですが、開発ガイドに沿ってgoをインストールして、必要なツールを入れて、、、でももちろんかまいませんが、リポジトリには親切にもビルド用のDockerfileがあります。これを使ってみます。
Dockerによるビルド
Dockerfileを確認します。
# Copyright 2022 PingCAP, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# The current dockerfile is only used for development purposes. If used in a
# production environment, please refer to https://github.com/PingCAP-QE/artifacts/blob/main/dockerfiles/cd/builders/tidb/Dockerfile.
# Builder image
FROM golang:1.23 as builder
WORKDIR /tidb
COPY . .
ARG GOPROXY
ENV GOPROXY ${GOPROXY}
RUN make server
FROM rockylinux:9-minimal
COPY --from=builder /tidb/bin/tidb-server /tidb-server
WORKDIR /
EXPOSE 4000
ENTRYPOINT ["/tidb-server"]
2ステージビルドになっており、tidbのビルドと、それを使って tidb-server
コマンドを実行するイメージを作成します。ビルドが終わると bin/tidb-server
ができて、これがtidbのバイナリになります。
では、ビルドしてみましょう。tidb-custom
というイメージ名をつけています。
docker build ./ -t tidb-custom
ビルドは数分かかります。
実行
Dockerによる実行
ビルドが終わったら、実行してみます。実はtidbサーバ単独でも動かすことができます。
標準のTiDBと区別がつきやすいように、port 4001で動かします。
docker run -it -p 4001:4000 tidb-custom
接続してバージョンを見てみます。
> mysql -u root -h 127.0.0.1 -P 4001
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2097154
Server version: 8.0.11-TiDB-v8.5.0-3-g71bc6250ec-dirty TiDB Server (Apache License 2.0) Community Edition, MySQL 8.0 compatible
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select version();
+----------------------------------------+
| version() |
+----------------------------------------+
| 8.0.11-TiDB-v8.5.0-3-g71bc6250ec-dirty |
+----------------------------------------+
1 row in set (0.01 sec)
良さそうですね。
TiDB Playgroundでの利用
Dockerでの実行でtidbサーバ単独の動作は確認できますが、これではtidbクラスタとしての検証ができません。
tiupから起動するTiDB Playgroundでは、それぞれのコンポーネントのバイナリを指定することができます。tidbサーバのバイナリを指定して実行してみましょう。
tiup playgroundで指定できるバイナリはローカル環境でビルドしたものです。先程のDockerfileでビルドしたものはlinux用なのでMacでは利用できないことに注意してください。
tiup playground v8.5.0 --db.binpath bin/tidb-server
Start pd instance: v8.5.0
Start tikv instance: v8.5.0
Start tidb instance: /Users/.../tidb/bin/tidb-server
Waiting for tidb instances ready
127.0.0.1:4000 ... Done
Start tiflash instance: v8.5.0
Waiting for tiflash instances ready
127.0.0.1:3930 ... Done
🎉 TiDB Playground Cluster is started, enjoy!
Connect TiDB: mysql --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
通常のPlayground同様、ログなども ~/.tiup/data
以下に保存されますし、デバッガやプロファイラのアタッチなどもできる(はず)です。
これでビルドから実行までの一連の流れができたので、あとはログを仕込むなりSQLを拡張するなりやりたい放題です!!
おわりに
TiDBはDockerファイルを使って簡単にビルドができるようになっています。ビルドしたTiDBはTiUP Playgroundなどでも利用できるので、独自ビルドを作って色々遊んでみてください!