MariaDB(MySQL)のメモリ不足問題を対策

昨日立てたWordPressをいじろうとアクセスしてみたら、"データベース接続エラー"で死んでた…。

原因調査

同一サーバ内で立ててる別サイトもDBからデータ取得ができておらずMariaDBが死んでるんだろうな、と調査開始。

# mysql -u root -p

でコンソールから接続を試みるも、

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)

と返ってきてアクセス不可。

MariaDBのstop→startを試すも、startでコケる。

MariaDBのログ (/var/log/mariadb/mariadb.log)を確認すると、いくつかエラーが出ており、最初の1つがこれ。

180602 13:02:11 InnoDB: Fatal error: cannot allocate memory for the buffer pool

原因判明

ググってみたところ下記がドンピシャ。

https://qiita.com/madaran0805/items/ae0532a7436e1c684e72

このQiita記事はAWSで、当サイトはGCEですが、問題としては同じで、確かにうちでもfreeしてみるとSwapが存在してませんでした。

なので、手順に従ってSwapを作ってやると無事MariaDBが立ち上がりました。

  1. dd if=/dev/zero of=/swapfile bs=1M count=1024
  2. mkswap /swapfile
  3. swapon /swapfile

再発 (2019.04.03追記)

1年以上ぶりに、同現象が発生していました。 対策していたので、別の原因なのかなぁと思ったのですが、単純に対策不十分でした。

端的にいうと、システム再起動時にスワップファイルが有効になっていなかっただけでした。

なので、 /etc/fstab の最後の行に以下を追記して、再起動時にスワップファイルが使われるようにしてやります。

/swapfile   none   swap   sw    0  0