はじめに
DB Branch とは
Section titled “DB Branch とは”DB Branch は、ZFS の Copy-on-Write(CoW)Snapshot を使って、MySQL と PostgreSQL の Branch を作るツールです。最初に、SQL ダンプや本番データベースからBaseを 1 つ作ります。Branchは、その Base の Snapshot から作るクローンです。データをコピーしないため、Base がどれだけ大きくても、Branch は数秒で使い始められます。Branch はそれぞれ独立したデータベースサーバーとして動くので、開発者ごとやプルリクエストごとに用意できます。
3 ノードの試験用クラスターでは、Branch の作成にかかった時間は PostgreSQL で 0.5 秒、MySQL で 3 秒でした(API を呼んでから接続できるようになるまで)。
| OS | apt でパッケージを入れられる Linux(Ubuntu 24.04 LTS で試験) |
| ストレージ | Base と Branch を置く ZFS プール(OpenZFS 2.2 で試験)。データは lz4 で圧縮されます。 |
| データベース | MySQL 8.0 / 8.4、PostgreSQL 18 で試験しています。 |
| ノード数 | 1 台から動作します。3 台以上でクラスターを組めます。 |
| メモリ | 各 Branch のサーバーに、既定で 128 MB のキャッシュを割り当てます。 |
正式な最小要件はまだ決めていません。試験用クラスターは、6 vCPU・11 GB のノードが 1 台、2 vCPU・3 GB のノードが 2 台という構成です。
インストール
Section titled “インストール”各ノードにパッケージをインストールし、使う ZFS プールを指定します。
sudo apt install db-branchsudo db-branch init --pool tankdb-branch init は、ZFS データセットの作成、ARC の上限の設定、管理者パスワードと TLS 証明書の生成を行います。最後に Web コンソールのアドレスと admin のパスワードが一度だけ表示されます。パスワードは /etc/db-branch/initial-admin-password にも保存されます。
最初の Base と Branch
Section titled “最初の Base と Branch”データベースエンジンをインストールしてから、ダンプから Base を作り、Branch を作成します。
db-branch runtime available postgresdb-branch runtime install postgres@18.6db-branch base create prod --runtime postgres@18.6 --dump /srv/prod.sql.gzdb-branch branch create feature-x --base prod --ttl 72hdb-branch branch dsn feature-x--ttl 72h を付けると、Branch は 72 時間後に自動で削除されます。branch dsn は、パスワード付きの接続 URL を表示します。どのノードからでも接続する方法は、Branch への接続を参照してください。
使い終わった Branch は、次のようにリセットまたは削除します。
db-branch branch reset feature-x # 作成後の変更をすべて破棄するdb-branch branch delete feature-x