purge.sh 1.9 KB

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