innoDBの最初の挙動

バックアップに関わる実験の1つ。
現在僕のPCには、MySQL6が入っている。恥ずかしながらほとんど使われていないので、innoDBのibdataファイルの初期化とib_logfile0とib_logfile1がどうなるかを知ろうと思った。
ibdataにはinnoDBテーブルのデータとインデックスデータが、全てのデータベースから入れられている。これはテーブルスペースとして一定量確保されている。容量が足りなくなると、さらに一定量追加される仕組みのようだ。データの消去をしても残るらしいので、ファイルサイズは自然に小さくなることはない。このファイルサイズの大きさを適正にしたい場合は、mysqldumpをして、必要ファイルを削除してから、リストアしないといけない。
まずはmysqldumpをする。が、僕のデータベースにはテスト用だけなのでバックアップをとらなかった。mysql用のデータを保存してあるテーブルはMyISAMで動いているので問題ない。
innoDBのテーブルを削除する。これで、それぞれのデータベースディレクトリのテーブル名.frmという構造ファイルが消去されるはず。次にmysqlを停止させてから、indata, ib_logfile0, ib_logfile1を手動でファイル削除する。
その後、mysqlを起動させる。そうすると、innoDBのテーブルを作っていないのにも関わらず、ibdata, ib_logfile0, in_logfile1が作成された。my.cnfでskip innoDBコメントアウトをはずしてあるので、つまりinnoDBを使用する宣言をしてあるので、innoDB用のテーブルスペースが確保されたみたいだ。ちなみに、ファイルサイズは3つとも、10,240キロバイト。初期値は10メガということか。


このテーブルスペースがむやみに大きくならないように、次のものをmy.cnfに追加する。

[mysqld]
innodb_file_per_table

これにより、ibdataファイルが必要以上に大きくならず、それぞれのデータベースディレクトリに、テーブル名.ibdというファイルが作成されるようになり、それぞれのデータがテーブルごとに分散する。
これにより管理やデフラグメント化が容易になる。
ただ、ibdataファイルを大きくしたくないだけならば、

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

これをmy.cnfに書くことによって、最大250ギガバイトまでと決めることもできる。250ギガバイトを越えようとするとエラーがでるようになる。