DB接続確立error

Publish date: Dec 17, 2019
Tags: db mysql swap

今日はまさかのWordPressがDB接続確立errorで見られなくなりました。
かなりゾッとしたので、バックアップのcron回します。
あとDB接続したらレイアウトがガタガタに崩れていたので
きちんとgit管理します🙋

異常終了によるロック状態になっていたため
ロックファイルの削除をしてDB起動しました。
以下、作業ログです。
作業ログ、ここに残してもまたDB確立error起きたら見られないんだけどね..
暗記しよう😃

$ service mysqld status

$ cd /var/lock/subsys/

$ rm -rf mysqld 

$ sudo su -

# service mysqld start

帰宅後サーバー内に入り、原因調査をしました。

$ cd /var/log/

$ tail -n200 mysqld.log
2019-12-17 03:44:07 3906 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
2019-12-17 03:44:07 3906 [ERROR] Plugin 'InnoDB' init function returned error.
2019-12-17 03:44:07 3906 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2019-12-17 03:44:07 3906 [ERROR] Unknown/unsupported storage engine: InnoDB
2019-12-17 03:44:07 3906 [ERROR] Aborting

2019-12-17 03:44:07 3906 [Note] Binlog end
2019-12-17 03:44:07 3906 [Note] Shutting down plugin 'partition'
2019-12-17 03:44:07 3906 [Note] Shutting down plugin 'INNODB_SYS_DATAFILES'
2019-12-17 03:44:07 3906 [Note] Shutting down plugin 'INNODB_SYS_TABLESPACES'
2019-12-17 03:44:07 3906 [Note] Shutting down plugin 'INNODB_SYS_FOREIGN_COLS'
2019-12-17 03:44:07 3906 [Note] Shutting down plugin 'INNODB_SYS_FOREIGN'
2019-12-17 03:44:07 3906 [Note] Shutting down plugin 'INNODB_SYS_FIELDS'
~~~~~~~略~~~~~~~

ERRORし始めて、しばらくしたらShutting down plugin が始まっているのが分かります。
調べたところメモリ枯渇みたいなので
swap領域サイズを広げることで対策できそうでした。

よし、じゃあswap領域どのくらいかチェックするぞ〜😃

# free
             total       used       free     shared    buffers     cached
Mem:       1009496     936620      72876        164       6584      53944
-/+ buffers/cache:     876092     133404
Swap:            0          0          0

ない….(ドン引き)

「t2.microにお勧めのswap領域」
と、まとめサイトのタイトルみたいなググり方して
『だいたい2倍』
と、出てきたので設定ログ残します。
EC2ってデフォルトでswap領域ないという事実を知りました!

$ cd

$ cd ..

$ sudo chmod 777 tmp

$ sudo dd if=/dev/zero of=/tmp/swap.img bs=1M count=2048
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 32.5234 s, 66.0 MB/s

$ du -h /tmp/swap.img
2.1G    /tmp/swap.img

$ sudo chmod 600 /tmp/swap.img

$ sudo mkswap /tmp/swap.img
Setting up swapspace version 1, size = 2097148 KiB
no label, UUID=76115d1b-feaa-4ea6-b74f-fd8392cd6539

$ sudo swapon /tmp/swap.img

$ free -m
             total       used       free     shared    buffers     cached
Mem:           985        923         62          0          1         15
-/+ buffers/cache:        906         79
Swap:         2047          0       2047

できました👏

おまけでaccess_logチェックしたコマンドも置きます。
(以前Nginxのアクセス数を表示させたやつのApache用に書き換えたものです)
grepで例外指定して本日分の行数をcatさせます。
約600件なので、そのくらいを表示させてアクセスの多い時間を特定します。
だいたい当たりがついているのであればgrepで時間指定しても良いかもです。

$ cat /var/log/httpd/access_log  | grep -v 126.36.***.*** | grep -v 39.110.***.*** | grep  '17/Dec/2019' | wc -l
630

DB接続できていなくて焦ったけれども
障害調査して対策までできてblogのネタにも出来たので
良い感じのerrorでした😃おやすみなさい〜