web-dev-qa-db-ja.com

mysql55の自発的な誤動作

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

何が原因で、どうすれば対処できますか?

1
Vladimir Kornea

これはログファイルに表示されましたか?

 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 
8
Philᵀᴹ

Philがすでに書いたように-データベースサーバーに十分なメモリがありません。

syslogOut of memoryエラーを検索し、OOMkillerがMySQLを停止する前に実行されていたプロセスを検索します。このようにして、再起動の原因となった犯人を見つけることができます。または、mysqlログをチェックして、通常よりも多くのメモリを消費する可能性のあるクエリを探します。

サーバーの目的(データベースのみ、LAMPスタック、その他のサービス)に応じて、次のことができます。

  • さらに追加RAM(これが最良のオプションですが、MySQLの再起動を担当するプロセスを見つけることでそれに従います)
  • mySQL構成を変更してRAM使用量を減らす
  • mySQLに高い優先度を与えるようにOOMkillerを構成します(例 dba squareのブログ
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 

その他の役立つリソース:

2
Marcin S.