web-dev-qa-db-ja.com

schema_versionテーブルの使用に関するFlyway 5.0.7の警告

Flyway Gradleプラグインを使用して、移行をオフラインで実行します(つまり、システムがダウンしている間に移行します)。最近Flyway 5.0.7にアップグレードしましたが、移行に関して次の警告が表示されます。

スキーマ履歴テーブルXXXXXXX.flyway_schema_historyは見つかりませんでしたが、代わりにXXXXXXX.schema_versionが見つかりました。このメッセージは、Flywayがバージョン5.0.0のflyway.tableのデフォルトをflyway_schema_historyに変更したため、古いデフォルト(schema_version)に依存しているために表示されます。これを修正するには、設定でflyway.table = schema_versionを設定します。このフォールバックメカニズムは、Flyway 6.0.0で削除されます。

(実際のスキーマ名をわかりにくくするためにXXXXXXXを使用しました)。

したがって、flyway.table = schema_versionを設定することでエラーを回避できるようです。ただし、このメカニズムはFlyway 6.0.0で削除される予定です。

今後、この互換性を保つために何かを行うことになっていますか? schema_versionテーブルの名前を手動でflyway_schema_historyに変更する必要がありますか?それとも、フライウェイにそれをさせる方法はありますか?そうでない場合、Flyway 6.0.0がリリースされるとどうなりますか?データを適切なテーブル名に自動的に移行しますか?

13
Tony C.

flyway.tableのデフォルトは、schema_versionからflyway_schema_historyに変更されました。また、古いデフォルトを使用して既存のインストールが壊れないように警告する古いデフォルトへの自動フォールバックも提供しています。

これは、フライウェイ5から、設定ファイル内でflyway.tableプロパティを指定しない場合、フライウェイはdbでテーブルflyway_schema_historyを探し、見つからない場合はフォールバックとしてテーブルschema_versionを探し、古いテーブルが見つかった場合その後、あなたが今得ているメッセージで警告します。フライウェイ6から、このフォールバックメカニズムは削除されます。 flyway.tableプロパティを指定しない場合、dbでflyway_schema_historyを探します。見つからない場合は、schema_versionテーブルを探しても、機能を維持するためにflyway_schema_historyという名前の新しいテーブルを作成します。

Flyway 6では、flyway.table=schema_versionを設定すると既存のシステムが正常に動作します。dbのテーブル名を変更する必要はありません。ただし、プロパティを設定しない場合、テーブル名を変更する必要があります。そうしないと、flywayは既存のschema_versionテーブルを認識せず、システムを新しいものとして扱い、flyway_schema_historyテーブルを作成し、最初からスクリプトの実行を開始します。

それが役立つことを願っています。

17
Monzurul Shimul

テーブルを他のテーブルにマッピングし、関連するレコードをコピーすることで、schema_versionからflyway_schema_historyに移行できます。

DROP TABLE IF EXISTS `flyway_schema_history`;
SET character_set_client = utf8mb4 ;
CREATE TABLE `flyway_schema_history` (
    `installed_rank` int(11) NOT NULL,
    `version` varchar(50) DEFAULT NULL,
    `description` varchar(200) NOT NULL,
    `type` varchar(20) NOT NULL,
    `script` varchar(1000) NOT NULL,
    `checksum` int(11) DEFAULT NULL,
    `installed_by` varchar(100) NOT NULL,
    `installed_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `execution_time` int(11) NOT NULL,
    `success` tinyint(1) NOT NULL,
    PRIMARY KEY (`installed_rank`),
    KEY `flyway_schema_history_s_idx` (`success`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

insert into flyway_schema_history (installed_rank, version, description, type, script, checksum, installed_by, installed_on, execution_time, success)
select installed_rank, version, description, type, script, checksum, installed_by, installed_on, execution_time, success
from schema_version;

これは、flyway 5.2.2以降のflyway_schema_historyのスキーマバージョンです。このスクリプトを安全に使用し、このバージョンに移行する前に移行することをお勧めします。

このスクリプトは、dbコンソールでそのまま実行する必要があることを理解してください。このスクリプトはMySQL専用です。他のデータベース用に独自のものを作成する必要があります。

0
Uluaiv