MySQLが落ちる現象の原因を探る
/etc/mysql/my.cnf
を見てlogファイルの場所を確かめる。
/log/mysql/log/error.log
だったので、見てみる。エラーが出ている。
怪しそうなメッセージをかたっぱしからググってみる。
たどり着いたのはstack over flowの以下の質問。
mysql error The InnoDB memory heap is disabled - Stack Overflow
完全にこの回答者の現象と同じことが起きていた。
適切にswapの容量が確保されていないので、out of memoryになったときに完全にmysqlが落ちてしまいrestartできなくなっているということ。
なるほど確かに。/var/log/syslog
をみてみると、Kernelがmysqlのプロセスを殺してしまっていることを確認できた。
xxxxxxx xxxxx kernel: [718015.886166] Out of memory: Kill process 12830 (mysqld) score 85 or sacrifice child
freeコマンドにmオプションをつけると、今確保しているswap用のメモリを確認できる。
$ free -m total used free shared buffers cached Mem: 604340 587364 16976 0 29260 72280 -/+ buffers/cache: 485824 118516 Swap: 0 0 0
ということで、swapの設定を正しく行ったらメモリ不足になっても一旦swapすることでひとまずは落ちなくなりました。swapの設定の仕方は以下でまとめました。