チェ・ゲバムラの日記

脱犬の道を目指す男のブログ

【CentOS6】サーバのディスク容量圧迫原因調査とMySQL(InnoDB)のテーブルスペースibdata1の肥大化

とあるサーバのディスク容量が多くなっていたので確認した時のメモ。

環境

CentOS6
Apache 2.2

手順

1.rootログインして下記で状況確認。

df -h

2.下記いずれかのコマンドで調査
ルート以下すべて再帰的に確認

du -s /*

※オプションhをつけるとM、Gとかもつけてくれる
du -sh data
5.7M data

当該ディレクトリ以下

du -s ./*

指定ディレクトリ以下

du -s /var/*

ディスク容量を圧迫していた原因

1./var/log/httpd/access●●
大体予想通り。logrotateの保管世代を見直してもいいかも。

2./var/lib/mysql/ibdata1
Mysql(InnoDB)のデータ領域(テーブルスペース)で、
稼働したままサイズを小さくするのは難しいため、リストア必要。


とはいえアクセスログはGA見てもPV増えてないし、
多分このibtable1が根源なのは間違いなさそう。

ibdata1とは

/var/lib/mysql/ibdata1
MySQLInnoDB)におけるテーブルスペース。
主にテーブルへの書き込み、更新、削除等の際に発生するログのようなもの。
放置していると容量を圧迫する場合がある。
上限を設定可能だが、低すぎる設定にしてしまうとDBの更新自体が出来なくなるので構築初期段階で必ず検討する必要がある。
縮小の手段は無し。リストアする以外の解決方法は無い。

リストア方法

やむを得ずリストアする場合の流れは
1. mysqldumpの取得
2. MySQLの停止
3. my.cnfの修正(必要なら)
4. ibdata*とib_logfile*の削除
5. MySQLを起動する
6. dumpデータの流し込み

再発防止策

テーブルにレコードを追加、更新、削除などが頻繁に起こるようなプログラムはなるべく避ける。
もしどうしても必要な場合はディスク容量と相談しつつ、MySQLテーブルスペース初期設定を行う。