Your IP : 18.222.24.153
#!/bin/bash
# -- stop slave IO process
# -- wait when slave process reads all relay logs
# -- reset slave, reset master
# -- return master info
# Options:
# src = ip address or socket
# login|password or /root/.my.cnf
#set -x
DEFAULT_CONF=/root/.my.cnf # can set login and password from file
DEFAULT_CONF_USAGE=0
BASE_DIR=/opt/webdir
LOGDIR=$BASE_DIR/logs
[[ ! -d $LOGDIR ]] && mkdir -m 750 $LOGDIR
LOG_FILE=$LOGDIR/reset_slave.log
#CACHE_DIR=$BASE_DIR/tmp
#[[ ! -d $CACHE_DIR ]] && mkdir -p -m 700 $CACHE_DIR
#CACHE_FILE=(mktemp $CACHE_DIR/.reset_slaveXXXXXX)
save_log(){
message=$1
printf "%-15s: [%s] %s\n" "$(date +%Y/%m/%d:%H:%M:%S)" "$$" "$message" >> $LOG_FILE
}
print_good(){
local msg="${1}"
local changed="${2:-true}"
save_log "$msg"
echo "{\"changed\": $changed, \"msg\": \"$msg\"}"
# [[ -f $CACHE_FILE ]] && rm -f $CACHE_FILE
exit
}
print_error(){
local msg="${1}"
save_log "$msg"
echo "{\"changed\": false, \"failed\": true, \"msg\": \"$msg\"}"
# [[ -f $CACHE_FILE ]] && rm -f $CACHE_FILE
exit 1
}
# test mandatory option and print error if not exists
test_variables() {
for desc in "src=$src" "login=$login" "password=$password"; do
var=$(echo $desc | cut -d'=' -f1)
val=$(echo $desc | cut -d'=' -f2)
if [[ -z "$val" ]]; then
# test if login and password needed variables
if [[ ( "$var" == "login" ) || ( "$var" == "password" ) ]]; then
if [[ ! -f "$DEFAULT_CONF" ]]; then
print_error "option $var= is mandatory, you must define it or create $DEFAULT_CONF file"
fi
DEFAULT_CONF_USAGE=1
else
print_error "option $var= is mandatory, you must define it or create $DEFAULT_CONF file"
fi
fi
done
}
reset_slave(){
save_log "start process resetting slave"
if [[ $DEFAULT_CONF_USAGE -eq 1 ]]; then
src_mysql_cmd="mysql --defaults-file=$DEFAULT_CONF"
save_log " usage default config $DEFAULT_CONF"
else
src_mysql_cmd="mysql --user=$login --password=$password"
save_log " usage login and password"
fi
if [[ $(echo $src | grep -c '^/') -gt 0 ]]; then
src_mysql_cmd=$src_mysql_cmd" --socket=$src"
else
host=
port=3306
if [[ $(echo "$src" | grep -c ':') -gt 0 ]]; then
host=$(echo "$src" | awk -F':' '{print $1}')
port=$(echo "$src" | awk -F':' '{print $2}')
else
host=$src
fi
src_mysql_cmd=$src_mysql_cmd" --host=$host --port=$port"
fi
# show slave status
Slave_IO_Running=$($src_mysql_cmd -e "show slave status \G" | \
awk -F':' '/Slave_IO_Running:/{print $2}' | sed -e 's/^\s\+//;s/\s\+$//;')
Slave_SQL_Running=$($src_mysql_cmd -e "show slave status \G" | \
awk -F':' '/Slave_SQL_Running:/{print $2}' | sed -e 's/^\s\+//;s/\s\+$//;')
save_log " Slave_SQL_Running=$Slave_SQL_Running Slave_IO_Running=$Slave_IO_Running"
if [[ $Slave_SQL_Running != "Yes" ]]; then
print_error "Slave is not configured on mysql server=$src"
fi
# wait until slave is ready for master
Seconds_Behind_Master=1
while [[ $Seconds_Behind_Master -gt 0 ]]; do
sleep 5;
save_log " waiting Seconds_Behind_Master=$Seconds_Behind_Master"
Seconds_Behind_Master=$($src_mysql_cmd -e "show slave status \G" | \
awk -F':' '/Seconds_Behind_Master/{print $2}' | sed -e 's/^\s\+//;s/\s\+$//;')
done
# stop slave
$src_mysql_cmd -e "stop slave IO_THREAD;" 1>/dev/null 2>&1
[[ $? -gt 0 ]] && \
print_error "Slave stop is failed"
save_log " stop IP thread on server=$src"
# reset slave and master info
$src_mysql_cmd -e "stop slave; reset master;" 1>/dev/null 2>&1
[[ $? -gt 0 ]] && \
print_error "Slave stop is failed"
save_log "reset master status on server=$src"
print_good "deleting slave configuration on server=$src is complete"
}
# get options from file
source ${1}
test_variables
reset_slave