Проверьте, запущен ли удаленный MySQL.

Проверьте, запущен ли удаленный MySQL.

Мне нужен скрипт оболочки bash, который я могу запустить с помощью задания cron, чтобы проверить, запущен ли mysql на удаленном сервере. Если запущен, то ничего не делайте, а просто запустите сервер.

Задача cron будет проверять удаленный сервер на наличие работающего (или нет) mysql каждую минуту. Я могу написать задачу cron сам, но мне нужна помощь с shell-скриптом, который проверяет, работает ли удаленный mysql. Ответ после проверки работоспособности или неработоспособности не важен. Но проверка важна.

Спасибо.

решение1

Подключиться к mysqldиспользованиюmysqladmin

В документации MySQL говорится оmysqladmin ping

Проверьте, доступен ли сервер. Возвращаемый статус от mysqladmin — 0, если сервер запущен, 1, если нет. Это 0 даже в случае ошибки типа Access denied, поскольку это означает, что сервер запущен, но отклонил соединение, что отличается от состояния, когда сервер не запущен.

Сначала создайте пользователя без привилегий.

mysql> GRANT USAGE ON *.* TO ping@'%' IDENTIFIED BY 'ping';

Создайте такой сценарий

#!/bin/bash

MYSQL_USER=ping
MYSQL_PASS=ping
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
mysqladmin ping ${MYSQL_CONN} 2>/dev/null 1>/dev/null
MYSQLD_RUNNING=${?}
if [ ${MYSQLD_RUNNING} -eq 1 ]; then service mysql start ; fi

Поместите этот скрипт в crontab по своему усмотрению.

Убедитесь, что брандмауэр открыт на порту 3306, чтобы ping@'%' мог подключиться.

решение2

Проверить это очень просто:

mysql -e "select 1" || echo down

Вы можете заменить echo на команду ssh в root для запуска службы, но это кажется немного рискованным. Это может иметь последствия для безопасности. Это может быть ненадежно. Я бы предположил, что вам, вероятно, следует иметь какое-то надлежащее программное обеспечение кластера/отказа, чтобы сделать это. Есть MySQL MMM, который мы использовали некоторое время, но я понимаю, что он вышел из моды.

решение3

Предполагая, что у вас есть аутентификация sshkey для беспарольного входа пользователя root на удаленную машину, вы можете выполнить следующую команду:

ssh remotemysql "if [ 'ps -efww | grep mysql| grep -v grep' ]; then echo "сервер работает" ; else echo "сервер не работает"; fi"

замените echo "server is down" на скрипт запуска mysql. скажем /etc/init.d/mysqld start

решение4

Мне нужен скрипт оболочки bash, который можно запустить с помощью задания cron, чтобы проверить, работает ли MySQL на удаленном сервере.

Это наполняет меня тревогой. Я не могу себе представить, почему кто-то может подумать, что это хороший способ управления службой. Mysql поставляется со скриптами запуска, которые будут интегрироваться с systemd и sysvinit, которые являются стандартными способами запуска службы в системе Linux/Unix. Systemd имеет встроенную возможность перезапуска неисправной службы, но я никогда не видел конфигурации по умолчанию, использующей эту возможность по вполне очевидным причинам, и если бы была веская причина для этого, ее можно было бы вызвать с помощью respawn из inittab в системе sysV. Если это относится к запуску экземпляра СУБД для каждого пользователя (как это делает Kmail), то triggerring должен контролироваться сеансом пользователя, а не cron.

Но оставляя в стороне законность вопроса, использование mysql или mysqladmin для мониторинга состояния сервиса влечет за собой раскрытие учетных данных для подключения к базе данных, что не очень хорошая идея с точки зрения безопасности. Это также создает сложности с управлением ресурсами (когда вы достигаете максимального количества подключений, может показаться, что ваш сервис не работает)

Узнать, запущена ли служба, можно по:

  • наличие процесса mysqld в выводе 'ps' или в файловой системе /proc
  • прослушивающий сокет на соответствующем порту (который можно проверить с помощью netcat или обнаружить по выходным данным netstat)

Связанный контент