
1 つのデータベースを InnoDB エンジンを使用するように変換した後、/etc/mysql/my.cnf に次の行を追加しました。
innodb_buffer_pool_size = 2560M
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 2
innodb_thread_concurrency = 16
innodb_flush_method = O_DIRECT
しかし、mysqldを再起動すると「ERROR 2013 (HY000) at line 2: Lost connection to MySQL server during query」というエラーが発生します。また、mysqlエラーログには次の内容が表示されます。
InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 268435456 bytes!
100118 20:52:52 [ERROR] Plugin 'InnoDB' init function returned error.
100118 20:52:52 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
100118 20:52:52 [ERROR] Unknown/unsupported table type: InnoDB
100118 20:52:52 [ERROR] Aborting
そこでこの行をコメントアウトしました
# innodb_log_file_size = 256M
そして、mysql が正常に再起動されました。
mysql エラーに表示された「5242880 バイトのログ ファイル」とは何でしょうか。これはこのサーバーの InnoDB エンジンの最初のデータベースなので、そのログ ファイルはいつ、どこで作成されるのでしょうか。この場合、my.cnf で innodb_log_file_size ディレクティブを有効にするにはどうすればよいでしょうか。
編集
/var/lib/mysql/ib_logfile0 を削除して mysqld を再起動しようとしましたが、それでも失敗しました。エラー ログに次のように表示されます。
100118 21:27:11 InnoDB: Log file ./ib_logfile0 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile0 size to 256 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Progress in MB: 100 200
InnoDB: Error: log file ./ib_logfile1 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 268435456 bytes!
解決
/var/lib/mysql の ib_logfile0 と ib_logfile1 の両方を削除した後、動作するようになりました。
答え1
InnoDB は設定に関して非常にうるさいので、何かが間違っていると、諦めて終了します。データ損失なしでログ ファイルのサイズを変更するには、次の手順を実行します。
- ログ ファイル サイズに対して行った構成の変更を元に戻し、MySQL を再起動します。
- 実行中のMySQLで: SET GLOBALinnodb_fast_shutdown=0;
- MySQLを停止する
- ログ ファイル サイズの設定を変更します。
- 両方のログファイルを削除します。
- MySQL を起動します。ログ ファイルが不足しているとエラーが表示されますが、ログ ファイルが作成され、すべて正常になります。