一般的な問題

Prev Next

VPC環境で利用できます。

Database Migration Serviceの利用中に次のような問題が発生することがあります。問題ごとの原因と解決方法を確認し、適切に対処してください。

マイグレーションエラー

Test Connectionおよびマイグレーションに失敗しました。

原因

  • Source DBに Databaseがありません。
  • Target DBに Source DBと同じ Database名が存在します。
  • マイグレーションに必要な権限が設定されていません。
  • Source DBに適用すべき設定が適用されていません。
  • MyISAM、BLACKHOLE、FEDERATED、ARCHIVEエンジンはサポートしません。
  • Source DBと Target DBの文字集合が異なります。
  • サービス中のクラスタを Target DBとして指定しています。

解決方法

  • Source DBに少なくとも1つ以上の Databaseがあるかご確認ください。
  • 重複した Databaseは削除してください。
  • Source DBが GTIDモードであるかご確認ください。マイグレーションに必要な権限項目は、マイグレーションに必要な最小限の権限リストをご参照ください。
  • Source DBに以下のような設定が適用されているかご確認ください。
    • バイナリログを有効にし、server_id値を指定してください。
    • log_binの値が ONと表示されているかご確認ください。
    • Source DBのレプリケーションに必要な事前準備に関する説明は、事前準備をご参照ください。
  • サポートしていない MySQLエンジンを選択していないかご確認ください。Source DBの詳細設定によるサポートの有無は、サポートデータベースをご参照ください。
  • マイグレーション時にサポートする文字集合は、utf8、utf8mb4、euckrです。文字集合が異なる場合、Source DBの DBや Table文字集合を変更した後、マイグレーションを行ってください。
  • マイグレーションの実行時、Target DBが再起動し、データの読み取りのみ可能になります。サービス中のクラスタは Target DBに指定しないようご注意ください。

マイグレーション未完了

マイグレーション実行ステップが Replicationまですべて完了しましたが、Cloud DB for MySQLコンソールでは「マイグレーション」のステータスで表示されます。

原因

Migration Completed(Replication完了)ステップの場合、コンソールで [完了] ボタンをクリックすることで最終的に DBサービス移行が行えます。

解決方法

「Migration Completed」のステータスであるか確認した後、 [完了] ボタンをクリックします。

MariaDBのマイグレーション

MariaDBのマイグレーション時に互換性に関するエラーメッセージが表示されます。

原因

Source DBが MariaDBである場合も、マイグレーションできます。ただし、サポート終了した(EOL) MariaDBバージョンではマイグレーションの過程で互換性に関するエラーメッセージが発生することがあります。

解決方法

同じエラーが引き続き発生する場合は、Target DBを MySQL 5.7バージョンに変更してマイグレーションを進めるか、Source DBのバージョンを変更してください。

Source DBに設定された Definerアカウントのマイグレーションエラー

マイグレーション時、Source DBに設定された Definerアカウントが作成されていません。

原因

ユーザーアカウントはマイグレーションの対象に含まれません。

解決方法

Definerに使用するアカウントを Target DBで直接作成してください。詳細は、DB User管理をご参照ください。

DB Config設定がマイグレーションされない

DB Config設定がマイグレーションされません。

原因

DB Config設定に対するマイグレーションはサポートしていません。

解決方法

まず、Character Set/Collationなどを Target DB上で Source DBと同様に設定してください。

Test Connectionの遅延

Test Connectionに所要時間が長くかかります。

原因

Source DBのスキーマ数が多い場合、数分程度かかる場合があります。これはマイグレーションを正常に進めるための権限チェック、スキーマチェックなどの過程です。

解決方法

エラーではないので、別途措置することはありません。更新時に点検が初期化されますので、更新しないようにご注意ください。

「Killed $RESTORECMD」というエラーメッセージ

Backupタイプ: mydumper使用時、「Killed $RESTORECMD」というエラーウィンドウが表示されます。

原因

マイグレーション対象テーブルのサイズが大きい場合、Thread制限数を高く設定すればするほど Importing進行時のメモリ使用率が増加し、OOM Kill / サーバ行の発生率が高くなります。

解決方法

マイグレーションを削除した後、Thread制限値を下げて再試行してください。

権限エラー

  • GRANT REPLICATION SLAVE ON . TO '계정명'@'허용호스트'; の実行時にエラーが発生します。また、 [28000][1045] Access denied for user 'アカウント名'@'許可ホスト' というメッセージが表示されます。
  • Replication段階で Master command COM_REGISTER_SLAVE failed: Access denied for user 'アカウント名'@'許可ホスト' (using password: YES) (Errno: 1045) というエラーメッセージが表示されます。

原因

  • アクセスしたアカウントの権限に問題がある場合、エラーが発生することがあります。
  • アカウントに Replicationの権限が存在しない場合、エラーが発生することがあります。

解決方法

アクセスしたアカウントの権限をご確認ください。当該コマンドを実行するには、タスクを実行するアカウントが GRANT REPLICATION SLAVE*.* TO '계정명'@'허용호스트' WITH GRANT OPTION ; 権限を保有している必要があります。当該権限は DDL権限であり、コンソールで作成されたアカウントに限って付与しています。

REPLICATION権限の付与

  1. Source DB上で次のコマンドを入力し、REPLICATION SLAVE権限の有無をご確認ください。
    show grants for 'アカウント名'@'許可ホスト';`
    
  2. Source DBのアカウントに REPLICATION SLAVE権限を付与してください。
    GRANT REPLICATION SLAVE ON *.* TO 'アカウント名'@'許可ホスト';`
    

一部のデータベースマイグレーション時の注意事項

一部のデータベースのみを対象にマイグレーションを進める場合、特定の Cross-Database SQL演算がレプリケーションされなかったり、実行時にエラーが発生する場合があります。
データ整合性の問題やマイグレーション後の実行エラーを防止するため、以下の内容を参照してアプリケーションロジックを点検してください。

原因

  • Cross-DB SQLを使用する場合、マイグレーション対象に含まれていないデータベースにより、実行時にエラーが発生することがあります。

解決方法

  • Cross-DB SQLを使用する場合は、関連するすべてのデータベースをマイグレーション対象に含めてください。
  1. テスト環境
  • マイグレーション対象 DB: mig-db
  • マイグレーション対象外 DB: -mig-db
  • レプリケーションフィルタの例は、次の通りです。
REPLICATE_WILD_IGNORE_TABLE = ('mysql.*', 'non-mig-db.*')
  1. レプリケーション動作基準
    SQLのタイプによってレプリケーションの有無が変わるので、以下の基準をご参照ください。
区分 レプリケーション有無の判断基準 説明
DML (INSERT/UPDATE/DELETE) 対象テーブル(DB)基準 対象テーブルがレプリケーション対象 DBに含まれる場合、レプリケーションされる
DDL (CREATE/ALTER/DROP) 対象オブジェクト(DB)基準 作成/変更/削除されるオブジェクトがレプリケーション対象 DBに含まれる場合、レプリケーションされる
プロシージャ/関数/ビュー 定義位置(DB)基準 レプリケーション対象 DBに定義されている場合、レプリケーションされる
Cross-DB演算 実行時にエラーが発生する可能性あり レプリケーションはできても、対象外 DBがない場合は実行エラーが発生する可能性がある
  1. 主なケース
参考

非レプリケーション は、レプリケーションエラーではなく、レプリケーション対象 DBから除外された場合です。

3.1. DML(データ操作)

SQL例 レプリケーション有無
USE mig-db; INSERT INTO non-mig-db.table 非レプリケーション
USE non-mig-db; INSERT INTO mig-db.table レプリケーション済み
USE mig-db; DELETE FROM mig-db.orders JOIN non-mig-db.table 一部失敗の可能性あり(non-mig-dbアクセスエラー)
注意
  • 対象外 DBを対象にしたり、ジョインに含める場合、レプリケーション漏れや実行エラーが発生することがあります。
  • Cross-DB DML演算はなるべく避けてください。

3.2. DDL(テーブルの作成/変更/削除)

SQL例 レプリケーション有無
USE mig-db; CREATE/ALTER/DROP TABLE non-mig-db.table 非レプリケーション
USE non-mig-db; CREATE/ALTER/DROP TABLE mig-db.table レプリケーション済み

3.3. View

SQL例 レプリケーション有無(mysqldump) レプリケーション有無(mydumper) 実行時
USE mig-db; CREATE VIEW ... JOIN non-mig-db.table レプリケーション済み 非マイグレーション 対象外 DBがない場合、エラー発生
USE non-mig-db; CREATE VIEW ... 非レプリケーション 非マイグレーション -
注意
  • View定義で対象外 DBを参照すると、実行エラーが発生することがあります。
  • Viewは単一 DB基準で作成することを推奨します。
  • バックアップ方式によって Viewのマイグレーションを含めるかどうかが変わります。
    • バックアップ方式 mysqldump を使用する場合: Viewをマイグレーション対象に含める
    • バックアップ方式 mydumper を使用する場合: Viewをマイグレーション対象に含めない

3.4. Stored Procedure / Function / Trigger

SQL例 レプリケーション有無 実行時
mig-db.CrossDbDataSync()内部で INSERT INTO non-mig-db.table レプリケーション済み 実行時にエラーが発生する可能性あり
non-mig-db.LogUserActivity() 非レプリケーション -
USE mig-db; CREATE TRIGGER ...INSERT INTO non-mig-db.table レプリケーション済み 実行時にエラーが発生する可能性あり
注意
  • 定義自体はレプリケーションされても、実行時に対象外 DBアクセスによりエラーが発生することがあります。
  • すべてのオブジェクトは単一 DB基準で作成することを推奨します。
参考
  • レプリケーション有無は、実行環境 DB(USE)ではなく、実際の演算対象 DB基準で判定されます。
  • Cross-DB演算はなるべく避けてください。
    • 対象外 DBを対象にしたり、ジョインに含める場合、実行エラーが発生することがあります。
    • Cross-DB SQLが含まれている場合、関連するすべての DBをマイグレーション対象に含めてください。
  • Procedure、Function、Trigger、Viewの定義時、単一 DB基準で作成し、対象外 DBを参照しないようにしてください。
  • マイグレーション前にアプリケーションロジックを事前にテストして、実行エラーを防止してください。