MySQL (MariaDB) часто падает

9

Я недавно перенес старый сервер с MySQL на новый VPS с MariaDB 5.5. У меня не слишком много работы на сервере (всего несколько сайтов PHP), и свободная память вроде бы в порядке, но БД продолжает падать - иногда каждые несколько дней, а иногда в течение нескольких часов.

Я получаю следующие ошибки в журналах:

131231  1:43:04 [ERROR] mysqld: Out of memory (Needed 128917504 bytes)
131231  1:43:04 [ERROR] mysqld: Out of memory (Needed 96681984 bytes)
131231  1:43:04 [ERROR] mysqld: Out of memory (Needed 72499200 bytes)
131231  1:43:04 [ERROR] mysqld: Out of memory (Needed 54362112 bytes)
131231  1:43:04 InnoDB: The InnoDB memory heap is disabled
131231  1:43:04 InnoDB: Mutexes and rw_locks use GCC atomic builtins
131231  1:43:04 InnoDB: Compressed tables use zlib 1.2.3.4
131231  1:43:04 InnoDB: Using Linux native AIO
131231  1:43:04 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137756672 bytes) failed; errno 12
131231  1:43:04 InnoDB: Completed initialization of buffer pool
131231  1:43:04 InnoDB: Fatal error: cannot allocate memory for the buffer pool
131231  1:43:04 [ERROR] Plugin 'InnoDB' init function returned error.
131231  1:43:04 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
131231  1:43:04 [Note] Plugin 'FEEDBACK' is disabled.
131231  1:43:04 [ERROR] Unknown/unsupported storage engine: InnoDB
131231  1:43:04 [ERROR] Aborting

131231  1:43:04 [Note] /usr/sbin/mysqld: Shutdown complete

Я играл с настройками my.cnf для InnoDB Heap, которая, кажется, не помогает. Вот соответствующая часть:

innodb_buffer_pool_size = 128M
innodb_log_buffer_size  = 8M
innodb_file_per_table   = 1
innodb_open_files       = 400
innodb_io_capacity      = 400
innodb_flush_method     = O_DIRECT

Кажется, у меня «много» свободной оперативной памяти, и у меня также есть своп:

root@phoenix:~# free -m
             total       used       free     shared    buffers     cached
Mem:           994        923         71          0         19        417
-/+ buffers/cache:        486        508
Swap:         1023        131        892

Как я могу решить / устранить эту проблему? Я искал интервеб для подсказок, но ничего не помогло.

Мэтт Хаманн
источник
1
Как выглядит память прямо перед сбоем? В [ERROR] mysqld: Out of memoryуверен , что выглядит как сильный намек. Вы проверили системные журналы, чтобы убедиться, что ядро ​​(OOM) решило убить mysql?
Zoredache
Вы должны зарегистрировать используемые дескрипторы файлов и память, использованную как до, так и после сбоя (возможно, даже при сбросе topкоманды каждый интервал), чтобы знать, что может вызвать сбой. Какие-либо другие сервисы работают на ваших серверах, как mysql (mariadb)?
Эшвин Кумар
1
На DBA есть действительно хороший
Matt Hamann
Попробуйте performance_schema = off?

Ответы:

9

Я надеюсь, что это будет полезно для вас.

пытаться

performance_schema = off

в [mysqld]разделе вашей конфигурации.

https://mariadb.com/resources/blog/starting-mysql-on-low-memory-virtual-machines/

шэн чи
источник
Даем попробовать. Я вернусь вскоре после того, как я предоставлю сервису несколько дней, чтобы постоянно работать.
Мэтт Хаманн
Кажется, помогло совсем немного. Не уверен, что 100% решено, но все работает довольно хорошо, так как я настроил это. Спасибо.
Мэтт Хаманн