MySQLが「Fatal error: cannot allocate memory for the buffer pool」となり起動しない問題

開発環境のWordPressがいきなり「データベース接続確立エラー」となり、mysqlが起動しなくなってしまった時の対処法です。

原因:buffer poolのメモリ割当が少なかったせい

mysqlを起動すると以下のようにエラーに。

$ service mysqld start
MySQL Daemon failed to start.
Starting mysqld:                                           [FAILED]

まずは、/var/log/mysqld.logを確認。すると以下のようなエラーがでていました。

151117  9:55:58 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
151117  9:55:58 InnoDB: Completed initialization of buffer pool
151117  9:55:58 InnoDB: Fatal error: cannot allocate memory for the buffer pool
151117  9:55:58 [ERROR] Plugin 'InnoDB' init function returned error.
151117  9:55:58 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
151117  9:55:58 [ERROR] Unknown/unsupported storage engine: InnoDB
151117  9:55:58 [ERROR] Aborting

原因となりそうなのはこの部分。

151117  9:55:58 InnoDB: Fatal error: cannot allocate memory for the buffer pool

対処法:my.cnfのinnodb_buffer_pool_sizeを増やす

メモリの割当ができなかったようなので、/etc/my.cnfを編集してメモリの割当を増やします。とりあえず、512Mにすることに。

innodb_buffer_pool_size = 512M

そこで、MySQLを再起動。

$ service mysqld start
Starting mysqld:   [  OK  ]

これでMySQLが再起動しました。

*注意* innodb_log_file_sizeは変更しない

ちなみにinnodb_log_file_sizeを合わせて変更しようとすると、MySQL 5.6未満だとエラーとなるようです。

特に理由がなければ、innodb_buffer_pool_sizeのメモリを増やすだけで良いかなと思います。

[MySQL] innodb_log_file_sizeを変更した時のエラー対処