1. ホーム
  2. mysql

[解決済み] mysql Fatal error: cannot allocate memory for buffer pool

2022-02-16 14:15:27

質問

MySQLのエラーログがあるのですが、何か心当たりはありますか? ウェブサイトはしばらく機能していますが、数時間後にMySQLが完全にシャットダウンされます。

140919 10:48:27 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
140919 10:48:27 [Note] Plugin 'FEDERATED' is disabled.
140919 10:48:27 InnoDB: The InnoDB memory heap is disabled
140919 10:48:27 InnoDB: Mutexes and rw_locks use GCC atomic builtins
140919 10:48:27 InnoDB: Compressed tables use zlib 1.2.3.4
140919 10:48:28 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
140919 10:48:28 InnoDB: Completed initialization of buffer pool
140919 10:48:28 InnoDB: Fatal error: cannot allocate memory for the buffer pool
140919 10:48:28 [ERROR] Plugin 'InnoDB' init function returned error.
140919 10:48:28 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
140919 10:48:28 [ERROR] Unknown/unsupported storage engine: InnoDB
140919 10:48:28 [ERROR] Aborting

140919 10:48:28 [Note] /usr/sbin/mysqld: Shutdown complete

140919 10:48:28 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
140919 10:48:28 [Note] Plugin 'FEDERATED' is disabled.
140919 10:48:28 InnoDB: The InnoDB memory heap is disabled
140919 10:48:28 InnoDB: Mutexes and rw_locks use GCC atomic builtins
140919 10:48:28 InnoDB: Compressed tables use zlib 1.2.3.4
140919 10:48:28 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
140919 10:48:28 InnoDB: Completed initialization of buffer pool
140919 10:48:28 InnoDB: Fatal error: cannot allocate memory for the buffer pool
140919 10:48:28 [ERROR] Plugin 'InnoDB' init function returned error.
140919 10:48:28 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
140919 10:48:28 [ERROR] Unknown/unsupported storage engine: InnoDB
140919 10:48:28 [ERROR] Aborting

140919 10:48:28 [Note] /usr/sbin/mysqld: Shutdown complete

解決方法は?

TLDR;

Mysql がメモリ不足で再起動できません。適切なスワップファイルが設定されているかどうかを確認してください。

役に立たなかった?それがあなたの問題でないなら、研究を続けるために、より適格な質問があります。

背景

私は、EC2上に構築した最初のシステムでまさにこの問題に直面し、そこでホストされているワードプレスサイトが時々 "Error establishing database connection" でダウンすることが特徴でした。

ログを見ると、OPが投稿したのと同じエラーが出ていました。 このエラーを私が読み解くと(タイムスタンプは削除しています)。

  • Out of memory エラーです。 InnoDB: Fatal error: cannot allocate memory for the buffer pool
  • InnoDB は十分なメモリがないと起動できません。 [ERROR] Plugin 'InnoDB' init function returned error. [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. [ERROR] Unknown/unsupported storage engine: InnoDB [ERROR] Aborting
  • mysqld がシャットダウンしています。この文脈では、再起動に失敗していることを意味します。 [Note] /usr/sbin/mysqld: Shutdown complete

チェック /var/log/syslog を検索し マイスル が得られます。

Out of memory: Kill process 15452 (mysqld) score 93 or sacrifice child
Killed process 15452 (mysqld) total-vm:888672kB, anon-rss:56252kB, file-rss:0kB
init: mysql main process (15452) killed by KILL signal
init: mysql main process ended, respawning
type=1400 audit(1443812767.391:30): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=21984 comm="apparmor_parser"
init: mysql main process (21996) terminated with status 1
init: mysql main process ended, respawning
init: mysql post-start process (21997) terminated with status 1
<repeated>

注意:cronでログがローテートされる前にエラーが発生した場合、アーカイブされたログをgunzipして検索する必要があるかもしれません。

解決方法

私の場合、根本的な問題は、スワップファイルの設定を怠っていたことでした。

を実行することで、設定されているかどうかを確認することができます。 free -m .

total used free shared buffers cached Mem: 604340 587364 16976 0 29260 72280 -/+ buffers/cache: 485824 118516 Swap: 0 0 0

上記の例では、Swap: 0はスワップファイルなしを示します。

設定方法のチュートリアルです。

大きいことは必ずしも良いことではないことに注意してください より Ubuntuガイド :

収穫逓減とは、次のようなことです。 RAMサイズの2倍以上のスワップ領域が必要な場合 ハードディスクドライブ(HDD)のアクセスはRAMのアクセスより10³ほど遅いので、RAMを増やした方がよいでしょう。 1秒で終わるものが、突然15分以上かかる。 ! さらに、高速なSSD(Solid State Drive)なら1分以上かかることも...。


ここでの他の回答について...

The InnoDB memory heap is disabled

<ブロッククオート

これは本当のエラーではなく、InnoDBが独自のメモリ・アロケータではなく、システムの内部メモリ・アロケータを使用していることを示すだけである。デフォルトはyes/1であり、実稼働環境では許容されます。

ドキュメントによると、このコマンドは非推奨で、MySQL の 5.6 以上のバージョン(および MariaDB と思われる)では削除される予定である。

http://dev.mysql.com/doc/refman/5.6/en/innodb-performance-use_sys_malloc.html

ありがとうございました。 ルーベン・シャーデのコメント

[Note] Plugin 'FEDERATED' is disabled.

<ブロッククオート

FEDERATEDが無効であるというメッセージはエラーではありません。ただ、あなたのmysqlサーバーでFEDERATEDエンジンがオンになっていないことを意味しているのです。デフォルトでは使用されていません。必要ないのであれば、このメッセージは気にしないでください。

ご覧ください。 https://stackoverflow.com/a/16470822/2586761