Amazon AWSにてt1microサービスを利用していますが、MySQLがよく落ちるんです。
それで、ログを確認したところ。。。
[Note] InnoDB: Initializing buffer pool, size = 128.0M InnoDB: mmap(137363456 bytes) failed; errno 12
[ERROR] InnoDB: Cannot allocate memory for the buffer pool
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting
メモリを確認すると、Swapが0でした。。。
[root@ip-xxx ~]# free
total used free shared buffers cached
Mem: 1018504 949092 69412 31980 28740 695944
-/+ buffers/cache: 224408 794096
Swap: 0 0 0
要するに、AWSのt1microサービスだと、Swap領域が無かった訳です。
やることは、Swap領域を作成してあげれば、問題解決ですね。
まずは、ddコマンドで指定サイズの空のファイルを作成します。
とりあえず、サイズは1024MBで。
[root@ip-xxx ~]# dd if=/dev/zero of=/swapfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 14.8488 s, 72.3 MB/s
mkswapで、スワップ領域を作成します。
[root@ip-xxx ~]# mkswap /swapfile
mkswap: /swapfile: warning: don't erase bootbits sectors
on whole disk. Use -f to force.
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx
swaponコマンドで、スワップ領域を有効にします。
[root@ip-xxx ~]# swapon /swapfile
freeコマンドで、確認すると、Swap領域が作成されました。
[root@ip-xxx ~]# free
total used free shared buffers cached
Mem: 1018504 950208 68296 31980 28772 697060
-/+ buffers/cache: 224376 794128
Swap: 1048572 0 1048572
あとは、MySQLを再起動するだけです。
[root@ip-xxx ~]# service mysqld restart
mysqld を停止中: [ OK ]
mysqld を起動中: [ OK ]
上記設定のままだと、再起動した時にマウントされないので、 /etc/fstab
に以下の1行を追加。
/swapfile swap swap defaults 0 0
お疲れ様でした。