#!/bin/bash # 假设将sakila数据库名改为new_sakila # MyISAM直接更改数据库目录下的文件即可 source /etc/profile declare -i cur_diff=0 min_diff=3600 time_diff() { cur_sec=`date '+%s'` echo $cur_sec today=$(date "+%Y-%m-%d") today_time=`date -d "$today" +%s` echo $today_time cur_diff=`expr $cur_sec - $today_time` } time_diff echo $cur_diff,${min_diff} if [[ $cur_diff -gt ${min_diff} ]]; then echo 'can purge' else echo '请等到凌晨一点后删除' exit fi function slave_running() { ra=`mysql -uroot -pXTZ@shop@951688 --host=$1 -e "show slave status\G; " | grep Slave_IO_Running: | awk '{print $2}'` rb=`mysql -uroot -pXTZ@shop@951688 --host=$1 -e "show slave status\G; " | grep Slave_SQL_Running: | awk '{print $2}'` # shellcheck disable=SC2068 for a in ${ra[@]} do if [[ $a != 'Yes' ]];then return 0 fi done # shellcheck disable=SC2068 for b in ${rb[@]} do if [[ $b != 'Yes' ]];then return 0 fi done return 1 } function slave_behind_match() { behinds=`mysql -uroot -pXTZ@shop@951688 --host=$host -e "show slave status\G; " | grep Seconds_Behind_Master: | awk '{print $2}'` # shellcheck disable=SC2068 for ssecs in ${behinds[@]} do secs=`echo $ssecs | xargs` echo Seconds_Behind_Master=$secs echo cur_diff=$cur_diff diff=`expr $cur_diff - 3600` if [[ $secs -gt $diff || $secs -gt 1800 ]];then echo behind_master=$secs return 0 fi done return 1 } #ra=`mysql -uroot -pXTZ@shop@951688 --host=172.26.80.10 -e "show slave status\G; " | grep Slave_IO_Running: | awk '{print $2}'` #mysql -uroot -pXTZ@shop@951688 --host=172.26.80.8 -e "show slave status\G; " | grep Seconds_Behind_Master: | awk '{print $2}' #master = '172.26.80.10' slave_hosts=(${XYZ_SLAVE_HOSTS//:/ }) #(172.26.80.8 172.26.80.6) # shellcheck disable=SC2068 for host in ${slave_hosts[@]} do echo $host slave_running $host running=$? if [[ $running == 0 ]];then echo "slave ${host} has stoped" exit fi slave_behind_match $host behind_match=$? if [[ $behind_match == 0 ]];then echo "slave ${host} 延迟太大" exit fi echo $host can purge done today=$(date "+%Y-%m-%d") command="PURGE master LOGS BEFORE '${today} 00:00:00';" echo $command # shellcheck disable=SC2068 for host in ${slave_hosts[@]} do echo $host:$command mysql -uroot -pXTZ@shop@951688 --host=$host -e "$command" done