MySQL может все еще ничего не регистрировать, потому что, вероятно, происходит то, что он бесцеремонно уничтожается системой из-за давления системной памяти от детей apache. След должен быть в / var / log / syslog.
MySQL должен попытаться перезапустить себя в случае сбоя или принудительного завершения, но, если недостаточно памяти, он не может этого сделать ... и этот второй сбой не рассматривается mysqld_safe как "сбой", а скорее как "отказ от начать ", поэтому он не будет продолжать пытаться. Неудачная попытка перезапуска часто неверно истолковывается администраторами как «сбой», поскольку природа исходного сбоя скрывается за легко пропускаемым сообщением в журнале ошибок MySQL:
mysqld_safe Number of processes running now: 0
См. InnoDB Crash Post Mortem для обстоятельств, которые, как я подозреваю, похожи на ваши.
Казалось бы, простой ответ на вопрос «почему» заключается в том, что между Apache и MySQL, имеющейся у вас нагрузкой и вашими текущими конфигурациями у вас недостаточно памяти на машине, и есть некоторая переломная точка, связанная с нагрузкой трафика, которая выводит это условие ,
Apache обслуживает каждый параллельный запрос браузера от дочернего процесса, поэтому с увеличением числа одновременных подключений количество дочерних объектов будет увеличиваться. Сначала вам нужно будет ограничить это значение в конфигурации Apache, чтобы вы могли понять, что на самом деле вызывает увеличение числа одновременных подключений ... Это просто тяжелый, но допустимый всплеск трафика? Какой-то отказ в обслуживании? Запросы к БД, которые задерживают запросы, потому что они выполняются слишком долго? Что-то нуждается в оптимизации?
http://httpd.apache.org/docs/2.2/mod/mpm_common.html#maxclients
Ограничение одновременных процессов Apache должно помочь предотвратить это, но, для ясности, наивно думать, что это полное решение, поэтому я не хочу это подразумевать. Как только процессы ограничены разумным или хотя бы более безопасным уровнем, вы можете приступить к определению того, что на самом деле происходит. (В Apache есть и другие средства контроля за ограничениями, но это не моя область знаний.)
«Лучшая практика» - это, конечно, запускать базу данных на другом оборудовании, чтобы приложение не могло ее уничтожить. Хотя на первый взгляд кажется более эффективным «максимизировать использование» одной машины, разделяя ее, это ложная экономия. Большая часть памяти, используемой MySQL, в типичной рабочей нагрузке выделяется во время запуска и удерживается до тех пор, пока работает MySQL Server. Требования к процессору, вероятно, будут разделять пиковое время для MySQL и Apache, так как они в конечном итоге обслуживают одинаковую нагрузку. На самом деле, вам может быть лучше использовать две машины m1.large вместо одной m1.xlarge, и стоимость будет такой же, поскольку меньшая - ровно половина стоимости большей ... даже если вы уже заплатили заранее для дополнительной скидки это изменение может быть выполнено .
dmesg
поможет?