MySQLが落ちるのでswapの設定

投稿者: | 2020年11月11日

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が使われている状態になります。