5次元のカオス

南の島の学生がつらつらと日々を書き連ねます

ibdata* の肥大化について

ibdata* の肥大化について

とある事情でホストのmysqlを再起動するとエラーメッセージがでて

mysqlが起動しなくなった.

(詳細なエラーメッセージをメモするの忘れた)

調べてみるとibdata1の要領が大きすぎるというエラーだったので

その解決法とibdata1とはなんなのかということを健忘録としてメモすることにしました.

ibdata1とはなんなのか?

大雑把にいうと,ibdata と ib_logfile の2つのファイルを使って

mysql の更新データを管理している.

詳細は下記を参照.

基本的には、my.cnfに記述した設定値に自動延長されますが、

データを削除しても要領が減るわけではないので

定期的にメンテナンスしないといけないのだとか...

(うーん、難しいよデータベース...)

ここのところずっと自動起動にしてたので知らない間に容量を圧迫してしまっていたようです.

ibdata1を最適化する

基本的なメンテナンスは以下のコマンドを実行すること.

mysql> use DB
mysql> ALTER TABLE tbl_name ENGINE=INNODB;

※ ファイルサイズは小さくならないがディスクスキャンを高速化することができる

ファイルサイズを小さくするには下記の手順を実行する.

1. 全ての InnoDB テーブルをダンプする為に mysqldump を利用する
2. サーバを停止する
3. 全ての存在するテーブルスペース ファイルを削除する
4. 新しいテーブルスペースを設定する   
5. サーバを再起動する
6. ダンプ ファイルをインポートする

mysqlが起動できなかったのでバイナリデータを移動させてそれを別のmysqlを使ってエクスポートすることにしました.

my.cnf を編集する

innodb_data_file_path = ibdata1:10M:autoextend:max:10M

上記の部分の値を変更すると、容量を調整できます.

※ あまり大きくしすぎるのも注意

※ maxを指定すると自動拡張することができます

以下の記事が大変 参考になりました.

参考