mysqlのデータフォルダが大きくなっている。どうもibdata1というファイルが肥大化している。調べてみるとデフォルト設定でInnoDbを長期間使っていると、そのデータファイルであるibdata1が実際のデータよりも大きいファイルになってしまう。しかもこのibdata1は全てのInnoDbが共通で使うデータファイルのようだ。
これはいかん、ということでibdata1のサイズを減らし、tableごとにデータファイルを作成する方法のまとめ。
1.databaseをすべてダンプ
DBに登録されているデータをすべてダンプしてバックアップをつくります。--single-transaction のオプションをつけることで、ダンプ中のデータ変更を禁止します。
# mysqldump -u root -p --all-database --single-transaction > /tmp/all-database.dump
2.InnoDbを使っているテーブルを全て削除する。
TRUNCATEではなくDropする。面倒なのでschemaごとDropしてしまえ。
3.mysqldを停止
# /sbin/service mysqld stop
4.データディレクトリのibdata1, ib_logfile0, ib_logfile1を削除
# rm -f ibdata1 # rm -f ib_logfile0 # rm -f ib_logfile1
念のためにリネームしておくほうがベター
5.my.cnfを編集
innodb_data_home_dir = /var/lib/mysql (default comment out) innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend (default comment out) innodb_file_per_table innodb_buffer_pool_size = 512M
詳細はマニュアルを見るべし→http://dev.mysql.com/doc/refman/5.1/ja/innodb-configuration.html