株式会社セキュアイノベーション
Menu

セキュリティコラム

  • ネットワーク

公開:2022.07.11 10:00 | 更新: 2022.08.08 08:59

既存DBにスキーマ管理ツール(Flyway)を導入する

Flywayについて

概要

データベースのバージョンを管理してくれるツールです。

対応しているデータベースは幅広く、ファイル名がFlywayのお約束に従っていればDDLやDMLでのマイグレーション(DBスキーマのバージョンアップ)を行ってくれます。

公式サイト:https://flywaydb.org/

既存DBへの導入方法

方法としては2通りあります。

  1. 現在のDBの状態をdumpしバージョン1のSQLとして用意する。
  2. Flywayのbaselineを使用し現在のDBの状態をバージョン1として認識させる。

今回は、既に独自のdump、DMLにてDBが構築されている想定のため、後者のbaselineを使用したやり方で導入します。

baselineとは、端的に言えば既にテーブルなどが定義され構築されているDBに対して指定のバージョンを付与することです。

Flywayの入手

今回はFlywayのCLIツールのLinux版を取得します。

2022年6月16日 時点での最新版は8.5.12でした。

cd <任意の場所>
wget -q https://repo1.maven.org/maven2/org/flywaydb/flyway-commandline/8.5.12/flyway-commandline-8.5.12-linux-x64.tar.gz
tar -zxvf flyway-commandline-8.5.12-linux-x64.tar.gz

設定について

設定ファイルconf/flyway.confを編集していきます。

/optに展開した場合

/opt/flyway-8.5.12/conf/flyway.conf

となります。

接続情報設定

接続情報だけ設定すれば他はデフォルトで動きます。

flyway.url=
flyway.user=
flyway.password=

マイグレーションファイル設定

flyway.locations=

設定例

flyway.url=jdbc:postgresql://localhost:5432/mydb
flyway.user=postgres
flyway.password=postgres


flyway.locations=filesystem:sql

導入手順

導入前にDBの状態を確認します。

実行コマンド

./flyway info

実行結果

Flyway is up to date
Flyway Community Edition 8.5.12 by Redgate

See what's new here: https://flywaydb.org/documentation/learnmore/releaseNotes#8.5.12

Database: jdbc:postgresql://localhost:5432/postgres (PostgreSQL 11.10)
Schema version: << Empty Schema >>

+----------+---------+-------------+------+--------------+-------+
| Category | Version | Description | Type | Installed On | State |
+----------+---------+-------------+------+--------------+-------+
| No migrations found |
+----------+---------+-------------+------+--------------+-------+


導入していきます。

実行コマンド

./flyway baseline -baselineVersion=1.0.1 -baselineDescription="baseline_migration"

実行結果

A new version of Flyway is available
Upgrade to Flyway 8.5.13: https://rd.gt/2X0gakb
Flyway Community Edition 8.5.12 by Redgate
See what's new here: https://flywaydb.org/documentation/learnmore/releaseNotes#8.5.12

Database: jdbc:postgresql://localhost:5432/postgres (PostgreSQL 11.10)
Creating Schema History table "postgres"."flyway_schema_history" with baseline …
Successfully baselined schema with version: 1.0.1

マイグレーションの実行

上記設定例の場合は、flyway/sql ディレクトリにDDLを配置します。

例:sql/V1.0.1.20220616__First_test_migration.sql

./flyway migrate

実行結果

A new version of Flyway is available
Upgrade to Flyway 8.5.13: https://rd.gt/2X0gakb

Flyway Community Edition 8.5.12 by Redgate
See what's new here: https://flywaydb.org/documentation/learnmore/releaseNotes#8.5.12

Database: jdbc:postgresql://localhost:5432/postgres (PostgreSQL 11.10)
Schema version: 1.0.1.20220616

+-----------+----------------+----------------------+----------+---------------------+----------+
| Category | Version | Description | Type | Installed On | State |
+-----------+----------------+----------------------+----------+---------------------+----------+
| | 1.0.1 | baseline_migration | BASELINE | 2022-06-16 17:51:47 | Baseline |
| Versioned | 1.0.1.20220616 | First test migration | SQL | 2022-06-16 18:08:53 | Success |
+-----------+----------------+----------------------+----------+---------------------+----------+

以上で既存DBへのFlywayの導入を終わります。

おまけ

公式のドキュメントが手描きで良い味出してます。

公式サイト:https://flywaydb.org/
Flyway by Redgate • Database Migrations Made Easy.
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
Flywayの使い方

最新のコラム記事

LOADING...

セキュアイノベーション サービス一覧

ネットワーク・サーバー

Webサイトを守る