Подтвердить что ты не робот

Mysql Неустранимая ошибка: не может выделить память для пула буферов

Привет всем, у меня есть этот журнал ошибок из 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
4b9b3361

Ответ 1

TL;DR;

Mysql не может перезагрузиться из-за нехватки памяти, убедитесь, что у вас настроен соответствующий файл подкачки.

Не помогло? Если это не ваша проблема, более квалифицированные вопросы для продолжения исследований:

Фон

У меня была именно эта проблема в самой первой системе, которую я установил на EC2, которая характеризуется тем местом, где размещается сайт wordpress, где иногда происходит "Ошибка установления соединения с базой данных".

Журналы показали ту же ошибку, что и OP. Мое чтение ошибки (удаленные временные метки):

  • Ошибка памяти: 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 и поиск выходных данных mysql:

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.

Решение

В моем случае основная проблема заключалась в том, что я пренебрег настройкой файла подкачки.

Вы можете проверить, есть ли у вас одна конфигурация, запустив 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, вам лучше добавить больше ОЗУ, поскольку доступ к жесткому диску (HDD) примерно на 10 м медленнее, чем доступ к ОЗУ, поэтому что-то, что потребуется 1 секунда, внезапно требуется более 15 минут! И еще более минуты на быстром твердотельном накопителе (SSD)...


Что касается других ответов здесь...

The InnoDB memory heap is disabled

Это действительно не ошибка, просто указание, что InnoDB использует системный распределитель внутренней памяти вместо своих собственных. По умолчанию да /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 не является ошибкой. Это просто означало, что FEDERATED engine не включен для вашего сервера mysql. Он не используется по умолчанию. Если вам это не нужно, не волнуйте это сообщение.

Смотрите: fooobar.com/questions/219537/...

Ответ 2

Решение НЕ больше места, проблема в веб-сервере Apache, а не в mysql, на самом деле вам нужно уменьшить размер пула innodb-buffer-pool

Этот буфер используется процессом mysql сразу же после запуска, поэтому, когда Apache нуждается в большем количестве ресурсов, ядро ​​очистит RAM от служб, это означает остановку mysql вместо сбоя сервера.

Также добавит CRON, чтобы проверить статус db и перезапустить его, если вы не хотите менять ngnx или httplight.