2018/06/25
サーバー側ではなくアプリ側で対応しよう、という旨追記しました。
Ruby + Rails + MariaDB
開発環境で大量データの投入検証をしようとすると、下記のエラーが発生。
長いinsert文も一緒に吐かれるので混乱したけど、
つまりはMysqlがタイムアウトしてしまっていました。
Mysql2::Error: MySQL server has gone away
原因としてはコネクションプールの不足なんかも挙げられるようですが、
私の場合は単純にmax_allowed_packetが足りていないことでした。
my-large.cnfを元にしていたのだけど、足りなかったらしい。
[mysqld]
max_allowed_packet = 1000M # 1M->1000Mに修正。
systemctl restart mysqld.serviceでOK。
ちなみにプール数を増やす場合、タイムアウトを伸ばす場合、
再接続を行う場合(reconnect: true)はdatabase.ymlで設定できる。
2018/06/25追記
状況によりけりですが、冷静に考えるとserver.cnfをいじるよりも
アプリ側でSQLを適宜分割して発行する方がいいと思います。
大量データの投入って1秒を争わないと思うので。
参考リンク
“MySQL server has gone away” with Ruby on Rails
ActiveRecordのコネクションプールの理解を深める