見出し画像

MySQL8.0がディスク容量とメモリを大量消費する対策

MySQL8.0を導入したEC2サーバーにてWordpressを運用したところ、「データベース接続確立エラー」となるため対策しました。

サーバー内を調べたところ、ディスク使用率がほぼ100%までいっていて驚愕しました。もともとボリュームディスクが8Gしかなくそのうち1GをSwap領域にしていました。とりあえずSwapを削除して様子を見ましたところ、MySQLがメモリーエラーでたびたび落ちるようになりました。

どうやらディスク使用率が高いのも、メモリー消費が大きいのも、MySQL8.0が原因のようです。まずmysqldファイルがデカい!これだけで1GBあるんですけど…。あとこまごました実行ファイルがたくさんあってそれぞれけっこうなデカさでした。

スクリーンショット 2021-07-29 105802

スクリーンショット 2021-07-29 105845

とりあえず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

以上となります。

この記事が気に入ったらサポートをしてみませんか?