1. ホーム
  2. mysql

[解決済み] Amazon EC2, InnoDB: mmap (x bytes) failed; errno 12 のため mysql の起動が中断されました。

2023-01-24 12:36:11

質問

私は マイクロ インスタンスサーバをEC2ベースで この

mysqlサーバーが頻繁に失敗し、3回目にmysqlサーバーが消えました。ログには

120423 09:13:38 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
120423 09:14:27 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120423  9:14:27 [Note] Plugin 'FEDERATED' is disabled.
120423  9:14:27 InnoDB: The InnoDB memory heap is disabled
120423  9:14:27 InnoDB: Mutexes and rw_locks use GCC atomic builtins
120423  9:14:27 InnoDB: Compressed tables use zlib 1.2.3
120423  9:14:27 InnoDB: Using Linux native AIO
120423  9:14:27 InnoDB: Initializing buffer pool, size = 512.0M
InnoDB: mmap(549453824 bytes) failed; errno 12
120423  9:14:27 InnoDB: Completed initialization of buffer pool
120423  9:14:27 InnoDB: Fatal error: cannot allocate memory for the buffer pool
120423  9:14:27 [ERROR] Plugin 'InnoDB' init function returned error.
120423  9:14:27 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
120423  9:14:27 [ERROR] Unknown/unsupported storage engine: InnoDB
120423  9:14:27 [ERROR] Aborting

本当は failed; errno 12 ? そして、どのように私はより多くのスペース/メモリまたはこれを修正するために必要なものを与えることができました。

私は毎回、システム全体を再起動し、すべてのログを削除し、mysqlサーバーを再起動することによってこれを修正します。しかし、私は何かが私の構成に間違っていることを知っています。

また、私の `my.cnf' は以下のようなものです。

[mysqld]
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd
# max_allowed_packet=500M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0


innodb_buffer_pool_size         = 512M


[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

どのように解決するのですか?

RDSを使わずにマイクロインスタンスでwordpressを動かそうとしたら、同じ問題に遭遇しました。

Swapページを追加することで、私の場合は問題が解決しました。

以下の手順でスワップスペースを設定することができます。

それでもうまくいかない場合は、RDS サービスの利用を検討してください。

===============================================

記録のため、ブログの内容をコピーしました。クレジットはブログ作者へ pmoubed :

Amazon EC2 マイクロインスタンススワップスペース - Linux

私は、Amazon EC2 Linux Microインスタンスを持っています。マイクロインスタンスは613MBのメモリしか持っていないので、MySQLは時々クラッシュしていました。MySQL、マイクロインスタンス、メモリ管理について長い間検索した結果、マイクロインスタンスにはデフォルトのスワップ領域がないことがわかりました。もし、クラッシュを回避したいのであれば、マイクロインスタンスにスワップ領域を設定する必要があるかもしれません。実際、スワップを有効にした方がパフォーマンス的には良いようです。

以下は、マイクロインスタンスにスワップ領域を作成する方法です。AWSアカウントをお持ちで、マイクロインスタンスが動作していることを想定しています。

  1. 実行 dd if=/dev/zero of=/swapfile bs=1M count=1024
  2. 実行 mkswap /swapfile
  3. 実行 swapon /swapfile
  4. この行を追加する /swapfile swap swap defaults 0 0/etc/fstab

ステップ 4 は、再起動ごとにスワップ ファイルを自動的に有効にする場合に必要です。

スワップスペースに関連する便利なコマンドを紹介します。

$ swapon -s   
$ free -k

$ swapoff -a
$ swapon  -a

参考文献

  1. http://www.thegeekstuff.com/2010/08/how-to-add-swap-space/
  2. http://cloudstory.in/2012/02/getting-the-best-out-of-amazon-ec2-micro-instances/
  3. http://cloudstory.in/2012/02/adding-swap-space-to-amazon-ec2-linux-micro-instance-to-increase-the-performance/
  4. http://aws.amazon.com/ec2/instance-types/