MySQL8.0がディスク容量とメモリを大量消費する対策
MySQL8.0を導入したEC2サーバーにてWordpressを運用したところ、「データベース接続確立エラー」となるため対策しました。
サーバー内を調べたところ、ディスク使用率がほぼ100%までいっていて驚愕しました。もともとボリュームディスクが8Gしかなくそのうち1GをSwap領域にしていました。とりあえずSwapを削除して様子を見ましたところ、MySQLがメモリーエラーでたびたび落ちるようになりました。
どうやらディスク使用率が高いのも、メモリー消費が大きいのも、MySQL8.0が原因のようです。まずmysqldファイルがデカい!これだけで1GBあるんですけど…。あとこまごました実行ファイルがたくさんあってそれぞれけっこうなデカさでした。
とりあえずGoogleでできそうなことを調べ、以下を実行することにしました。
前提事項
・OS : AmazonLinux2
・MySQL : 8.0.25(yumリポジトリ版)
1.MySQLの設定変更
my.cnfに以下の設定を追記しました。(マニュアルを読んだのですがよくわからず...。初期値は‐1だそうです。)
table_definition_cache = 400
2.Swap領域の追加
一度削除してしまったSwap領域を作り直しました。そして再起動時にも自動で割り当てるようにします(fstab)。
# dd if=/dev/zero of=/swapfile bs=1M count=1024
# mkswap /swapfile
# swapon /swapfile
# vi /etc/fstab
※下記記述を追加
/swapfile swap swap defaults 0 0
3.AWS EC2のルートボリュームを増やす
AWSコンソール > EC2 > Elastic Block Store > ボリューム
にて、一覧から使用中のボリュームをチェック選択して「アクション」から「ボリュームの変更」を選択。8G→16Gに変えて「保存」します。反映されるまで数分待ちます。
次に、拡張したボリュームを認識させます。
# growpart /dev/xvda 1
# xfs_growfs /dev/xvda1
※以前に別のEC2サーバーで拡張したときにつかった「resize2fs」というコマンドは使えなかったので「xfs_growfs」
無事に領域に余裕ができました。
# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 482M 0 482M 0% /dev
tmpfs 492M 0 492M 0% /dev/shm
tmpfs 492M 500K 492M 1% /run
tmpfs 492M 0 492M 0% /sys/fs/cgroup
/dev/xvda1 16G 7.6G 8.4G 48% /
tmpfs 99M 0 99M 0% /run/user/1001
以上となります。