Flywayは、オープンソースのデータベースバージョン管理ツールであり、履歴テーブルを作成してデータベースの状態を追跡し、自動化された移行を実現します。本記事では、OB CloudにFlywayを統合し、スキーマ変更の自動デプロイとバージョン追跡を実現する方法について説明します。
前提条件
OB Cloudクラウドデータベースアカウントに登録済みであり、クラスタインスタンスとテナント(MySQLまたはOracle互換モードのテナント)を作成していること。
FlywayサーバーのIPアドレスがOB Cloudインスタンスのホワイトリストに追加されていること。詳細については、テナントのホワイトリストグループの設定をご参照ください。
OB Cloudデータベースの接続文字列を取得していること。詳細については、接続文字列の取得(MySQL互換モードのテナント)および接続文字列の取得(Oracle互換モードのテナント)をご参照ください。
統合設定
MySQL互換モードのテナント
OB CloudのMySQL互換モードのテナントでは、flyway-core 10.0.0以降のバージョンの使用を推奨し、mysql-connector-javaおよびflyway-database-oceanbaseコンポーネントに依存します。より古いバージョンのFlywayをサポートする必要がある場合は、以下の表を参照してください:
OceanBase バージョン |
Flyway バージョン |
備考 |
|---|---|---|
| ≥ 4.2.5 | < 10.x | OB Cloudサポートチームにお問い合わせください |
| < 4.2.5 | < 9.x | 現在対応していません |
| 9.x | OB Cloudサポートチームにお問い合わせください |
Maven依存関係の設定
プロジェクトの
pom.xmlファイルに以下の依存関係を追加します:<dependencies> <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>11.3.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-database-oceanbase</artifactId> <version>10.7.2</version> </dependency> </dependencies>移行スクリプトの作成
Mavenプロジェクトの
resourcesディレクトリにdb/migrationフォルダを作成し、その中に以下の2つのSQLファイルを作成します:ファイル1:V1_1__create_person_table.sql
CREATE TABLE person ( id INT NOT NULL, name VARCHAR(20) NOT NULL );ファイル2:V2_1__add_person_table.sql
INSERT INTO person (id, name) VALUES (1, 'apple');
Javaテストクラスの作成
JavaクラスFlywayTestを作成し、Flywayを使用してデータベース移行を行います。前提条件で取得した接続文字列に基づいて、コード内のデータベース接続情報を修正してください。
public class FlywayTest { public static void main(String[] args) { String url = "jdbc:mysql://host:port/dbName"; String user = "username"; String password = "password"; Flyway flyway = Flyway.configure() .dataSource(url, user, password) .load(); flyway.baseline(); flyway.migrate(); } }パラメータ説明:
host:OB Cloudデータベースの接続アドレス。port:OB Cloudデータベースの接続ポート。dbName:アクセスするデータベース名。username:データベースアカウント名。password:アカウントのパスワード。
テストの実行
FlywayTestを実行すると、OB Cloudデータベースに作成されたpersonテーブルと挿入されたデータが確認できます。
Oracle互換モードのテナント
OB CloudのOracle互換モードのテナントでは、flyway-core 10.9.0以降のバージョンが必要であり、oceanbase-client、flyway-mysql、およびflyway-database-oceanbaseコンポーネントを使用する必要があります。
説明
flyway-database-oceanbaseコンポーネントは、GitHubリポジトリから入手できます。
Maven依存関係の設定
プロジェクトの
pom.xmlファイルに以下の依存関係を追加します:<dependencies> <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>10.9.0</version> </dependency> <dependency> <groupId>com.oceanbase</groupId> <artifactId>oceanbase-client</artifactId> <version>2.4.11</version> </dependency> <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-mysql</artifactId> <version>10.7.0</version> </dependency> <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-database-oceanbase</artifactId> <version>10.16.1</version> <scope>system</scope> <systemPath>/path/to/your/flyway-database-oceanbase-10.16.1.jar</systemPath> </dependency> </dependencies>移行スクリプトを作成します。
Mavenプロジェクトの
resourcesディレクトリにdb/migrationフォルダを作成し、その中に以下の2つのSQLファイルを作成します:ファイル1:V1_1__create_person_table.sql
CREATE TABLE person ( id INT NOT NULL, name VARCHAR(20) NOT NULL );ファイル2:V2_1__add_person_table.sql
INSERT INTO person (id, name) VALUES (1, 'apple');
Javaテストクラスを作成します。
JavaクラスFlywayTestを作成し、Flywayを使用してデータベース移行を行います。前提条件で取得した接続文字列に基づいて、コード内のデータベース接続情報を変更してください。
public class FlywayTest { public static void main(String[] args) { String url = "jdbc:oceanbase://host:port/"; String user = "username"; String password = "password"; Flyway flyway = Flyway.configure() .dataSource(url, user, password) .load(); flyway.baseline(); flyway.migrate(); } }パラメータ説明:
host:OB Cloudクラウドデータベースの接続アドレス。port:OB Cloudクラウドデータベースの接続ポート。username:データベースアカウント名。password:アカウントのパスワード。
テストを実行します。
FlywayTestを実行すると、OB Cloudデータベースに作成されたpersonテーブルと挿入されたデータが確認できます。