morontt.info

Linux → Запуск MySQL-сервера после падений

Так уж вышло, что на одном из подконтрольных мне серверов, то ли от нехватки памяти, то ли от всплесков нагрузки, то ли от того и другого сразу, регулярно падает сервер БД MySQL. Где-то раз в неделю или две. Особенно нехорошо, когда владелец сайтов, размещённых на этом сервере, звонит в связи с этим рано утром или ночью, так что доктор прописал процесс подъема БД автоматизировать.

Первое решение нарисовалось при переписке с известным крутокодером. И имя этого решения monit, однако картина с ним принципиально не поменялась, периодические падения не закончились. Может быть чего-то в доках не дочитал, может руками кривыми конфиги редактировал, но не срослось. Причём в тестовых остановках мускула монит отрабатывал отлично, а в реальности, видимо, не всегда.

Недолго думая, было принято решение написать простой bash-скрипт и дёргать его кроном каждую минуту. Вот такой, собственно:

#!/bin/bash

LOG=/var/log/mysql_restarter.log
MYSQL_STATUS="$(sudo /usr/sbin/service mysql status | grep running)"

if [ -z "$MYSQL_STATUS" ]
then
    echo "$(date -R) :(" >> $LOG
    sudo /usr/sbin/service mysql start
fi

После чего необходимо сделать файл со скриптом доступным на запуск и записать его выполнение в crontab от рута.

chmod a+x /path/to/mysql_restarter

sudo crontab -e

# и добавить такую строку

* * * * * /path/to/mysql_restarter

И готово (ну и сервис cron тоже нужно будет перезапустить).

g-plus-icon
Теги: mysql linux cron bash
comments powered by Disqus
Учтите, что комментарии добавляются только при включённом JavaScript в браузере. В ином случае информация хоть и не пропадёт бесследно, но будет отправлена в спам и вряд ли хоть кто-нибудь её увидит.
Поля, помеченные asterisk, обязательны для заполнения.
Адрес электронной почты нигде не отображается, необходим только для обратной связи.
Веб-сайт вводите в формате http://example.org, при желании, конечно.