概要
AWS E2 インスタンス上に MySQL, SonarQube インストールし起動するものの
MySQL が落ちるという事象が発生。
ログを見ると以下のエラーが。。
1 2 3 4 5 6
| 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 [ERROR] Unknown/unsupported storage engine: InnoDB [ERROR] Aborting
|
1 2 3
| Cannot allocate memory for the buffer pool
バッファープールへのメモリ割当ができない
|
割りあてるメモリがないという話。
なので、メモリを作ります。
対策 1. swap 領域を作成する
swap 領域作成
1 2 3 4 5 6 7 8
| // 空ファイル作成
// 作成した空ファイルをswap領域に設定
// スワップ領域を有効化
|
swap 領域確認
1 2 3 4 5
|
total used free shared buff/cache available Mem: 1015472 833592 66456 1456 115424 54708 Swap: 1048572 491136 557436 ← Swapの設定が追加されていることを確認
|
mysql 再起動
対策 2. innodb_buffer_pool_size の割当を増やす
現在設定されている innodb_buffer_pool_size 確認
1 2 3 4 5 6 7
| $ mysql -u <user> -p<pass> <db> -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size'"
+-------------------------+-----------+ | Variable_name | Value | +-------------------------+-----------+ | innodb_buffer_pool_size | 118835956 | +-------------------------+-----------+
|
エラーログにあった 137363456 を下回ってるのがわかります。
この割当メモリを増やします。
my.cnf の場所探し
左から順に検索し該当するファイルがあればその my.cnf を参照します。
/etc/my.cnf → /etc/mysql/my.cnf → /usr/etc/my.cnf → ~/.my.cnf
1 2 3
| order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
|
メモリ追加
自分の方では
my.cnf 上に innodb_buffer_pool_size の設定項目がなかったので
追加しました。
1 2 3 4 5 6 7 8 9 10
| [mysqld] ... ...
innodb_buffer_pool_size = 256M
[mysqld_safe] ... ...
|
mysql 再起動
増えているか確認
1 2 3 4 5 6 7
| $ mysql -u <user> -p<pass> <db> -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size'"
+-------------------------+-----------+ | Variable_name | Value | +-------------------------+-----------+ | innodb_buffer_pool_size | 268435456 | +-------------------------+-----------+
|
今回発生していたエラーログが消えました。