Skip to content

Instantly share code, notes, and snippets.

@zastari
Last active June 2, 2021 09:49
Show Gist options
  • Save zastari/5a6d3077f24ab9e20a1f to your computer and use it in GitHub Desktop.
Save zastari/5a6d3077f24ab9e20a1f to your computer and use it in GitHub Desktop.
#!/bin/bash
# Estimate time to slave replication recovery using an accumulated average
time_interval=60
samples=0
delay_moving_average=0
delay="$(mysql -e 'SHOW SLAVE STATUS\G' | awk '/Seconds_Behind_Master:/ {print $2}')"
echo "Initial replication delay: ${delay} seconds. Polling recovery rate every ${time_interval} seconds."
while [[ ${delay} > 0 ]]; do
sleep ${time_interval}
let "samples++"
delay_old="${delay}"
delay="$(mysql -e 'SHOW SLAVE STATUS\G' | awk '/Seconds_Behind_Master:/ {print $2}')"
delay_moving_average=$(awk "BEGIN {print (${delay_old} - ${delay}) * 1/${samples} + ${delay_moving_average} * (${samples} - 1)/${samples}}")
delay_rate=$(awk "BEGIN {printf ${delay_moving_average} / ${time_interval}}")
echo "Replication delayed by ${delay} seconds. Recovering at a rate of ${delay_rate} seconds per second. ETA: $(awk "BEGIN {print ${delay} / ${delay_rate}}") seconds."
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment