Днес в тази статия ще добием представа как да наблюдаваме репликацията на MySQL. Днешното изискване е да настроите репликацията във вашата среда, но достатъчно ли е? Моят отговор е „НЕ“. Трябва да наблюдаваме репликацията си от време на време. Написах малък скрипт за наблюдение на нашата среда, който ще споделя с вас, за да направя живота ви толкова лесен, колкото направи моя.
Неща, които трябва да наблюдавате от вашата подчинена страна:
LAST_ERRNO
SECONDS_BEHIND_MASTER
IO_IS_RUNNING
SQL_IS_RUNNING
MASTER_LOG_FILE
RELAY_MASTER_LOG_FILE
Всички тези променливи са част от „покажи статус на подчинен“
Запазете скрипта по-долу в .sh файл и изпълнете както следва:
./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
ИЗХОД:
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
можете също да добавите този скрипт към вашите cron работни места и да изпратите частта „echo -e $MESSAGE“ до себе си по имейл.