連休明けたら MySQL のibdata1が9.1GBとかになってて焦った焦った。
ってのも12GBで割ってあるパーティションにDBが設置してあるので、
パンパンになってしまうとDBが動かなくなっちまう。ま、全部消えてしまっても良かったのですが。
概ね原因は見つけられてるので、今回はなんとかする方法として
いろんな実験をやりつつibdata1のダイエットに挑戦してみました。
(結果、サイズを小さくする事が出来なかったのですが、なんとかする方法は編み出しました)
- ibdata1をテーブル毎に分けてサイズ分散する手順
-
- サービス停止
- データベースのデータ削除
- 既存データの削除
- my.cnfにibdata1の設定行を追加
- mysql を立ち上げてバックアップからのリストア
mysqlとかを止めます。
バックアップ
論理的に
mysqldump -u root -p -x --all-databases > mysql_all.sql
物理的に
tar czpvf /hd/admin/mysql.tgz /var/db/mysql/
・サーバアカウントを抽出して
drop table [account];
->create table [account];
・ibdata* ib_logfile* ファイルの削除innodb_file_per_table=1
innodb_data_file_path = ibdata1:10M:autoextend:max:512Mmysql -u root -p < /hd/admin/mysql_all.sql
これでテーブル毎にibdataができるようになったはず。
でも私の場合、ibdata1自体は小さくなりましたが、各table毎に出来たibdファイルが全然大きくて全然問題解決になりませんので、次の方法で対処してみました。
- dbファイルを違うパーティションに移動する手順
-
- データベースファイルを別のパーティションにコピー
- コピーしたファイルを所有者を mysql:mysql に変更
- 実態があった所からコピー先にシンボリックリンクを設置
正直、問題を先送りにしただけのオススメできない方法ですが、
こうしないとやり過ごせない事もあります、きっと。
別件だけど、いや別件でもないけど、こまめにalter table [table] ENGINE InnoDB;でibdファイルの最適化が出来ると書いてあったのだけど、私の環境では完了しないでセッションが切れてしまう。どうして?
—————–
version
mysql Ver 14.14 Distrib 5.5.28, for FreeBSD9.1 (amd64) using 5.2