purge.sh 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. return 0
  32. fi
  33. }
  34. function slave_behind_match() {
  35. r=`mysql -uroot -pXTZ@shop@951688 --host=$host -e "show slave status\G; " | grep Seconds_Behind_Master:`
  36. ssecs=${r#*:}
  37. secs=`echo $ssecs | xargs`
  38. diff=`expr $cur_diff - 3600`
  39. if [[ $secs < diff ]];then
  40. return 1
  41. else
  42. return 0
  43. fi
  44. }
  45. #master = '172.26.80.10'
  46. slave_hosts=(172.26.80.8 172.26.80.6)
  47. allhosts=(172.26.80.10 172.26.80.8 172.26.80.6)
  48. # shellcheck disable=SC2068
  49. for host in ${slave_hosts[@]}
  50. do
  51. echo $host
  52. slave_running $host
  53. running=$?
  54. if [[ $running == 0 ]];then
  55. exit
  56. fi
  57. slave_behind_match $host
  58. behind_match=$?
  59. if [[ $behind_match == 0 ]];then
  60. exit
  61. fi
  62. echo $host can purge
  63. done
  64. today=$(date "+%Y-%m-%d")
  65. # shellcheck disable=SC2068
  66. for host in ${allhosts[@]}
  67. do
  68. mysql -uroot -pXTZ@shop@951688 --host=$host -e "PURGE master LOGS BEFORE '$today 00:00:00'; "
  69. done
  70. #mysql -uroot -pXTZ@shop@951688 --host=172.26.80.8 -e "show slave status\G; " | grep Seconds_Behind_Master:
  71. #mysql -uroot -pXTZ@shop@951688 --host=172.26.80.10 -e "PURGE master LOGS BEFORE '2022-03-03 02:00:00';"
  72. #mysql -uroot -pXTZ@shop@951688 --host=172.26.80.10 -e "show master logs;"