purge.sh 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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: | awk '{print $2}'`
  24. rb=`mysql -uroot -pXTZ@shop@951688 --host=$1 -e "show slave status\G; " | grep Slave_SQL_Running: | awk '{print $2}'`
  25. # shellcheck disable=SC2068
  26. for a in ${ra[@]}
  27. do
  28. if [[ $a != 'Yes' ]];then
  29. return 0
  30. fi
  31. done
  32. # shellcheck disable=SC2068
  33. for b in ${rb[@]}
  34. do
  35. if [[ $b != 'Yes' ]];then
  36. return 0
  37. fi
  38. done
  39. return 1
  40. }
  41. function slave_behind_match() {
  42. behinds=`mysql -uroot -pXTZ@shop@951688 --host=$host -e "show slave status\G; " | grep Seconds_Behind_Master: | awk '{print $2}'`
  43. # shellcheck disable=SC2068
  44. for ssecs in ${behinds[@]}
  45. do
  46. secs=`echo $ssecs | xargs`
  47. echo Seconds_Behind_Master=$secs
  48. echo cur_diff=$cur_diff
  49. diff=`expr $cur_diff - 3600`
  50. if [[ $secs -gt $diff || $secs -gt 1800 ]];then
  51. echo behind_master=$secs
  52. return 0
  53. fi
  54. done
  55. return 1
  56. }
  57. #ra=`mysql -uroot -pXTZ@shop@951688 --host=172.26.80.10 -e "show slave status\G; " | grep Slave_IO_Running: | awk '{print $2}'`
  58. #mysql -uroot -pXTZ@shop@951688 --host=172.26.80.8 -e "show slave status\G; " | grep Seconds_Behind_Master: | awk '{print $2}'
  59. #master = '172.26.80.10'
  60. slave_hosts=(${XYZ_SLAVE_HOSTS//:/ })
  61. #(172.26.80.8 172.26.80.6)
  62. # shellcheck disable=SC2068
  63. for host in ${slave_hosts[@]}
  64. do
  65. echo $host
  66. slave_running $host
  67. running=$?
  68. if [[ $running == 0 ]];then
  69. echo "slave ${host} has stoped"
  70. exit
  71. fi
  72. slave_behind_match $host
  73. behind_match=$?
  74. if [[ $behind_match == 0 ]];then
  75. echo "slave ${host} 延迟太大"
  76. exit
  77. fi
  78. echo $host can purge
  79. done
  80. today=$(date "+%Y-%m-%d")
  81. command="PURGE master LOGS BEFORE '${today} 00:00:00';"
  82. echo $command
  83. # shellcheck disable=SC2068
  84. for host in ${slave_hosts[@]}
  85. do
  86. echo $host:$command
  87. mysql -uroot -pXTZ@shop@951688 --host=$host -e "$command"
  88. done