AWSのlightsailでMySQLがいきなり落ち、ログを見てみると次のように記述されていました。
InnoDB initialization has started. mmap(137428992 bytes) failed; errno 12 Cannot allocate memory for the buffer pool Plugin initialization aborted with error Generic error. Failed to initialize DD Storage Engine Data Dictionary initialization failed. Aborting
どうもメモリーが足りないようです。メモリは2Gのプランで、AWSのlightsailでOSにCentOSを使っているとデフォルトではswapが設定されていないので、そのせいでメモリが不足しているように思われます。
というわけでswapの設定です。
最初にswapに使うファイルを作成するのですが、自分の環境ではfallocateで作ったファイルをswapに使おうとすると下記のエラーが表示されて駄目でした。
swapon: swapfile: swapon failed: Invalid argument
というわけでddで作りました。
# dd if=/dev/zero of=/swapfile count=4096 bs=1MiB
これで /swapfile に0で埋められた4Gのファイルが作成されます。
次にパーミッションを設定します。
# chmod 600 /swapfile
次に/swapfileをswapとして使えるようにします。
# mkswap /swapfile
最後にswapとして稼働させます。
# swapon /swapfile
うまく動作しているか確認しています。
# swapon --show NAME TYPE SIZE USED PRIO /swapfile file 4G 0B -2
4Gのswap領域ができています。これでMySQLに使えるメモリを割り当てることができます。
ただ、これではリブート時に元に戻ってしまいますので、設定ファイルに記述しておきます。/etc/fstabを開いて下のものを追記しておきます。
/swapfile swap swap defaults 0 0
これでリブートした後もswapが使われている状態になります。