InnoDBでファイルコピーでバックアップを取る方法
MyISAMではテーブル毎にデータファイルが作成されるが、InnoDBではMySQL4.0まではすべてのデータベースのデータを一つのファイルで管理していた(mysqlroot/data/ibdata1)。
しかし、MySQL4.1以降はInnoDBでもテーブル毎にデータファイルを作成することができるようになった。
手順
- my.iniに[mysqld]ディレクティブ以下にinnodb_file_per_tableを追加
- MySQLサービスの再起動
- show variables like '%innodb_file_per_table%'でValueがONになっている事を確認
- optimize tableコマンドを実行。これによりテーブル毎のファイルが作成される。(自分はMySQL Administratorからやった)
- MySQLサービスの停止
- cp hoge hoge_temp
- mv hoge hoge_back
- mv hoge_temp hoge
- MySQLサービスの起動
で上手くいった。
ちなみにMyISAMの場合はデータベース名が変わってもちゃんとテーブルを認識できるが、InnoDBの場合はデータベース名が変わるとテーブルを認識できなくなる。
残タスク
- ibdata1のサイズが小さくならない件について調査
- まじめに動作確認(ほんとに動くのかどうか)
目標としてはRAMディスク上にInnoDBのデータを乗せる事なのだけれども…事例がほとんどない気がするのでやってみないと分からないなぁ。