MySQL がちょいちょい落ちるので EC2 に swap 領域を設定

ちょいちょい MySQL が落ちるな~と思ってたんですが、swap 領域がないことが原因なのかもということで、swap 領域設定してみました。

メモリ確認

$ free
              total        used        free      shared  buff/cache   available
Mem:        1015348      423808      217400       46212      374140      400740
Swap:             0           0           0

Swap 0!

空き容量確認

$ df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   29G  4.2G   25G  15% /
devtmpfs                 487M     0  487M   0% /dev
...以下略

空ファイル作成

$ dd if=/dev/zero of=/swapfile bs=1M count=1024

swap 領域作成

$ mkswap /swapfile

権限変更

$ chmod 600 /swapfile

swap 領域有効化

$ wapon /swapfile

確認

$ swapon -s
Filename                                Type            Size    Used    Priority
/swapfile                               file    1048572 0       -1

$ free
Mem:        1015348      334316      279932       59680      401100      479768
Swap:       1048572           0     1048572

再起動しても swap が有効になるように

$ sudo vi /etc/fstab

で編集モードに入って、次の内容を末尾に追加

/swapfile   none    swap    sw    0   0

おわり。これで MySQL 落ちなくなるといいな~。

参考)

MySQL が起動しない原因がディスクフルだった

MySQL が起動しなくて、なんでだなんでだと調べたところサーバー容量が足りなかった、ということがありました。MySQL 起動しないのがディスクフルのせいだとは全然気づかなくて、しばらく journalctl -xn  してエラーログみたり色々してました。

珍しいケースだとは思いますが、MySQL 起動しなくて困った時は念のためサーバー空き容量を調べてみるといい、と勉強になりました。

未来の自分のために簡単に一応メモ。

CentOS7 でのサービスの起動・終了・再起動・状態

systemctl start 【サービス名】
systemctl stop 【サービス名】
systemctl restart 【サービス名】
systemctl status 【サービス名】

MySQL の状態を見たいなら次のようなかんじ。

systemctl status mysql

起動しない場合は、journalctl -xn  でエラーログを見る。

参考)CentOS7でのサービス(デーモン)の起動・停止方法 | server-memo.net

サーバー空き容量を調べる

$ df -h

Filesystem Size Used Avail Use% マウント位置
などが表示される。

サーバーのディスク容量アップ

今回はさくらのクラウドだったので、仮想サーバと仮想ディスク – 「さくらのクラウド入門」(1) – さくらのナレッジ を参考にディスク容量をアップ。

MySQL が壊れてる

さらに MySQL のテーブルが壊れてしまってたので、phpMyAdmin から

  • 「オーバーヘッド」のあるところは「テーブルの最適化」
  • 「使用中」になったままで構造が壊れてたところは「テーブルの修復」

をしました。これでなんとか復活。

参考)MySQL のテーブルを修復 – STAFF_01 [KYS-LAB]