MySQLに関してのChefをゴリゴリと書いた後にchef実行でうぇーいとやったら、以下のmysqldがスタート出来ないというエラーが。
$ knife solo cook hostname (中略) STDOUT: MySQL Daemon failed to start. Starting mysqld: [FAILED] STDERR: (後略)
とりあえずmysqldのログを見てみる。
場所がわからなかったので、my.cnfで場所を確認。
$ cat /etc/my.cnf | grep log-error log-error=/var/log/mysqld.log
ログの場所でtail。
$ tail -f /var/log/mysqld.log
再度実行してエラーを確認。
(前略) InnoDB: mmap(137363456 bytes) failed; errno 12 2014-11-25 09:35:13 28858 [ERROR] InnoDB: Cannot allocate memory for the buffer pool 2014-11-25 09:35:13 28858 [ERROR] Plugin 'InnoDB' init function returned error. 2014-11-25 09:35:13 28858 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 2014-11-25 09:35:13 28858 [ERROR] Unknown/unsupported storage engine: InnoDB 2014-11-25 09:35:13 28858 [ERROR] Aborting (後略)
どうやらこの辺りでエラーを吐いている様子。
ググってみると、EC2のt1.microインスタンスだとMySQLに必要なメモリ領域が確保できないから出現するエラーとのこと。
swap領域を確保してあげれば良いらしいので、記事末尾の参考内コードを参照しつつ記述を加える。
script 'create swapfile' do interpreter 'bash' not_if { File.exists?('/var/swapfile') } code <<-eof dd if=/dev/zero of=/var/swapfile bs=1M count=2048 && chmod 600 /var/swapfile && mkswap /var/swapfile eof end mount '/dev/null' do # swap file entry for fstab action :enable # cannot mount; only add to fstab device '/var/swapfile' fstype 'swap' end script 'activate swap' do interpreter 'bash' code 'swapon -ae' end
というわけで再度chefを実行。
無事成功!
後々Chef実践入門を読み直していたら、P76辺りからEC2のマイクロインスタンスにスワップファイルを作る例が載っていた。
というか、作りましょう常識なので、と書いてあった。
本はちゃんと読まないといかんですね。
参考
Creating a swap file with Chef
Chef で aws の t1.micro に swap を作るレシピ - Qiita
Amazon EC2, mysql aborting start because InnoDB: mmap (x bytes) failed; errno 12 - Stack Overflow

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)
- 作者: 吉羽龍太郎,安藤祐介,伊藤直也,菅井祐太朗,並河祐貴
- 出版社/メーカー: 技術評論社
- 発売日: 2014/05/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (9件) を見る