my.cnf の InnoDB の設定を変更してエラーが発生した場合
MySQL は普通に起動した。
phpMyAdmin から InnoDB で作成したテーブルにアクセスをすると、下記のエラーが表示された。
#1033 - Incorrect information in file: ./
InnoDB に係わる設定の内容は次のとおり。
# less /etc/my.cnf # Uncomment the following if you are using InnoDB tables innodb_data_home_dir = /var/lib/mysql innodb_data_file_path = ibdata1:10M:autoextend # You can set .._buffer_pool_size up to 50 - 80 % # of RAM but beware of setting memory usage too high innodb_buffer_pool_size = 256M innodb_additional_mem_pool_size = 20M # Set .._log_file_size to 25 % of buffer pool size innodb_log_file_size = 64M innodb_flush_method = O_DIRECT innodb_flush_log_at_trx_commit = 1 innodb_log_buffer_size = 8M
最初は「innodb_data_home_dir」と「innodb_data_file_path」の PATH の設定が間違っているのかと確認をしたが、改善しなかった。
また、「innodb_data_home_dir」と「innodb_data_file_path」で、Google で検索をしてみたが、有効な解決策が見つからなかった。
原因は InnoDB のログファイルのサイズ
そこで、「1033 - Incorrect information in file」を Google で検索をしてみたところ、次のブログを見つけた。
既にトランザクションログが存在していて,innodb_log_file_sizeの設定値の方が大きい場合,サイズアンマッチでInnoDBが起動しないので注意が必要だ。
http://d.hatena.ne.jp/koziy/20070911/1189472682
ということは、すでに作成されているトランザクションログを別のディレクトリに移動させれば、よいということなのだろうか。まずは試してみる。
# ls -l /var/lib/mysql total 594568 drwx------ 2 mysql mysql 4096 Jun 11 21:53 mydatabase -rw-rw---- 1 mysql mysql 597688320 Jun 11 22:03 ibdata1 -rw-rw---- 1 mysql mysql 5242880 Jun 11 22:03 ib_logfile0 -rw-rw---- 1 mysql mysql 5242880 Jun 11 22:03 ib_logfile1 drwx------ 2 mysql mysql 4096 May 12 22:03 mysql srwxrwxrwx 1 mysql mysql 0 Jun 10 17:44 mysql.sock drwx------ 2 mysql mysql 4096 May 12 22:03 test
表示されたファイルで、「ib_logfile*」がログファイルとなる。とりあえず、root のホームディレクトリに移動させてしまう。
# mv /var/lib/mysql/ib_logfile* ~/ # ls -l ~/ -rw-rw---- 1 mysql mysql 5242880 Jun 12 12:45 ib_logfile0 -rw-rw---- 1 mysql mysql 5242880 Jun 12 12:45 ib_logfile1 -rw-r--r-- 1 root root 18018 May 12 20:21 install.log -rw-r--r-- 1 root root 3948 May 12 20:21 install.log.syslog # /etc/rc.d/init.d/mysqld restart Stopping MySQL: [ OK ] Starting MySQL: [ OK ]
そして、phpMyAdmin から InnoDB のテーブルにアクセスをすると、正常に表示できた。
MySQL のマニュアルに書いてあった
テーブル スペース設定に新しいファイルを追加する時には、それが存在していない事を確認してください。InnoDB はサーバを再起動する時にファイル(トランザクションログ)を作成し、初期化します。
http://mirror.hostfuss.com/mysql/doc/refman/5.1/ja/adding-and-removing.html
テーブルスペースを復旧する為に必要になるので、古いログ ファイルを安全な場所にコピーしておいてください。古いログ ファイルをログ ファイル ディレクトリから削除し、ログ ファイル設定を変更する為に my.cnf を編集し、MySQL サーバを再起動してください。mysqld はログ ファイルが存在しない事を確認し、新しいものを作成している事を告げます。
http://mirror.hostfuss.com/mysql/doc/refman/5.1/ja/adding-and-removing.html