MySQLが起動しない…in AWS
AWS の microインスタンスにapacheもredisもmysqlも全部載せの開発環境を構築して、アプリケーション開発をしていたところ、突然DBが接続できなくなった。
ログはこんな感じ。
cat /var/log/mysqld.log ... 130716 07:30:40 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended 130716 07:32:37 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql 130716 7:32:37 [Note] Plugin 'FEDERATED' is disabled. 130716 7:32:37 InnoDB: The InnoDB memory heap is disabled 130716 7:32:37 InnoDB: Mutexes and rw_locks use GCC atomic builtins 130716 7:32:37 InnoDB: Compressed tables use zlib 1.2.5 130716 7:32:37 InnoDB: Using Linux native AIO 130716 7:32:37 InnoDB: Initializing buffer pool, size = 128.0M InnoDB: mmap(137363456 bytes) failed; errno 12 130716 7:32:37 InnoDB: Completed initialization of buffer pool 130716 7:32:37 InnoDB: Fatal error: cannot allocate memory for the buffer pool 130716 7:32:37 [ERROR] Plugin 'InnoDB' init function returned error. 130716 7:32:37 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 130716 7:32:37 [ERROR] Unknown/unsupported storage engine: InnoDB 130716 7:32:37 [ERROR] Aborting 130716 7:32:37 [Note] /usr/libexec/mysqld: Shutdown complete ...
ググってみると、出ました!AWSさん!
I have a Amazon EC2 Linux Micro instance. Since Micro instances have only 613MB of memory, MySQL crashed every now and then. After a long search about MySQL, Micro Instance and Memory Managment I found out there is no default SWAP space for Micro instance. So if you want to avoid the crash you may need to setup a swap space for your micro instance. Actually performance wise is better to enable swap.
EC2のMicroインスタンスなんて使っちゃってる貧乏人さんへ。
Microインスタンスは613MBしかメモリが載ってないからMySQLがクラッシュするのは必然だよ?
でも、僕気づいちゃったんだ。MicroインスタンスにはSWAPがないってことに。
どうしてもお金がなくてMicroしか使えない貧乏なあなたは、SWAP領域を確保して良い感じに設定すれば動くよ![引用] http://www.prowebdev.us/2012/05/amazon-ec2-linux-micro-swap-space.html
適当に訳すときっとこんな感じ。
対応は以下。
swap領域の確保
# dd if=/dev/zero of=/swapfile bs=1M count=1024 # mkswap /swapfile # swapon /swapfile
fstabでswap領域の定義
# cp -ipv /etc/fstab{,.bak} # vim /etc/fstab + /swapfile swap swap defaults 0 0
対象のMicroインスタンスをリブート
以上!
随分と悩ませてくれたじゃないか…。