外部MySQLインスタンスのRDSへのレプリケーション を設定しています。
外部MySQLインスタンスとRDSはどちらもMySQL 5.7.10を実行します。
手順に従いましたが、mysqldump
を使用してデータベースをダンプし、RDSに接続されたmysql
に送信すると、次のエラーが発生します。
2081行のエラー1215(HY000):外部キー制約を追加できません
RDSでのSHOW ENGINE InnoDB STATUS
の表示:
------------------------
LATEST FOREIGN KEY ERROR
------------------------
2016-03-25 01:38:56 0x2ad07ddcf700 Error in foreign key constraint of table db/Prospect:
FOREIGN KEY (`restaurantId`) REFERENCES `Restaurant` (`id`),
CONSTRAINT `FK_Prospect_Zone` FOREIGN KEY (`zoneId`) REFERENCES `Zone` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18292 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci:
Cannot resolve table name close to:
(`id`),
CONSTRAINT `FK_Prospect_Zone` FOREIGN KEY (`zoneId`) REFERENCES `Zone` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18292 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
確かに、ダンプファイルはテーブルをアルファベット順に再作成するため、Prospect
テーブルはRestaurant
とZone
の前に表示され、エラーを説明できます。
しかし、いいえ、mysqldump
はSET FOREIGN_KEY_CHECKS=0
をファイルの先頭に追加するため、とにかく動作するはずです。
それで、私はそれをVanilla MySQL 5.7インストールに対してテストすることに決めました、そして驚くことではありません、ダンプは全く同じコマンドでうまくインポートされます。
特にRDSでこのエラーが発生する原因とその回避方法
これが次のリリースであるMySQL 5.7.11で 修正されたバグ であることがわかりました。
変更ログから抽出:
InnoDB:foreign_key_checksが無効になっていると、フルテキストインデックスと外部キー制約を持つテーブルの作成に失敗しました。 (バグ#22094601、バグ#78955)
フルテキストインデックスが問題の原因であることを理解するのに時間がかかりました。ダンプが正常にインポートされるまで、ダンプファイルを1行ずつ削除する必要がありました。
残念ながら、RDSはまだMySQL 5.7.11をサポートしていないため、この問題を回避する必要がありました。これが私がしたことです:
mysqldump
を使用してダンプファイルを作成しましたFULLTEXT KEY
行ALTER TABLE
ステートメントを使用して、メモ帳にある各フルテキストインデックスをテーブルに追加します。これは完璧に機能し、私のテーブルは完全に同期しています。