У меня есть клиент, у которого есть веб-сервер, размещенный на Digital Ocean, и у него странная случайная проблема с базой данных MySQL ...
1-4 раза в месяц происходит сбой сервера базы данных и его необходимо перезагрузить вручную.
Мне не удалось выяснить причину этого случайного сбоя, поэтому в настоящее время мне приходится выполнять этот процесс каждый раз, когда это происходит:
ssh root@IP-HERE -l root
server-user-password
vservice mysql restart
Это перезагружает сервер MySQL, и все снова в порядке, пока через неделю или 3 это случайно не произойдет снова, а затем повторите процесс.
Поскольку у моего клиента нет опыта администрирования сервера и он даже не знает, что такое окно командной строки / терминала или как оно выглядит ... Мне нужно придумать какое-то решение, которое позволило бы любому, включая обезьяну, воспроизвести описанный выше процесс, когда я недоступен!
Некоторая информация:
С этой информацией можно было бы создать какой-то сценарий решения в 1 щелчок, где клиент мог бы щелкнуть и запустить сценарий / программу со своего Mac, который автоматически запускал бы процесс, описанный выше, для перезагрузки своего сервера MySQL, когда возникает эта чрезвычайная проблема для него, а меня нет рядом, чтобы помочь?
Вы когда-нибудь задумывались о мониторинге сервера MYSQL?
Может быть, Nagios слишком велик, но то, что со скриптом, cron или monit, тоже очень легкое.
Monit предоставляет очень простой базовый веб-интерфейс, в котором вы также можете перезапустить службы.
Я думаю, что проще всего было бы использовать контролировать. Это легкая утилита для мониторинга и управления демонами или аналогичными программами.
Установить monit
# aptitude install monit
Создать файл conf для mysql
# cat /etc/monit/conf.d/mysql
check process mysqld with pidfile /var/run/mysqld/mysqld.pid
group database
start program = "/etc/init.d/mysql start"
stop program = "/etc/init.d/mysql stop"
if failed host 127.0.0.1 port 3306 then restart
if 5 restarts within 5 cycles then timeout
Перезагрузить монитор
# service monit restart
Проверить статус mysql
# netstat -an | grep 3306
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
# service mysql status
mysql start/running, process 33446
Остановите сервер mysql (чтобы имитировать некоторые проблемы)
# service mysql stop
Проверить файл журнала мониторинга
[EEST Mar 30 12:34:10] info : 'ubuntu14' Monit started
[EEST Mar 30 12:36:10] error : 'mysqld' process is not running
[EEST Mar 30 12:36:10] info : 'mysqld' trying to restart
[EEST Mar 30 12:36:10] info : 'mysqld' start: /etc/init.d/mysql
[EEST Mar 30 12:38:12] info : 'mysqld' process is running with pid 34085
Через несколько минут он перезапускает сервер mysql.
Но это всего лишь обходной путь, поскольку @lain упомянул, что вы должны найти корень проблемы.
Сначала вам нужно (сгенерировать, если не existend и) передать свои ssh-ключи на сервер (для входа в систему без пароля):
ssh-copy-id root@IP-HERE
Войдите на сервер и настройте сценарий, например:
#!/bin/bash
service mysql restart
exit 0
Сделайте его исполняемым:
chmod +x script.sh
На вашем клиенте вы хотите вызвать скрипт через ssh. Упростите выполнение следующей команды ssh (используйте Утконос или Apple Automator и т. д. в качестве оболочки):
ssh root@IP-HERE -l root script.sh
Теперь вы можете передать своим клиентам интерактивный перезапуск сервера.
Кстати: вы должны решить проблему, а не создавать дрянной обходной путь перезагрузки. Уверяю вас, использование этого обходного пути перезагрузки вызовет больше головной боли, чем устранение проблемы. Как сказал Пибоди, вы должны посмотреть на munin или monit, чтобы обнаружить основную проблему.
Забудьте о ручном перезапуске, он слишком медленный и нужен вам или клиенту (иногда вы хотите уехать в отпуск, не так ли?). Просто настройте мониторинг и сделайте это автоматически. Zabbix
и Nagios
хороши для общего мониторинга, но могут быть слишком большими для одного сервера. Вы можете настроить monit
чтобы проверить ваш mysql и перезагрузить его автоматически и почти мгновенно.
Но вы устраняете симптом, а не причину, а это плохо. Вы должны найти настоящую причину сбоя mysql (включить более подробное ведение журнала, отслеживать другие показатели сервера) и исправить ее.