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のSupport
がYES
になっていればOK。
mysql> show engines;
+------------+---------+------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+------------+---------+------------------------------------------------------------+--------------+------+------------+
...
| InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
...
+------------+---------+------------------------------------------------------------+--------------+------+------------+