Guest User

Untitled

a guest
Jul 18th, 2018
601
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.58 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. ### VARIABLES ### \
  4. EMAIL="someone@email.com"
  5. SERVER=$(hostname)
  6. MYSQL='/usr/bin/mysql --user=user --password=pass'
  7. MYSQL_CHECK=$($MYSQL -e "SHOW VARIABLES LIKE '%version%';" || echo 1)
  8. STATUS_LINE=$($MYSQL -e "SHOW SLAVE STATUS\G")"1"
  9. LAST_ERRNO=$(grep "Last_Errno" <<< "$STATUS_LINE" | awk '{ print $2 }')
  10. SECONDS_BEHIND_MASTER=$( grep "Seconds_Behind_Master" <<< "$STATUS_LINE" | awk '{ print $2 }')
  11. IO_IS_RUNNING=$( grep "Slave_IO_Running" <<< "$STATUS_LINE" | awk '{ print $2 }')
  12. SQL_IS_RUNNING=$(grep "Slave_SQL_Running" <<< "$STATUS_LINE" | awk '{ print $2 }')
  13. MASTER_LOG_FILE=$(grep " Master_Log_File" <<< "$STATUS_LINE" | awk '{ print $2 }')
  14. RELAY_MASTER_LOG_FILE=$(grep "Relay_Master_Log_File" <<< "$STATUS_LINE" | awk '{ print $2 }')
  15.  
  16. ERR_FLAG="/tmp/mysql_replication_err_flag.dat"
  17. ERRORS=()
  18.  
  19. ### Run Some Checks ###
  20.  
  21. ## Check if I can connect to Mysql ##
  22. if [ "$MYSQL_CHECK" == 1 ]
  23. then
  24. ERRORS=("${ERRORS[@]}" "Can't connect to MySQL (Check Pass)")
  25. fi
  26.  
  27. ## Check For Last Error ##
  28. if [ "$LAST_ERRNO" != 0 ]
  29. then
  30. LAST_ERROR=$(mysql -e "SHOW SLAVE STATUS\G" | grep "Last_Error" | awk '{ print $2 }')
  31. ERRORS=("${ERRORS[@]}" "Error when processing relay log (Last_Errno = $LAST_ERRNO)")
  32. ERRORS=("${ERRORS[@]}" "(Last_Error = $LAST_ERROR)")
  33. fi
  34.  
  35. ## Check if IO thread is running ##
  36. if [ "$IO_IS_RUNNING" != "Yes" ]
  37. then
  38. ERRORS=("${ERRORS[@]}" "I/O thread for reading the master's binary log is not running (Slave_IO_Running)")
  39. fi
  40.  
  41. ## Check for SQL thread ##
  42. if [ "$SQL_IS_RUNNING" != "Yes" ]
  43. then
  44. ERRORS=("${ERRORS[@]}" "SQL thread for executing events in the relay log is not running (Slave_SQL_Running)")
  45. fi
  46.  
  47. ## Check how slow the slave is ##
  48. if [ "$SECONDS_BEHIND_MASTER" == "NULL" ]
  49. then
  50. ERRORS=("${ERRORS[@]}" "The Slave is reporting 'NULL' (Seconds_Behind_Master)")
  51. elif [ "$SECONDS_BEHIND_MASTER" -gt 3600 ]
  52. then
  53. BEHINDHOURS=$(expr $SECONDS_BEHIND_MASTER / 3600)
  54. ERRORS=("${ERRORS[@]}" "The Slave is at least an hour behind the master (Seconds_Behind_Master = $SECONDS_BEHIND_MASTER [$BEHINDHOURS+ hours])")
  55. fi
  56.  
  57. ### Send and Email if there is an error ###
  58. if [ "${#ERRORS[@]}" -gt 0 ]
  59. then
  60.  
  61. if [ ! -f ${ERR_FLAG} ]
  62. then
  63. MESSAGE="An error has been detected on ${SERVER} involving the mysql replciation. Below is a list of the reported errors:\n\n
  64. $(for i in $(seq 0 ${#ERRORS[@]}) ; do echo "\t${ERRORS[$i]}\n" ; done)
  65. Please correct this ASAP\n\n
  66. Please remove ${ERR_FLAG} after settle this issue.
  67. "
  68. echo -e $MESSAGE | mail -s "[${SERVER}] Mysql Replication for $SERVER is reporting Error" ${EMAIL}
  69. touch $ERR_FLAG
  70. fi
  71. fi
Add Comment
Please, Sign In to add comment