Flywayは、オープンソースのデータベースバージョン管理ツールであり、履歴テーブルを作成してデータベースの状態を追跡し、自動化されたマイグレーションを実現します。本記事では、OceanBaseデータベースにFlywayを統合し、スキーマ変更の自動デプロイとバージョン追跡を実現する方法について説明します。
前提条件
OceanBaseデータベースのデプロイが完了し、ユーザーテナントが作成されていること。ユーザーテナントの作成方法の詳細については、テナントの作成を参照してください。
手順
ステップ1:データベース接続情報を取得する
OceanBaseデータベースのデプロイ担当者または管理者から、該当するデータベース接続文字列を取得します。例:
obclient -h$host -P$port -u$user_name -p$password -D$database_name
パラメータ説明:
$host:OceanBaseデータベースへの接続IPアドレス。OceanBaseデータベースプロキシ(OceanBase Database Proxy、ODP)接続方式ではODPアドレスを使用し、直接接続方式ではOBServerノードのIPアドレスを使用します。$port:OceanBaseデータベースへの接続ポート。ODP接続方式のデフォルトポートは2883で、ODPデプロイ時にカスタマイズ可能です。直接接続方式のデフォルトポートは2881で、OceanBaseデータベースのデプロイ時にカスタマイズ可能です。$database_name:アクセス対象のデータベース名。注意
テナントに接続するユーザーには、データベースに対する
CREATE、INSERT、DROP、およびSELECT権限が付与されていなければなりません。ユーザー権限の詳細については、MySQLモードの権限分類を参照してください。$user_name:テナントの接続アカウント。ODP接続の一般的な形式:ユーザー名@テナント名#クラスタ名またはクラスタ名:テナント名:ユーザー名。直接接続方式の形式:ユーザー名@テナント名。$password:アカウントのパスワード。
接続文字列の詳細については、OBClientを使用したOceanBaseテナントへの接続を参照してください。
ステップ2:統合設定
MySQL互換モードのテナント
OceanBaseデータベースのMySQL互換モードテナントでは、flyway-core 10.0.0以降のバージョンを使用し、mysql-connector-javaおよびflyway-database-oceanbaseコンポーネントに依存することを推奨します。
Flywayの低いバージョンについては、以下の表を参照してください:
OceanBaseデータベースのバージョン |
Flywayのバージョン |
備考 |
|---|---|---|
| V4.2.5以降のバージョン | < 10.x | OceanBaseデータベースサポートにお問い合わせください |
| V4.2.5より前のバージョン | < 9.x | 現在はサポートされていません |
| V4.2.5より前のバージョン | 9.x | OceanBaseデータベースサポートにお問い合わせください |
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:OceanBaseデータベースの接続アドレス。port:OceanBaseデータベースの接続ポート。dbName:アクセスするデータベース名。username:データベースアカウント名。password:アカウントのパスワード。
テストの実行。
FlywayTestを実行すると、OceanBaseデータベースに作成されたpersonテーブルと挿入されたデータが確認できます。
Oracle互換モードのテナント
OceanBaseデータベースのOracle互換モードのテナントでは、flyway-core 10.9.0以降が必要であり、oceanbase-client、flyway-mysql、およびflyway-database-oceanbaseコンポーネントを使用する必要があります。
説明
flyway-database-oceanbase 10.16.1はGitHubからダウンロードできます。その他のバージョンについては、OceanBaseデータベースのサポートチームにお問い合わせください。
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:OceanBaseデータベースの接続アドレス。port:OceanBaseデータベースの接続ポート。username:データベースアカウント名。password:アカウントのパスワード。
テストの実行。
FlywayTestを実行すると、OceanBaseデータベースに作成されたpersonテーブルと挿入されたデータが確認できます。