Я пытаюсь написать простой скрипт Bash для мониторинга состояния репликации MySQL.Сценарий выглядит следующим образом:
#!/bin/bash
dbhost=192.168.1.2
repluser=root
replpasswd=password
echo "show slave status\G"|\
mysql -h $dbhost -u $repluser -p$replpasswd > tmpd 2>/dev/null
repl_IO=$(cat tmpd | grep "Slave_IO_Running" | cut -f2 -d':')
repl_SQL=$(cat tmpd | grep "Slave_SQL_Running" | cut -f2 -d':')
if [ $repl_IO != "Yes" -o $repl_SQL != "Yes" ] ; then
echo
echo -e "\033[31m Replication Error."
echo -e "\033[0m"
mail -s "replication error" email@domain.com < tmpd
else
echo
echo -e "\033[32mReplication is working fine"
echo -e "\033[0m"
fi
Проблема в том, что сценарий работает только в том случае, если и главный, и подчиненный работают.Если мастер не работает, и я запускаю скрипт, он отображает сообщение об ошибке и отправляет электронное письмо.Если оба ведомых / ведомых работают, сценарий отображает «Репликация работает нормально», что нормально.Но когда я выключаю подчиненное устройство и запускаю скрипт, я получаю эту ошибку:
./monitor.bash: line 9: [: too many arguments
Replication is working fine
Я знаю, что проблема в том, что, поскольку я запрашиваю подчиненный сервер MySQL, он не находит его.Так что это не проверка условий Slave_IO_Running и Slave_SQL_Running.Как мне проверить, работает ли подчиненный сервер ДО запуска этих условий.Короче говоря, я хочу, чтобы «Репликация работала нормально» отображалась только в том случае, если ведущий и ведомый работают и работают, и это соответствует этим условиям.Любая помощь будет оценена.Спасибо.