No.193


【MySQL】InnoDBが起動しないときの確認事項

InnoDBが立ち上がらないよママン…

 MySQLは5.1以降だとデフォルトでInnoDBをサポートしているけど、/etc/my.cnfを変更したりして再起動をかけるとInnoDBだけ起動しないことがある。

 検索するといっぱい解決方法が出てくるので詳細は割愛するけど、基本的には下記のファイルを削除して再起動かければInnoDBも起動してくれる。

/var/lig/mysql/ib_logfile*

 意外と理由書いてるところが少なかったので、説明用にざっくりメモ。


起動しない理由

 ログ(/var/log/mysqld.log)を見ると、下記のようなエラーが出ているはずだ。

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 16777216 bytes!

 メッセージを読めば一目瞭然だけど、原因はInnoDBのログファイルの数値が/etc/my.cnfに記載されている数値と異なっているからだ。

 だから、古いログファイル(/var/lib/mysql/ib_logfile*)を削除すると動くようになるというわけだ。

 ちなみに再起動した時のログは下記のようになる。

170320 13:13:31  InnoDB: Log file ./ib_logfile0 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile0 size to 16 MB
InnoDB: Database physically writes the file full: wait...
170320 13:13:32  InnoDB: Log file ./ib_logfile1 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile1 size to 16 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
170320 13:13:32  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.

 ログファイルが存在しないのでMySQLがリカバリして作成してくれていることが分かるだろう。


補足:InnoDBが起動しているかの確認

 確かめるにはMySQLコンソールから下記のコマンドを実行する。

show engines;

 下記のように実行結果のInnoDBのSupportYESになっていればOK。

mysql> show engines;
+------------+---------+------------------------------------------------------------+--------------+------+------------+
| Engine     | Support | Comment                                                    | Transactions | XA   | Savepoints |
+------------+---------+------------------------------------------------------------+--------------+------+------------+
...
| InnoDB     | YES     | Supports transactions, row-level locking, and foreign keys | YES          | YES  | YES        |
...
+------------+---------+------------------------------------------------------------+--------------+------+------------+