Advertisement
Guest User

Untitled

a guest
Aug 18th, 2016
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.37 KB | None | 0 0
  1. #!/bin/bash
  2. #
  3. # Determine if master and slave mysql servers are in sync
  4. # If not, report it via STDOUT and non-zero return code
  5. # If are in sync, exit successfully
  6. #
  7. # Paramters:
  8. # -v - verbose, show stats even if 100% synchronized
  9.  
  10. USER='YOUR_USER_NAME'
  11. PASS='YOUR_PASSWORD'
  12. MASTER_HOST='HOSTNAME_OR_IP'
  13. SLAVE_HOST='HOSTNAME_OR_IP'
  14.  
  15.  
  16. ### Get and parse mysql status variables ### if [ "$1" == "-v" ]; then
  17. echo "Connecting to Master ..."
  18. fi
  19. MASTER_STATUS=$(mysql -u$USER -p$PASS -h$MASTER_HOST -NE -e 'show master status;' | awk '(NR==2 || NR==3) {print $0}')
  20.  
  21. if [ "$1" == "-v" ]; then
  22. echo "Connecting to Slave ..."
  23. fi
  24. SLAVE_STATUS=$(mysql -u$USER -p$PASS -h$SLAVE_HOST -NE -e 'show slave status;' | awk '(NR==7 || NR==8 || NR==12 || NR==13 || NR==20 || NR==34) {print $0}')
  25.  
  26. master_file=$(echo $MASTER_STATUS | cut --delimiter=' ' -f 1) master_pos=$(echo $MASTER_STATUS | cut --delimiter=' ' -f 2)
  27.  
  28. slave_file=$(echo $SLAVE_STATUS | cut --delimiter=' ' -f 1) slave_pos=$(echo $SLAVE_STATUS | cut --delimiter=' ' -f 2) slave_running=$(echo $SLAVE_STATUS | cut --delimiter=' ' -f 3) slave_io=$(echo $SLAVE_STATUS | cut --delimiter=' ' -f 4) slave_error=$(echo $SLAVE_STATUS | cut --delimiter=' ' -f 5) slave_sec_behind=$(echo $SLAVE_STATUS | cut --delimiter=' ' -f 6)
  29.  
  30. if [ ! $master_file ]; then
  31. echo "Unable to connect to master"
  32. exit 1
  33. fi
  34. if [ ! $slave_file ]; then
  35. echo "Unable to connect to slave"
  36. exit 1
  37. fi
  38.  
  39. if [ $slave_error != 0 -o $slave_io != 'Yes' -o $slave_running != 'Yes' ]; then
  40. echo "SLAVE IS NOT RUNNING"
  41. echo "SLAVE STATUS: $slave_io | $slave_running | $slave_error"
  42. exit 1
  43. elif [ "$1" == "-v" ]; then
  44. echo "SLAVE STATUS: $slave_io | $slave_running | $slave_error"
  45. fi
  46.  
  47. ### Calculate percentage and fail if either filename or position differ ###
  48. if [ $master_file != $slave_file ]; then
  49. echo "Master and Slave are out of sync by bin-log file"
  50. echo "master: $master_file - $master_pos"
  51. echo " slave: $slave_file - $slave_pos"
  52. exit 1
  53. fi
  54.  
  55. let "sync_percent=($slave_pos / $master_pos) * 100"
  56.  
  57. if [ "$1" == "-v" -o $sync_percent != '100' ]; then
  58. echo "master: $master_file - $master_pos"
  59. echo " slave: $slave_file - $slave_pos"
  60. echo " sync: $sync_percent%"
  61. fi
  62.  
  63. if [ $slave_sec_behind -gt 0 ]; then
  64. echo " slave behind (sec): $slave_sec_behind"
  65. elif [ "$1" == "-v" ]; then
  66. echo " slave is tracking realtime"
  67. fi
  68.  
  69. if [ $sync_percent -gt 100 ]; then
  70. exit 1
  71. fi
  72.  
  73. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement