Amazon RDSのレプリケーションがLOAD DATAするとエラーで止まる
AmazonRDSのreplica setを作って運用していたんですが、とある開発事案で、大量のレコードを短時間で生成する必要に迫られました。
要件としては、
① 特定ファイル(複数)のファイル名から属性情報を抜き出す
② 既存テーブルAの属性情報にHitしないレコードをSELECTしてtmpテーブルを生成
③ tmpテーブルに特定ファイル(複数)を1個ずつ展開してINSERT
というようなものです。
ただ、特定ファイル内のレコード数が大きく、1ファイル、10万件〜100万件を想定しておく必要がありました。
ここで、単純にサーバー(php)から1行ずつINSERTするのは選択肢から消えます。
バルクインサートも検証しましたが、速度として満足いくものではなく、代替方法を検討しました。
結果、LOAD DATAを使おう!ってことになりました。
LOAD DATA INFILE "ファイル名" INTO TABLE テーブル名 FIELDS TERMINATED BY ',区切り文字' ENCLOSED BY '"';
クッソ速いんですねコレ。知らなかった…。
ひゃっほーひゃっほー言っていたら、商用環境でRDSのレプリケーションがエラー…。
どうも、MySQLでは推奨されない方法 + 対応していない?!という状況のようで八方塞がりに。
「バージョン上げたら直るかも?」ってアドバイスを頂き、確認したところ、「MySQL 5.6.17」が選択できるようになっている!
動けばいいなーぐらいの期待感で、replica setの方を Modify で 5.6.17 に変更したところ…。
動いた!エラーでない!ひゃっほーひゃっほー!
めでたしめでたし。