すでに存在するデータベースにFlywayを適用する(その2) #flyway

概要

下記記事の続き。

今度はbaselineの設定を活用して、SQLとFlywayの足並みを調整する。

su-kun1899.hatenablog.com

テスト用のデータベースを作る

create database if not exists flyway_sample character set utf8

flyway管理外のテーブルを追加する

mysql -u root -D flyway_sample_2
create table person (
    `person_id` int not null,
    `name` varchar(100) not null
);
create table hoge (
    `hoge_id` int not null,
    `name` varchar(100) not null
);

DDLを作成する

  • src/main/resources/db/migration
    • V1_0_0__create_person.sql
    • V1_0_1__create_hoge.sql
    • V1_2_0__create_fuga.sql
    • V1_2_1__create_piyo.sql

この場合、既にpesonテーブルとhogeテーブルは作成済のため、実際に適用したいのは V1_2_0 以降となる。

Baselineを設定する

pom.xmlにて、baselineOnMigratebaselineVersion を指定する。

baselineOnMigrateをtrueにして、baselineを有効化する。

baselineVersionは指定したバージョンがBaseline(適用済)となる。

つまり、1.0.1 を指定すると 1.2.0 移行のSQLがFlywayでMigrateされる

<build>
    <plugins>
        <plugin>
            <groupId>org.flywaydb</groupId>
            <artifactId>flyway-maven-plugin</artifactId>
            <version>4.0.3</version>
            <configuration>
                <url>
                    jdbc:mysql://localhost:3306/flyway_sample
                </url>
                <user>root</user>
                <!-- Baselineの設定 -->
                <baselineOnMigrate>true</baselineOnMigrate>
                <baselineVersion>1.0.1</baselineVersion>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.1.6</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

flyway:migrate する

mvn flyway:migrate 
+---------+-----------------------+---------------------+---------+
| Version | Description           | Installed on        | State   |
+---------+-----------------------+---------------------+---------+
| 1.0.0   | create person         |                     | <Baseln |
| 1.0.1   | << Flyway Baseline >> |                     | <Baseln |
| 1.2.0   | create fuga           | 2017-06-08 09:51:07 | Success |
| 1.2.1   | create piyo           | 2017-06-08 09:51:07 | Success |
+---------+-----------------------+---------------------+---------+

注意事項

  • Baseline以前のDBの状態はユーザに委ねられるため、Flyway側では保証されない(当たり前だけど)
  • データベースが空の場合、Baselineが効かない?
    • 空なので、途中から流す必要ないので特に問題はないのだけれども

まとめ

flywayが好きだ。