Embulk でインターネット越しの転送
ローカルネットワークでは問題なかったのですが、インターネット越しに*1 Embulk で大量のデータを送信しようとするとOperation failed (0:08003)
というエラーが出てしまいました。Output plugins
はembulk-output-mysql
(https://github.com/embulk/embulk-output-jdbc/tree/master/embulk-output-mysql)です。
結論
out
の設定の中にbatch_size
というものがありました。デフォルトではこれが16777216
に設定されているのですが、程よく小さく指定することでエラーが出なくなりました。あまりに小さくすると細切れにデータを送りすぎて時間がかかったりログがえらいことになったりしますが、まあ失敗するよりかはいいのではないでしょうか。
余裕があれば値を変えて試してみて、最適な値を見つけるのも良いかと思います。
補足
batch_size
の値によっては処理が速すぎるため(?)にERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
みたいなエラーが出ます。
なのでmode
でmerge
系を選択するのが無難です。さらにfetch_rows
の値を抑えたほうがよいと思います。ただmerge
だと困る運用もあると思いますので、そこはやはり値の微調整ということになるかと思います。
そもそもこのエラーが出る場合はネットワークの状況に疑いがある可能性が強いと踏んでいますので、上記はかなりのグレーパターンだとは思います。
*1:これが異常なオペレーションだとは思いますが