MySQLは数週間または数日間正常に動作し、その後突然、ユーザーの操作なしで、接続のすべての試行が失敗し始めます。これは /var/log/mysqld.log
:
160916 14:42:01 [Note] /usr/libexec/mysql55/mysqld: ready for connections.
Version: '5.5.51' socket: '/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Server (GPL)
160930 03:05:51 mysqld_safe Number of processes running now: 0
160930 03:05:52 mysqld_safe mysqld restarted
160930 3:05:53 [Note] /usr/libexec/mysql55/mysqld (mysqld 5.5.51) starting as process 8961 ...
160930 3:05:53 [Note] Plugin 'FEDERATED' is disabled.
160930 3:05:54 InnoDB: The InnoDB memory heap is disabled
160930 3:05:54 InnoDB: Mutexes and rw_locks use GCC atomic builtins
160930 3:05:54 InnoDB: Compressed tables use zlib 1.2.8
160930 3:05:54 InnoDB: Using Linux native AIO
160930 3:05:54 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
160930 3:05:54 InnoDB: Completed initialization of buffer pool
160930 3:05:54 InnoDB: Fatal error: cannot allocate memory for the buffer pool
160930 3:05:54 [ERROR] Plugin 'InnoDB' init function returned error.
160930 3:05:54 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
160930 3:05:54 [ERROR] Unknown/unsupported storage engine: InnoDB
160930 3:05:54 [ERROR] Aborting
160930 3:05:54 [Note] /usr/libexec/mysql55/mysqld: Shutdown complete
160930 03:05:54 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
何が原因で、どうすれば対処できますか?
これはログファイルに表示されましたか?
160930 3:05:54 InnoDB:致命的なエラー:バッファプールにメモリを割り当てることができません
ホストで使用可能な十分なメモリがありません。 MySQLが使用するように構成されているメモリの量を減らすか、ホスト/ VMが持つメモリの量を増やします。
十分なメモリがないため、データベースを起動できません。
そもそもデータベースが再起動した理由を推測すると、OSのメモリが不足したときにオペレーティングシステムのOOMKillerがMySQLプロセスを「1つ」として選択した可能性があります。 Unix.SEの OOM killerが最初に強制終了するプロセスを決定する方法 を参照してください。
MySQLがストレージエンジン(InnoDB)にそれ自体を初期化するように要求したため、「不明/サポートされていないストレージエンジン」メッセージが表示されますが、メモリ不足のため実行できません。
160930 3:05:54 [エラー]プラグイン「InnoDB」の初期化関数がエラーを返しました。 160930 3:05:54 [エラー]プラグイン「InnoDB」のSTORAGEENGINEとしての登録に失敗しました。 160930 3:05:54 [エラー]不明/サポートされていないストレージエンジン:InnoDB
Philがすでに書いたように-データベースサーバーに十分なメモリがありません。
syslog
でOut of memory
エラーを検索し、OOMkillerがMySQLを停止する前に実行されていたプロセスを検索します。このようにして、再起動の原因となった犯人を見つけることができます。または、mysqlログをチェックして、通常よりも多くのメモリを消費する可能性のあるクエリを探します。
サーバーの目的(データベースのみ、LAMPスタック、その他のサービス)に応じて、次のことができます。
mysql-server-01〜#cat/proc/$(pidof mysqld)/ oom_score 24 mysql-server-01〜#echo'-20 '>/proc/$(pidof mysqld)/oom_score_adj mysql-server-01〜#cat/proc/$(pidof mysqld)/ oom_score
その他の役立つリソース: