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権限の付与
- Source DB上で次のコマンドを入力し、REPLICATION SLAVE権限の有無をご確認ください。
show grants for 'アカウント名'@'許可ホスト';` - Source DBのアカウントに REPLICATION SLAVE権限を付与してください。
GRANT REPLICATION SLAVE ON *.* TO 'アカウント名'@'許可ホスト';`
一部のデータベースマイグレーション時の注意事項
一部のデータベースのみを対象にマイグレーションを進める場合、特定の Cross-Database SQL演算がレプリケーションされなかったり、実行時にエラーが発生する場合があります。
データ整合性の問題やマイグレーション後の実行エラーを防止するため、以下の内容を参照してアプリケーションロジックを点検してください。
原因
- Cross-DB SQLを使用する場合、マイグレーション対象に含まれていないデータベースにより、実行時にエラーが発生することがあります。
解決方法
- Cross-DB SQLを使用する場合は、関連するすべてのデータベースをマイグレーション対象に含めてください。
- テスト環境
- マイグレーション対象 DB: mig-db
- マイグレーション対象外 DB: -mig-db
- レプリケーションフィルタの例は、次の通りです。
REPLICATE_WILD_IGNORE_TABLE = ('mysql.*', 'non-mig-db.*')
- レプリケーション動作基準
SQLのタイプによってレプリケーションの有無が変わるので、以下の基準をご参照ください。
| 区分 | レプリケーション有無の判断基準 | 説明 |
|---|---|---|
| DML (INSERT/UPDATE/DELETE) | 対象テーブル(DB)基準 | 対象テーブルがレプリケーション対象 DBに含まれる場合、レプリケーションされる |
| DDL (CREATE/ALTER/DROP) | 対象オブジェクト(DB)基準 | 作成/変更/削除されるオブジェクトがレプリケーション対象 DBに含まれる場合、レプリケーションされる |
| プロシージャ/関数/ビュー | 定義位置(DB)基準 | レプリケーション対象 DBに定義されている場合、レプリケーションされる |
| Cross-DB演算 | 実行時にエラーが発生する可能性あり | レプリケーションはできても、対象外 DBがない場合は実行エラーが発生する可能性がある |
- 主なケース
非レプリケーション は、レプリケーションエラーではなく、レプリケーション対象 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を参照しないようにしてください。
- マイグレーション前にアプリケーションロジックを事前にテストして、実行エラーを防止してください。