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