ふと気が付いたら 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
これで綺麗さっぱりゴミが消えてくれました。
0 Comments.