purge.sh 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #!/bin/bash
  2. # 假设将sakila数据库名改为new_sakila
  3. # MyISAM直接更改数据库目录下的文件即可
  4. source /etc/profile
  5. declare -i cur_diff=0 min_diff=3600
  6. time_diff() {
  7. cur_sec=`date '+%s'`
  8. echo $cur_sec
  9. today=$(date "+%Y-%m-%d")
  10. today_time=`date -d "$today" +%s`
  11. echo $today_time
  12. cur_diff=`expr $cur_sec - $today_time`
  13. }
  14. time_diff
  15. echo $cur_diff,${min_diff}
  16. if [[ $cur_diff -gt ${min_diff} ]]; then
  17. echo 'can purge'
  18. else
  19. echo '请等到凌晨一点后删除'
  20. exit
  21. fi
  22. function slave_running() {
  23. ra=`mysql -uroot -pXTZ@shop@951688 --host=$1 -e "show slave status\G; " | grep Slave_IO_Running:`
  24. rb=`mysql -uroot -pXTZ@shop@951688 --host=$1 -e "show slave status\G; " | grep Slave_SQL_Running:`
  25. a=${ra#*:}
  26. b=${rb#*:}
  27. a=`echo $a | xargs`
  28. b=`echo $b | xargs`
  29. if [[ $a == 'Yes' && $b == 'Yes' ]];then
  30. return 1
  31. else
  32. echo a,b
  33. return 0
  34. fi
  35. }
  36. function slave_behind_match() {
  37. r=`mysql -uroot -pXTZ@shop@951688 --host=$host -e "show slave status\G; " | grep Seconds_Behind_Master:`
  38. ssecs=${r#*:}
  39. secs=`echo $ssecs | xargs`
  40. echo Seconds_Behind_Master = $secs
  41. diff=`expr $cur_diff - 3600`
  42. if [[ $secs < $diff ]];then
  43. return 1
  44. else
  45. return 0
  46. fi
  47. }
  48. #master = '172.26.80.10'
  49. slave_hosts=(${XYZ_SLAVE_HOSTS//:/ })
  50. #(172.26.80.8 172.26.80.6)
  51. allhosts=(${XYZ_ALL_HOSTS//:/ })
  52. #(172.26.80.10 172.26.80.8 172.26.80.6)
  53. # shellcheck disable=SC2068
  54. for host in ${slave_hosts[@]}
  55. do
  56. echo $host
  57. slave_running $host
  58. running=$?
  59. if [[ $running == 0 ]];then
  60. echo "slave ${host} has stoped"
  61. exit
  62. fi
  63. slave_behind_match $host
  64. behind_match=$?
  65. if [[ $behind_match == 0 ]];then
  66. echo "slave ${host} 延迟太大"
  67. exit
  68. fi
  69. echo $host can purge
  70. done
  71. today=$(date "+%Y-%m-%d")
  72. command="PURGE master LOGS BEFORE '${today} 00:00:00';"
  73. # shellcheck disable=SC2068
  74. for host in ${allhosts[@]}
  75. do
  76. mysql -uroot -pXTZ@shop@951688 --host=$host -e "$command"
  77. done