ошибка сценария проверки репликации

Я пытаюсь создать сценарий проверки репликации базы данных, который проверяет репликацию мастер-мастер, но при выполнении я получаю ошибку.

Вот сценарий

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export PATH

#Server Name
Server="Test Server"

#My Sql Username and Password
User=username
Password="password"

#Maximum Slave Time Delay
Delay="60"

#File Path to store error and email the same
Log_File=/tmp/replicationcheck.txt

#Email Settings
Subject="$Server Replication Error"
Sender_Name=TestServer
Recipients="tarun@example.com"

#Mail Alert Function
mailalert(){
sendmail -F $Sender_Name -it <<END_MESSAGE
To: $Recipients
Subject: $Subject

$Message_Replication_Error

`/bin/cat $Log_File`

END_MESSAGE
}

#Show Slave Status (Line I have edited later.)
Show_Slave_Status=$(echo "show slave status \G;" | mysql -u $User -p$Password) 

#Getting list of queries in mysql
$Show_Slave_Status | grep "Last_" > $Log_File

#Check if slave running
$Show_Slave_Status | grep "Slave_IO_Running: No"
if [ "$?" -eq "0" ]; then
Message_Replication_Error="$Server Replication error please check. The Slave_IO_Running state is No."
mailalert
exit 1
else
    $Show_Slave_Status | grep "Slave_IO_Running: Connecting"
    if [ "$?" -eq "0" ]; then
    Message_Replication_Error="$Server Replication error please check. The Slave_IO_Running state is Connecting."
    mailalert
    exit 1
    fi
fi

#Check if replication delayed
Seconds_Behind_Master=$Show_Slave_Status | grep "Seconds_Behind_Master" | awk -F": " {' print $2 '}
if [ "$Seconds_Behind_Master" -ge "$Delay" ]; then
Message_Replication_Error="Replication Delayed by $Seconds_Behind_Master."
mailalert
else
    if [ "$Seconds_Behind_Master" = "NULL" ]; then
    Message_Replication_Error="$Server Replication error please check. The Seconds_Behind_Master state is NULL."
    mailalert
    fi
fi

Это сообщение об ошибке, которое я получаю.

tarun@devenv:~/Desktop$ sh databasereplicationcheck.sh 
databasereplicationcheck.sh: 40: databasereplicationcheck.sh: 60: not found
databasereplicationcheck.sh: 43: databasereplicationcheck.sh: 60: not found
databasereplicationcheck.sh: 49: databasereplicationcheck.sh: 60: not found
databasereplicationcheck.sh: 59: [: Illegal number: 

Пожалуйста, помогите.

0
задан 14.05.2020, 07:50

1 ответ

Код echo "show slave status \G;" | mysql -u $User -p$Password 2>& в строке 37 возвращает ошибку, и мы не видим эту ошибку, поэтому вы должны напечатать переменную $Show_Slave_Status в случае сбоя:

#Show Slave Status
Show_Slave_Status=`echo "show slave status \G;" | mysql -u $User -p$Password 2>&1`
status=$?
if [ $status -ne 0 ]; then
  echo $Show_Slave_Status
  exit $status
fi

И затем запустите скрипт снова. Теперь он должен вывести вам сообщение об ошибке команды mysql и выйти.

И добавить к строкам 40, 43 и 49 echo перед $Show_Slave_Status variable:

Строка 40: echo $Show_Slave_Status | grep "Last_" > $Log_File

Строка 43: echo $Show_Slave_Status | grep "Slave_IO_Running: No"

Строка 49: echo $Show_Slave_Status | grep "Slave_IO_Running: Connecting"

0
ответ дан 14.05.2020, 07:51
  • 1
    Да я знаю, но эта команда сталкивается с ошибкой. И Вы никогда не печатаете переменную, таким образом, мы никогда не видим ошибки узнать what' s неправильно. Вы можете также тип echo "show slave status \G;" | mysql -u $User -p$Password 2>&1 вручную в терминале для получения ошибки. Но в этом случае необходимо установить 2 переменных $User и $Password сначала. – MrSebo 14.05.2020, 07:51
  • 2
    какой I' m пытающийся сделать вот I' m сообщение его выполнить команду show slave status \G; и взять ее вывод в переменной, названной Show_Slave_Status так, чтобы я мог использовать эту переменную для дальнейшей регистрации mysql так, чтобы я не выполнялся эти show slave status \G; команда снова и снова. Какая-либо справка? – Mohamed Sayed 14.05.2020, 07:52
  • 3
    Гм, извините, теперь я вижу ошибку... Добавьте к строкам 40, 43 и 49 echo перед $Show_Slave_Status переменная: Строка 40: echo $Show_Slave_Status | grep "Last_" > $Log_File Строка 43: echo $Show_Slave_Status | grep "Slave_IO_Running: No" и Строка 49: echo $Show_Slave_Status | grep "Slave_IO_Running: Connecting" – Bahar Kalkan 14.05.2020, 07:52
  • 4
    Я попробовал Ваш код, но тем не менее ту же ошибку. Теперь, я также отредактировал его как Show_Slave_Status=$(echo "show slave status \G;" | mysql -u $User -p$Password), и вывод хранится успешно. Но я don' t знают, как продолжить двигаться теперь. Я отредактировал в вопросе также. – kaqqao 14.05.2020, 07:52

Теги

Похожие вопросы