Устранение повторяющегося рестарта mysqld в Kloxo

Заказчик пожаловался на то что периодически сервер, на котором висит несколько сайтов, вместо отдачи контента выдает ошибку database connection error.
Проверка mysql с помощью mysqlcheck показала отсутствие ошибок в базе.
После включения и анализа логов стало ясно что рестарт происходит из-за регулярного перезапуска демона mysql. В момент совпадения перезапуска и обращения клиента, выдавалась ошибка. Причиной оказалось то что программа Watchdog, входящая в состав панели Kloxo, каждые 5 минут проверяла наличие процесса mysql, слушающего 127.0.0.1:3306, и в случае его отсутствия, перезапускавшая mysqld. В настройках mysql сервера, для того чтобы разработчики могли периодически коннектится к mysql удаленно, был установлен параметр
bind-address = aaa.bbb.ccc.ddd ( внешний ip адрес сервера ).
Решить проблему можно было несколькими способами:
1. bind-address = 127.0.0.1
В этом случае удаленные соединения установить не удастся.
2. Отключить в настройках Kloxo проверку работоспособности mysqld. Этот вариант требует организации альтернативной проверки работоспособности mysqld и перезапуска в случае необходимости.
3. Изменение конфигурации Watchdog так, чтобы не перезапускать mysqld с текущими настройками.
4.... ?
Поскольку Watchdog встроен в Kloxo и имеет только опции включения\отключения слежения за определенными демонами, и требуется возможность внешних коннектов к mysql, то был выбран 2-й вариант.
Для слежения за mysqld и перезапуском его в случае необходимости был написан простенький скрипт.
В cron была добавлена запись

*/5 * * * * /root/scripts/mysql_check_restart.sh

содержимое mysql_check_restart.sh

#! /bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin
        netstat -atpn | grep aaa.bbb.ccc.ddd:3306 > /dev/null;
        if [ $? -eq 0 ]
            then
            netstat -apn | grep /var/lib/mysql/mysql.sock > /dev/null;
            if [ $? -eq 0 ]
               then
               exit;
               else
               /etc/init.d/mysqld stop > /var/log/mysql/mysqld-err.log;
               /etc/init.d/mysqld start > /var/log/mysql/mysqld-err.log;
               fi
            else
            /etc/init.d/mysqld stop > /var/log/mysql/mysqld-err.log;
            /etc/init.d/mysqld start > /var/log/mysql/mysqld-err.log;
        fi

Отправить комментарий

CAPTCHA
Чтобы убедиться в том что Вы не робот, ответьте, пожалуйста, на вопрос
Fill in the blank