主にWEB関係の話。

スポンサード リンク

MySQLのInnoDBファイル、ibdata1の肥大化対策の話。

ibdata1のサイズは縮小する事無くどんどんと肥大化していく。

その対策の話、

my.cnfで、

innodb_data_file_path=ibdata1:100G

などとibdata1のサイズの上限を指定する事で単純にibdata1ファイルの肥大化そのものを抑える事は可能だけれど、それだとソレ以上に「書き込ませない」「肥大化による影響から別の問題(全体的なディスクが圧迫されるなど)が生じる事を回避出来る」というだけで、データベース運用上の問題の解決にはならない。

とりあえず、DELETEとかやってあげてもibdata1ファイルの実サイズが減らない事で圧迫されている部分もあるとおもうので、mysqldumpして、リストアしてやることで、ibdata1のファイルサイズは結果として縮小されるけれど、毎回これやるのってちょっと…。

というわけで、以下のような手順で、テーブルごとにテーブルスペースを作成し、ibdファイルを持つように設定する。

1.全てのデータベースをmysqldumpする。
2.MySQLサーバを停止する。
3./var/lib/mysql 上の ibdata1 ib_logfile0 ib_logfile1 を適当に.old とか付加してリネームするか、適当な場所に移動しておく。
4./etc/my.cnf に以下を追記する。

innodb_file_per_table

5.MySQLサーバを起動してダンプファイルからリストアする。

これで、

ALTER TABLE hogetable ENGINE=InnoDB;

って感じのSQL実行することで各テーブルのibdが縮小されるようになるのでちょっとお手軽。

ちなみに、上記の手順で再作成されたibdata1などは全てのテーブルで利用されるので削除しないこと。

スポンサード リンク

人気記事

最近の投稿

カテゴリー

タグ