Skip to main content

データベースバージョン管理とは?

Tianzhou · 2023年11月14日

これはデータベースのバージョン管理と database-as-code (GitOps) を扱うシリーズ記事です。

  1. データベースバージョン管理 (本記事)
  2. データベースバージョン管理、State ベースか Migration ベースか?
  3. Database as Code — 良いところ、悪いところ、見たくないところ
  4. Database as Code のランドスケープ
  5. データベースバージョン管理のベストプラクティス

データベースバージョン管理とは、データベーススキーマと関連データの変更を時系列で管理・追跡する運用です。バージョン管理システムと手法を使って、データベースに加えた変更の履歴を残し、チームが変更を追跡し、効果的に協働し、自信を持って更新をデプロイできるようにします。

コードを管理するためにバージョン管理システム (VCS) を使うのは、すでに事実上の標準です。一方で、データベースに対して VCS や同等の手法を採り入れる動きはまだ初期段階にあります。以下では、データベースバージョン管理の主要な要素と、Bytebase がそれぞれをどう支えるかを整理します。

コラボレーションとチームワーク

バージョン管理は、データベース変更を共有・管理する中央集約のリポジトリを提供することで、チームメンバー間の協働を支えます。Bytebase は GitLab/GitHub のような存在で、開発者と DBA がデータベース変更について協働するためのワークスペースを提供します。

issue-detail

変更履歴と追跡

バージョン管理システムは、データベーススキーマと関連スクリプトに加えられた変更の履歴を保存します。この履歴には、誰が、いつ、なぜ変更したかが含まれます。Bytebase ではすべての変更履歴が記録されます。

change-history

change-history-diff

デプロイとロールバック

変更履歴を残すことで、データベース更新を統制された形でデプロイできます。問題が起きた場合は、以前のバージョンのスキーマや関連データへロールバックできます。Bytebase は次のロールバック手段を提供します。

  • データロールバック。MySQL の binlog のような undo ログを使ってデータ変更をロールバックする。
  • バックアップからのリストアと Point-in-time-Recovery (PITR)。Bytebase に手動または定期バックアップを実行させ、そこからリストアできる。
  • スキーマ同期。あるデータベースのスキーマを別のデータベースに同期する。Bytebase が差分を計算し、変更を適用する。

VCS 連携 #GitOps

データベースバージョン管理は、開発ワークフロー全体に組み込まれるべきです。継続的インテグレーションと継続的デプロイ (CI/CD) のパイプラインを構築すれば、データベース変更の適用プロセスを自動化できます。 VCS の CI で Bytebase による SQL Lint を実行するように設定できます。以下は GitHub Action と GitLab CI それぞれの例です。

github gitlab

さらに、Bytebase プロジェクトを VCS リポジトリに連携させて、コード変更を監視するように設定できます。開発者はマイグレーションスクリプトを引き続き VCS で管理し、新しいマイグレーションスクリプトがコミットされると、Bytebase がそのイベントを検知し、当該マイグレーションスクリプトをデプロイする Issue を作成します。

git issue

まとめ

結局のところ、データベースバージョン管理もバージョン管理です。開発者はコード変更と同じ感覚でデータベース変更を扱いたいと考えます。そして GitLab/GitHub と同じように、Bytebase はチームがデータベース変更を Git ライクに管理するために作られています。今すぐライブデモをお試しください。

ブログに戻る

データベース開発のスタンダードを体験する