これはデータベースのバージョン管理と database-as-code (GitOps) を扱うシリーズ記事です。
- データベースバージョン管理 (本記事)
- データベースバージョン管理、State ベースか Migration ベースか?
- Database as Code — 良いところ、悪いところ、見たくないところ
- Database as Code のランドスケープ
- データベースバージョン管理のベストプラクティス
データベースバージョン管理とは、データベーススキーマと関連データの変更を時系列で管理・追跡する運用です。バージョン管理システムと手法を使って、データベースに加えた変更の履歴を残し、チームが変更を追跡し、効果的に協働し、自信を持って更新をデプロイできるようにします。
コードを管理するためにバージョン管理システム (VCS) を使うのは、すでに事実上の標準です。一方で、データベースに対して VCS や同等の手法を採り入れる動きはまだ初期段階にあります。以下では、データベースバージョン管理の主要な要素と、Bytebase がそれぞれをどう支えるかを整理します。
コラボレーションとチームワーク
バージョン管理は、データベース変更を共有・管理する中央集約のリポジトリを提供することで、チームメンバー間の協働を支えます。Bytebase は GitLab/GitHub のような存在で、開発者と DBA がデータベース変更について協働するためのワークスペースを提供します。

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


デプロイとロールバック
変更履歴を残すことで、データベース更新を統制された形でデプロイできます。問題が起きた場合は、以前のバージョンのスキーマや関連データへロールバックできます。Bytebase は次のロールバック手段を提供します。
- データロールバック。MySQL の binlog のような undo ログを使ってデータ変更をロールバックする。
- バックアップからのリストアと Point-in-time-Recovery (PITR)。Bytebase に手動または定期バックアップを実行させ、そこからリストアできる。
- スキーマ同期。あるデータベースのスキーマを別のデータベースに同期する。Bytebase が差分を計算し、変更を適用する。
VCS 連携 #GitOps
データベースバージョン管理は、開発ワークフロー全体に組み込まれるべきです。継続的インテグレーションと継続的デプロイ (CI/CD) のパイプラインを構築すれば、データベース変更の適用プロセスを自動化できます。 VCS の CI で Bytebase による SQL Lint を実行するように設定できます。以下は GitHub Action と GitLab CI それぞれの例です。

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

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