Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- ### VARIABLES ### \
- EMAIL="someone@email.com"
- SERVER=$(hostname)
- MYSQL='/usr/bin/mysql --user=user --password=pass'
- MYSQL_CHECK=$($MYSQL -e "SHOW VARIABLES LIKE '%version%';" || echo 1)
- STATUS_LINE=$($MYSQL -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 }')
- ERR_FLAG="/tmp/mysql_replication_err_flag.dat"
- ERRORS=()
- ### Run Some Checks ###
- ## Check if I can connect to Mysql ##
- if [ "$MYSQL_CHECK" == 1 ]
- then
- ERRORS=("${ERRORS[@]}" "Can't connect to MySQL (Check Pass)")
- fi
- ## Check For Last Error ##
- if [ "$LAST_ERRNO" != 0 ]
- then
- LAST_ERROR=$(mysql -e "SHOW SLAVE STATUS\G" | grep "Last_Error" | awk '{ print $2 }')
- ERRORS=("${ERRORS[@]}" "Error when processing relay log (Last_Errno = $LAST_ERRNO)")
- ERRORS=("${ERRORS[@]}" "(Last_Error = $LAST_ERROR)")
- fi
- ## Check if IO thread is running ##
- if [ "$IO_IS_RUNNING" != "Yes" ]
- then
- ERRORS=("${ERRORS[@]}" "I/O thread for reading the master's binary log is not running (Slave_IO_Running)")
- fi
- ## Check for SQL thread ##
- if [ "$SQL_IS_RUNNING" != "Yes" ]
- then
- ERRORS=("${ERRORS[@]}" "SQL thread for executing events in the relay log is not running (Slave_SQL_Running)")
- fi
- ## Check how slow the slave is ##
- if [ "$SECONDS_BEHIND_MASTER" == "NULL" ]
- then
- ERRORS=("${ERRORS[@]}" "The Slave is reporting 'NULL' (Seconds_Behind_Master)")
- elif [ "$SECONDS_BEHIND_MASTER" -gt 3600 ]
- then
- BEHINDHOURS=$(expr $SECONDS_BEHIND_MASTER / 3600)
- ERRORS=("${ERRORS[@]}" "The Slave is at least an hour behind the master (Seconds_Behind_Master = $SECONDS_BEHIND_MASTER [$BEHINDHOURS+ hours])")
- fi
- ### Send and Email if there is an error ###
- if [ "${#ERRORS[@]}" -gt 0 ]
- then
- if [ ! -f ${ERR_FLAG} ]
- then
- MESSAGE="An error has been detected on ${SERVER} involving the mysql replciation. Below is a list of the reported errors:\n\n
- $(for i in $(seq 0 ${#ERRORS[@]}) ; do echo "\t${ERRORS[$i]}\n" ; done)
- Please correct this ASAP\n\n
- Please remove ${ERR_FLAG} after settle this issue.
- "
- echo -e $MESSAGE | mail -s "[${SERVER}] Mysql Replication for $SERVER is reporting Error" ${EMAIL}
- touch $ERR_FLAG
- fi
- fi
Add Comment
Please, Sign In to add comment