肥大化した MySQL の InnoDB をお掃除しよう

ふと気が付いたら ibdata1 が 2.5 GB を越えていて、データは精々 1.5GB 程度なのに何でと調べてからようやく InnoDB に纏わるお話を知りました。恥ずかしいことに、ibdata1 は延々と巨大化していくだけでファイルを作り直さない限りは縮小しないなんてこと知りませんでした。なので当然、テーブル毎の分割なんてやっているわけもなく。

ということでぐぐって先人達の知恵を借りてお掃除したのでメモ。Windows 64bit の MySQL 5.5 で実行しましたが問題なし。

事前準備

Apache を止めた後、お呪いとして一旦 MySQL を再起動。その後データが入ってるディレクトリを丸ごとコピーしてバックアップ。

net stop apache2.4
net stop mysql & net start mysql
net stop mysql
copy [MySQL-DB] C:\tmp
net start mysql

1. DB を全てダンプ

mysqldump -u root -p --all-database --single-transaction > C:\tmp\all-database.sql

2. InnoDB を使った DB を DROP

DROP DATABASE wordpress;

3. MySQL 停止

net stop mysql

4. ibdata1, ib_logfile0, ib_logfile1を削除

del ibdata1 ib_logfile0 ib_logfile1

5. my.ini を編集

テーブル毎に分割するのと、ibdata は様子見を兼ねて 10 MB + 5MB + 拡張に。

innodb_data_file_path=ibdata1:10M;ibdata2:5M:autoextend
innodb_file_per_table=1

6. MySQL 起動

net start mysql

7. インポート

mysql -u root -p < C:\tmp\all-database.sql

これで綺麗さっぱりゴミが消えてくれました。

コメントを残す