Flywayを使用してOceanBaseデータベースを統合し、バージョン管理を実現する
Flywayは、オープンソースのデータベースバージョン管理ツールです。履歴レコードテーブルを作成してデータベースの状態を追跡し、自動化された移行を実現します。本記事では、OceanBaseデータベースにFlywayを統合し、Schema変更の自動デプロイとバージョン追跡を実現する方法について説明します。
前提条件
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コンポーネントを使用する必要があります。
説明
GitHubから flyway-database-oceanbase-10.16.1.jar をダウンロードできます。その他のバージョンは、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テーブルと挿入されたデータを確認することができます。