Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Skrypt sprawdzania kondycji replikacji MySQL

Dzisiaj w tym artykule dowiemy się, jak monitorować replikację MySQL. Konfiguracja replikacji w Twoim środowisku to dzisiejszy wymóg, ale czy to wystarczy? Moja odpowiedź brzmi nie'. Od czasu do czasu musimy monitorować naszą replikację. Napisałem mały skrypt do monitorowania naszego środowiska, którym zamierzam się z Wami podzielić, aby uczynić Twoje życie tak łatwym, jak uczyniło moje.

Rzeczy, które należy monitorować po stronie urządzenia podrzędnego:

LAST_ERRNO
SECONDS_BEHIND_MASTER
IO_IS_RUNNING
SQL_IS_RUNNING
MASTER_LOG_FILE
RELAY_MASTER_LOG_FILE

Te wszystkie zmienne są częścią „pokaż status urządzenia podrzędnego”

Zapisz poniższy skrypt w pliku .sh i wykonaj jak poniżej:

./mysqlhealthcheck.sh

MYSQL_CHECK=$(./mysql-uUsername -ppassword -e "SHOW VARIABLES LIKE '%version%';" || echo 1)
#echo $MYSQL_CHECK
STATUS_LINE=$(./mysql-uUsername -ppassword -e "SHOW SLAVE STATUS\G")"1"
LAST_ERRNO=$(grep "Last_Errno" <<< "$STATUS_LINE" | awk '{ print $2 }')
SECONDS_BEHIND_MASTER=$( grep "Seconds_Behind_Master" <<< "$STATUS_LINE" | awk '{ print $2 }')
IO_IS_RUNNING=$( grep "Slave_IO_Running" <<< "$STATUS_LINE" | awk '{ print $2 }')
SQL_IS_RUNNING=$(grep "Slave_SQL_Running" <<< "$STATUS_LINE" | awk '{ print $2 }')
MASTER_LOG_FILE=$(grep " Master_Log_File" <<< "$STATUS_LINE" | awk '{ print $2 }')
RELAY_MASTER_LOG_FILE=$(grep "Relay_Master_Log_File" <<< "$STATUS_LINE" | awk '{ print $2 }')
ERRORS=()
MESSAGE="NO ERROR"
bold=$(tput bold)
normal=$(tput sgr0)
echo "${bold}MYSQL_CHECK : ${normal} $MYSQL_CHECK "
echo "${bold}LAST_ERRNO : ${normal} $LAST_ERRNO "
printf "\n"
echo "${bold}SECONDS_BEHIND_MASTER : ${normal} $SECONDS_BEHIND_MASTER"
printf "\n"
echo "${bold}IO_IS_RUNNING : ${normal} $IO_IS_RUNNING"
printf "\n"
echo "${bold}SQL_IS_RUNNING : ${normal} $SQL_IS_RUNNING"
printf "\n"
echo "${bold}MASTER_LOG_FILE : ${normal} $MASTER_LOG_FILE"
printf "\n"
echo "${bold}RELAY_MASTER_LOG_FILE : ${normal} $RELAY_MASTER_LOG_FILE"
printf "\n"
### if there is an error ###
if [ "${#ERRORS[@]}" -gt 0 ]
then
MESSAGE="An error has been detected involving the mysql replciation. Below is a list of the reported errors:\n\n
$(for i in $(seq 1 ${#ERRORS[@]}) ; do echo "\t${ERRORS[$i]}\n" ; done)
Please correct this ASAP
"
echo -e $MESSAGE 
else 
echo -e $MESSAGE
fi
WYJŚCIE:
MYSQL_CHECK : Variable_name Value
innodb_version 1.1.8
protocol_version 10
slave_type_conversions
version 5.5.19-enterprise-commercial-advanced-log
version_comment MySQL Enterprise Server - Advanced Edition (Commercial)
version_compile_machine i686
version_compile_os linux2.6 
LAST_ERRNO : 0
SECONDS_BEHIND_MASTER : 0
IO_IS_RUNNING : Yes
SQL_IS_RUNNING : Yes
MASTER_LOG_FILE : mysql-bin.000007
RELAY_MASTER_LOG_FILE : mysql-bin.000007
NO ERROR

możesz również dodać ten skrypt do swoich zadań cron i wysłać do siebie część „echo -e $ MESSAGE” pocztą elektroniczną.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę zabezpieczyć nazwę użytkownika i hasło MySQL przed dekompilacją?

  2. Dlaczego MySQL nie obsługuje precyzji w milisekundach/mikrosekundach?

  3. PostgreSQL vs MySQL, porównanie

  4. Zapytanie SQL wielu wartości w jednej komórce

  5. Jak usunąć domyślną wartość kolumny w MySQL?