Сервер Ubuntu 12.04 - Сбой MySQL - Возможные проблемы InnoDB
Я искал решение, но, похоже, ничего не работает. У меня есть один сайт Drupal 6 на этом сервере.
Сервер:Ubuntu 12.04 Apache/2.2.22 (Ubuntu) 5.3.10-1ubuntu3.8 MySQL 5.5.32 Drupal 6
Вот ссылка на мои файлы ошибок Apache2 и MySQL и мой файл конфигурации для MySQL. Пожалуйста, посмотрите. https://drive.google.com/folderview?id=0By8qja37RfvzWUt1a0lGSzZqR3M&usp=sharing Эти файлы огромны, поэтому я ссылался на них, а не вставлял их сюда. Если мне нужно, я могу вставить сюда. Просто дай мне знать. Благодарю.
Я сделал много поиска. Я в основном пытаюсь погуглить сами ошибки, но не могу найти правильного решения. Я думаю, что сузил это до проблемы с innodb, но это так. Я проверяю таблицы в журнале ошибок и phpMyAdmin говорит, что они в порядке, и я все равно их чиню и все равно получаю сбой.
Когда мой сайт падает, я должен перезапустить Apache, а затем перезапустить MySQL, а затем сайт возвращается. Это терпело крах 2 - 6 раз в день.
Любая помощь будет принята с благодарностью. Благодарю.
1 ответ
Я чувствую себя достаточно уверенным, что в вашей установке MySQL нет ничего плохого, поэтому при восстановлении таблиц проблем не обнаружено. Это артефакты реальной проблемы:
Вам просто не хватает памяти на вашем компьютере, чтобы делать все, что вы пытаетесь сделать.
Из вашей конфигурации:
key_buffer = 384M
Между этим и значением по умолчанию для innodb_buffer_pool_size, равным 128 МБ, это 512 МБ, которые должны быть доступны все время, и если они не могут быть выделены при запуске или перезапуске MySQL, запуск не начнется.
131210 13:06:25 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
131210 13:06:25 InnoDB: Completed initialization of buffer pool
131210 13:06:25 InnoDB: Fatal error: cannot allocate memory for the buffer pool
131210 13:06:25 [ERROR] Plugin 'InnoDB' init function returned error.
Это не сбой MySQL - MySQL не запускается или не перезагружается - потому что нет 128 МБ свободной памяти, доступной для выделения.
Ошибка 12 "Недостаточно памяти" - системная память.
Все остальные сообщения в вашем журнале ошибок по сути являются побочными эффектами.
Я подозреваю, что также в вашем журнале вы увидите это:
YYMMDD HH:MM:SS mysqld_safe Number of processes running now: 0
Если этому сообщению об ошибке непосредственно не предшествует аварийный дамп ("MySQL перехватил сигнал xx", за которым следуют трассировка стека и много отладочной информации), то это, скорее всего, не MySQL сбой - это MySQL, убиваемый ядром, чтобы попытаться предотвратить сбой всей системы из-за кризисной ситуации, связанной с доступной памятью. Модель разветвления Apache печально известна этим - когда ваш сайт становится занятым, Apache порождает больше детей, у каждого из которых появляется аппетит к памяти.
Вы, вероятно, найдете доказательства этого в своих системных журналах.
Xxx xx xx:xx:xx [machine name] kernel: Out of memory: Killed process xxxx, UID xx, (mysqld).
Возможны следующие варианты: добавить больше памяти, уменьшить объем занимаемой памяти MySQL с помощью конфигурации, уменьшить количество дочерних процессов, которые Apache может порождать, или исключить другие процессы из системы, или разделить базу данных и веб-сервер на разных компьютерах, или добавить больше подкачки -- но подменяемая машина MySQL не будет работать оптимально.
По аналогичным сценариям смотрите также: