次の方法で共有


Azure Database for MySQL への移行に関する既知の問題

Azure Database for MySQL への移行に関する既知の問題点について、以下のセクションで説明します。

v8.0 MySQL フレキシブル サーバー ターゲットのスキーマ移行に関する問題

  • エラー: エンジン バージョン 8.0.30 以降の MySQL フレキシブル サーバーへの移行は、InnoDB テーブルの非表示の主キーを生成する機能が有効になっている場合に失敗する可能性があります (「MySQL :: MySQL 8.0 リファレンス マニュアル :: 13.1.20.11 生成された非表示の主キー」を参照してください)。 この失敗は、テーブル スキーマをソースからターゲットに移行するとき、オンライン移行のレプリケーション フェーズ中に変更を適用するとき、移行を再試行するとき、スキーマが手動で移行されたターゲットに移行するときに発生することがあります。

    考えられるエラー メッセージ:

    • "不明なエラー。"
    • "非表示の主キーを生成できませんでした。 自動インクリメント列は既に存在します。"
    • "データベース 'database' のターゲット テーブル 'table name' の列 'my_row_id' がソース テーブルに存在しません。"

    制限: sql_generate_invisible_primary_key が有効になっている MySQL フレキシブル サーバー インスタンスへの移行は、DMS ではサポートされていません。

    回避策: ターゲット MySQL フレキシブル サーバーのサーバー パラメーター sql_generate_invisible_primary_key を OFF に設定します。 このサーバー パラメーターは、ターゲット MySQL フレキシブル サーバーのすべてのタブのサーバー パラメーター ウィンドウにあります。 さらに、ターゲット データベースを削除し、DMS の移行を開始して、スキーマの不一致がないようにします。

互換性のない SQL モード

1 つまたは複数の互換性のない SQL モードが、さまざまなエラーの原因になる可能性があります。 エラーと、このエラーが発生した場合に確認する必要があるサーバー モードの例を次に示します。

  • エラー: アクティビティ '{activity}' の間にサーバー '{server}' 上のデータベース '{database}' のテーブル '{table}' を移行するための準備中にエラーが発生しました。 この結果、このテーブルは移行されません。

    制限: このエラーは、次のいずれかの SQL モードが一方のサーバーで設定され、もう一方のサーバーでは設定されていない場合に発生します。

    対処法:

    • NO_ZERO_DATE

      テーブルの日付の既定値またはデータがソース側で 0000-00-00 であり、ターゲット サーバーに NO_ZERO_DATE SQL モードが設定されている場合、スキーマやデータの移行は失敗します。 次の 2 つの回避策を使用できます。 1 つ目の回避策は、列の既定値を NULL または有効な日付に変更することです。 2 つ目のオプションは、グローバル SQL モード変数から NO_ZERO_DATE SQL モードを削除することです。

    • NO_AUTO_CREATE_USER

      ルーチンのスキーマ移行を行っている MySQL ソース サーバー 5.7 から MySQL ターゲット サーバー 8.0 への移行を実行しているときに、no_auto_create_user SQL モードが MySQL ソース サーバー 5.7 に設定されている場合、エラーが発生します。

Binlog の保持に関する問題

  • エラー: binlog 読み取りの致命的なエラー。 このエラーは、binlog ファイル名や初期位置が正しく指定されなかったことを示している可能性があります。

    制限: このエラーは、binlog の保持期間が短すぎる場合に発生します。

    回避策: この場合に構成できる変数は複数あります。binlog_expire_logs_seconds は保持期間を決定します。また、binlog_expire_logs_auto_purge をオフに設定することで、binlog の削除を完全に防止できます。 MySQL 5.7 では、システム変数の expire_logs_days が非推奨になりました。

テーブル ロック取得のタイムアウト

  • エラー: 一貫性のあるビューを作成するために、サーバー '{server}' で読み取りロックを取得しようとしたときに例外が発生しました。

    制限: このエラーは、トランザクション整合性が有効で、すべてのテーブルのロックを取得中にタイムアウトが発生した場合に発生します。

    回避策: 選択したテーブルがロックされていないこと、または選択したテーブルで実行時間の長いトランザクションが実行されていないことを確認します。

4 MB (メガバイト) を超えるデータを Azure Storage に書き込む

  • エラー: 要求本文が大きすぎて、許容される上限を超えています。

    制限: このエラーは、移行するテーブルが多すぎる (>10k) 場合に発生する可能性があります。 Azure Storage サービスの呼び出しごとに 4 MB (メガバイト) の制限があります。

    回避策: サポート リクエストを作成してサポートにお問い合わせください。REST API に直接アクセスするためのカスタム スクリプトの提供を受けることができます。

重複するキー エントリの問題

  • エラー: このエラーは多くの場合、タイムアウト、ネットワークの問題、またはターゲット スケーリングの症状です。

    受け取る可能性があるエラー メッセージ: ターゲット サーバーによって発生した SQL エラーのため、バッチをテーブル '{table}' に書き込むことができませんでした。 コンテキストについては、バッチに、次のソース クエリによって返される行のサブセットが含まれていました。

    制限: このエラーは、タイムアウトまたはターゲットへの接続の切断が原因で発生する可能性があり、結果として主キーが重複します。 また、ターゲットへの複数の移行が同時に実行されていることや、移行の実行中にユーザーがターゲットでテスト ワークロードを実行していることに関連している場合もあります。 さらに、ソースで主キーを一意にする必要がない場合でも、ターゲットでは一意にする必要がある場合があります。

    回避策: この問題を解決するには、重複する移行が実行されていないこと、ソースの主キーが一意であることを確認します。 エラーが解決しない場合は、サポート リクエストを作成してサポートにお問い合わせください。REST API に直接アクセスするためのカスタム スクリプトの提供を受けることができます。

レプリケートされた操作で行が一致しないエラーが発生しました

  • エラー: オンライン移行で予想される数の変更をレプリケートできません。

    受け取る可能性があるエラー メッセージ: ソース サーバーのバイナリ ログから読み取られたレコードをターゲット サーバーに適用中にエラーが発生しました。 変更はバイナリ ログ '{mysql-bin.log}' と位置 '{position}' で開始され、バイナリ ログ '{mysql-bin.log}' と位置 '{position}' で終了しました。 バイナリ ログ '{mysql-bin.log}' の位置 '{position}' より前のソース サーバー上のすべてのレコードがターゲットにコミットされています。

    制限: ソースでは、テーブルに挿入ステートメントと削除ステートメントがあり、削除は明らかな一意のインデックスによって行われました。

    回避策: テーブルを手動で移行することをお勧めします。

テーブル データの切り捨てエラー

  • エラー: 列挙列の 1 つ以上の行に null 値があり、ターゲット SQL モードが strict に設定されています。

    受け取る可能性があるエラー メッセージ: データの切り捨てエラーのため、バッチをテーブル '{table}' に書き込むことができませんでした。 MySQL テーブル列のデータ型に対してデータが大きすぎないことを確認してください。 列タイプが列挙型の場合は、SQL モードが TRADITIONAL、STRICT_TRANS_TABLES、または STRICT_ALL_TABLES として設定されておらず、ソースとターゲットで同じであることを確認します。

    制限: このエラーは、特定の設定が存在したときに履歴データがソース サーバーに書き込まれたが、それが変更されたときにデータを移動できなかった場合に発生します。

    回避策: この問題を解決するには、ターゲット SQL モードを非厳密に変更するか、すべての null 値を有効な値に変更することをお勧めします。

オブジェクトエラーの作成

  • エラー: ビューの検証に失敗した後にエラーが発生しました。

    制限: このエラーは、ビューを移行しようとしたときに、ビューが参照しているはずのテーブルが見つからないときに発生します。

    回避策: ビューを手動で移行することをお勧めします。

テーブルが見つかりません

  • エラー: 参照元テーブルが見つからないため、エラーが発生しました。

    受け取る可能性があるエラー メッセージ: クエリ実行の問題により、パイプラインは、戦略 MySqlSchemaMigrationViewUsingTableStrategy を使用してアクティビティ '{activity}' のオブジェクト '{object}' のスキーマを作成できませんでした。

    制限: このエラーは、ビューが削除または名前変更されたテーブルを参照している場合、またはビューが間違った情報または不完全な情報を使用して作成された場合に発生する可能性があります。 このエラーは、テーブルのサブセットが移行されても、依存するテーブルが移行されていない場合に発生する可能性があります。

    回避策: ビューを手動で移行することをお勧めします。 外部キーおよび CREATE VIEW ステートメントで参照されているすべてのテーブルが移行用に選択されているかどうかをチェックします。

すべてのプールされた接続が切断されました

  • エラー: ソース サーバー上のすべての接続が切断されました。

    制限: このエラーは、サーバーの再起動、ネットワークの問題、ソース サーバー上の大量のトラフィック、またはその他の一時的な問題により、初期読み込みの開始時に取得されたすべての接続が失われた場合に発生します。 このエラーは回復できません。 さらに、このエラーは、メンテナンス期間中にサーバーを移行しようとした場合に発生します。

    回避策: 移行を再開する必要があります。ソース サーバーのパフォーマンスを高めることをお勧めします。 もう 1 つの問題は、実行時間の長い接続を強制終了するスクリプトであり、これらのスクリプトが機能しなくなります。

一貫性のあるスナップショットが壊れています

制限: このエラーは、移行インスタンスの初期読み込み中にユーザーが DDL を実行したときに発生します。

回避策: この問題を解決するには、初期読み込み中に DDL を変更しないことをお勧めします。

外部キー制約

  • エラー: このエラーは、テーブルから参照される外部キーの種類に変更があった場合に発生します。

    受け取る可能性があるエラー メッセージ: 外部キー制約 '{key}' の参照元列 '{pk column 1}' と参照先列 '{fk column 1}' は互換性がありません。

    制限: テーブル 1 の PK 列がテーブル 2 の FK 列と互換性がない可能性があるため、このエラーによりテーブルのスキーマ移行が失敗する可能性があります。

    回避策: この問題を解決するには、外部キーを削除し、移行プロセスの完了後に再作成することをお勧めします。