linux:adminsys:check_replication_mysql
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
linux:adminsys:check_replication_mysql [10/12/2009 07:03] – chgt ' en ’ pour que la colorisation marche mieux ! daniel | linux:adminsys:check_replication_mysql [11/02/2010 14:28] (Version actuelle) – apostrophes virées dans commentaires daniel | ||
---|---|---|---|
Ligne 2: | Ligne 2: | ||
Ce script vérifie les positions master et slave de deux noeuds mysql en réplication maitre-maitre. | Ce script vérifie les positions master et slave de deux noeuds mysql en réplication maitre-maitre. | ||
<code bash> | <code bash> | ||
- | #!/bin/bash | ||
- | |||
# Ce script loggue les positions sur le master local, le master distant et le slave | # Ce script loggue les positions sur le master local, le master distant et le slave | ||
# Avec en colonnes | # Avec en colonnes | ||
# 1 timestamp | # 1 timestamp | ||
- | # 2 master_log_on_remote_master | + | # 2 remote_master_master_log_file |
- | # 3 master_log-pos_on_remote_master | + | # 3 remote_master_master_log_pos |
- | # 4 master_log_on_local_slave | + | # 4 local_slave_master_log_file |
- | # 5 master_log-pos_on_local_slave | + | # 5 local_slave_master_log_pos |
- | # 6 master_log_on_local_master | + | # 6 local_master_master_log_file |
- | # 7 master_log-pos_on_local_master | + | # 7 local_master_master_log_pos |
- | # 8 master_log_on_remote_slave | + | # 8 remote_slave_master_log_file |
- | # 9 master_log-pos_on_remote_slave | + | # 9 remote_slave_master_log_pos |
# 10 date en plus clair | # 10 date en plus clair | ||
+ | # 11 local_delay | ||
+ | # 12 remote_delay | ||
+ | # le user mysql qui réplique doit avoir les droits REPLICATION CLIENT, REPLICATION SLAVE et PROCESS | ||
+ | |||
LOG=/ | LOG=/ | ||
ERRLOG=/ | ERRLOG=/ | ||
+ | LOCK=/ | ||
TMP=/ | TMP=/ | ||
- | DEST=' | + | DEBUG=0 |
# On regarde si on est sql1 ou sql2, à adapter suivant vos hostnames | # On regarde si on est sql1 ou sql2, à adapter suivant vos hostnames | ||
Ligne 34: | Ligne 37: | ||
user=$(sed -ne ' | user=$(sed -ne ' | ||
pass=$(sed -ne ' | pass=$(sed -ne ' | ||
- | # marche pas si le $user n’a que les droits de réplication slave, il faut client | + | |
- | remote_master=$(/ | + | init_vars() { |
- | # sinon on passe par ssh, mais root doit avoir une clé | + | |
- | # | + | # (sinon passer par ssh mais celui qui lance ce script doit avoir une clé pour lire / |
- | local_master=$(/ | + | |
- | local_slave=$(/ | + | # on rapproche le plus possible les mesures master/ |
- | # idem | + | remote_master_status=$(/ |
- | remote_slave=$(/usr/bin/mysql -u$user -p$pass -h$remote_host | + | |
- | # | + | |
+ | | ||
+ | |||
+ | # et on extrait les valeurs qui nous intéressent | ||
+ | remote_master_master_log_file=$(echo -e " | ||
+ | remote_master_master_log_file_index=$(expr " | ||
+ | remote_master_master_log_pos=$(echo -e " | ||
+ | local_slave_master_log_file=$(echo -e "$local_slave_status"|awk '/ Master_Log_File/ | ||
+ | | ||
+ | | ||
+ | local_slave_delay=$(echo -e "$local_slave_status" | ||
+ | local_slave_error=$(echo | ||
+ | |||
+ | local_master_master_log_file=$(echo -e " | ||
+ | local_master_master_log_file_index=$(expr " | ||
+ | local_master_master_log_pos=$(echo -e " | ||
+ | remote_slave_master_log_file=$(echo -e "$remote_slave_status"|awk '/ Master_Log_File/ | ||
+ | | ||
+ | remote_slave_master_log_pos=$(echo -e " | ||
+ | remote_slave_delay=$(echo | ||
+ | remote_slave_error=$(echo -e "$remote_slave_status"|awk '/ | ||
+ | } | ||
if [ $DEBUG -gt 0 ]; then | if [ $DEBUG -gt 0 ]; then | ||
- | echo " | + | |
- | echo "local_master | + | |
- | echo "local_slave | + | echo -e " |
- | echo "remote_slave | + | echo -e "remote_master_master_log_pos\t$remote_master_master_log_pos" |
+ | echo -e "local_slave_master_log_file\t$local_slave_master_log_file" | ||
+ | echo -e "local_slave_master_log_pos\t$local_slave_master_log_pos" | ||
+ | echo " | ||
+ | echo " | ||
+ | echo -e " | ||
+ | echo -e " | ||
+ | echo -e " | ||
+ | echo -e " | ||
+ | echo -e " | ||
+ | echo " | ||
+ | echo " | ||
echo "Fin debug, on sort" | echo "Fin debug, on sort" | ||
exit | exit | ||
fi | fi | ||
- | echo "$TS $remote_master | + | init_vars |
- | + | echo "$TS $remote_master_master_log_file | |
- | # check index du fichier de log | + | |
- | remote_master_log_index=$(expr "$remote_master" | + | |
- | local_slave_log_index=$(expr "$local_slave" | + | |
- | local_master_log_index=$(expr "$local_master" | + | |
- | remote_slave_log_index=$(expr " | + | |
- | # check positions | + | |
- | remote_master_log_pos=$(expr " | + | |
- | local_slave_log_pos=$(expr " | + | |
- | local_master_log_pos=$(expr " | + | |
- | remote_slave_log_pos=$(expr " | + | |
- | + | ||
>$TMP | >$TMP | ||
- | if [ -z "$remote_master_log_index" -o -z "$remote_master_log_pos" ]; then | + | # Check souci qcq |
- | echo " | + | if [ -z "$remote_master_master_log_file" -o -z "$remote_master_master_log_pos" |
- | elif [ -z "$local_slave_log_index" -o -z "$local_slave_log_pos" ]; then | + | [ -z " |
- | echo " | + | [ -z " |
- | elif [ $remote_master_log_index -gt $local_slave_log_index | + | [ -z " |
- | echo "Le fichier de log est plus recent | + | [ -z " |
- | echo "On restart le slave de $local_slave" >> $TMP | + | [ " |
- | / | + | [ " |
- | elif [ $remote_master_log_pos | + | [ " |
- | echo "Le slave de $local_host est en retard : | + | [ " |
- | master $remote_host : $remote_master | + | then |
- | slave $local_host : $local_slave" >> $TMP | + | # 2e chance |
- | echo "On restart le slave de $local_slave" >> $TMP | + | sleep 5 |
- | / | + | init_vars |
+ | fi | ||
+ | |||
+ | # connexion distante | ||
+ | if [ -z " | ||
+ | echo " | ||
+ | # connexion locale | ||
+ | elif [ -z "$local_slave_master_log_file" -o -z "$local_slave_master_log_pos" ]; then | ||
+ | echo " | ||
+ | # fichier slave local trop vieux | ||
+ | elif [ "$remote_master_master_log_file" | ||
+ | echo "Le fichier de log est différent | ||
+ | echo -e "Sur le slave de $local_host on a l' | ||
+ | echo "On restart le slave de $local_host" >> $TMP | ||
+ | / | ||
+ | # position slave local en retard | ||
+ | elif [ "$remote_master_master_log_pos" | ||
+ | echo "Le slave de $local_host est en retard | ||
+ | master $remote_host : $remote_master_master_log_file $remote_master_master_log_pos | ||
+ | slave $local_host : $local_slave_master_log_file $local_slave_master_log_pos" >> $TMP | ||
+ | echo -e "\nSur le slave de $local_host on a l' | ||
+ | echo " | ||
+ | / | ||
fi | fi | ||
- | if [ -z "$local_master_log_index" -o -z "$local_master_log_pos" ]; then | + | # on recommence avec le slave distant |
- | echo " | + | if [ -z "$local_master_master_log_file" -o -z "$local_master_master_log_pos" ]; then |
- | elif [ -z "$remote_slave_log_index" -o -z "$remote_slave_log_pos" ]; then | + | echo " |
- | echo " | + | elif [ -z "$remote_slave_master_log_file" -o -z "$remote_slave_master_log_pos" ]; then |
- | elif [ $local_master_log_index -gt $remote_slave_log_index | + | echo " |
- | echo "Le fichier de log est plus recent | + | elif [ "$local_master_master_log_file" |
- | echo "On restart le slave de $remote_slave" >> $TMP | + | echo "Le fichier de log est différent |
+ | echo -e "Sur le slave de $remote_host on a l' | ||
+ | echo "On restart le slave de $remote_host" >> $TMP | ||
/ | / | ||
- | elif [ $local_master_log_pos | + | elif [ "$local_master_master_log_pos" |
- | echo "Le slave de $remote_host est en retard : | + | echo "Le slave de $remote_host est en retard |
- | master $local_host : $local_master | + | master $local_host : $local_master_master_log_file $local_master_master_log_pos |
- | slave $remote_host : $remote_slave" >> $TMP | + | slave $remote_host : $remote_slave_master_log_file $remote_slave_master_log_pos" |
- | echo "On restart le slave de $remote_slave" >> $TMP | + | echo -e "Sur le slave de $remote_host on a l' |
+ | echo "On restart le slave de $remote_host" >> $TMP | ||
/ | / | ||
fi | fi | ||
+ | # et mail en cas de pb | ||
if [ $(wc -l <$TMP) -gt 0 ]; then | if [ $(wc -l <$TMP) -gt 0 ]; then | ||
# on ajoute le check des Slave_running ($user doit avoir les droits PROCESS) | # on ajoute le check des Slave_running ($user doit avoir les droits PROCESS) | ||
- | echo "Sur $local_host on a $(/ | + | echo -e "\nSur $local_host on a $(/ |
echo "Sur $remote_host on a $(/ | echo "Sur $remote_host on a $(/ | ||
- | echo "Fin du script de check ($DATE)" | + | echo -e "\nFin du script de check ($DATE)" |
# log | # log | ||
cat $TMP >> $ERRLOG | cat $TMP >> $ERRLOG | ||
# on envoie un mail | # on envoie un mail | ||
- | mail -a " | + | mail -a " |
# et on pose un lock | # et on pose un lock | ||
cat $TMP >> $LOCK | cat $TMP >> $LOCK | ||
else | else | ||
[ -f $LOCK ] && \ | [ -f $LOCK ] && \ | ||
- | echo -e "\nDATE : 1re constatation de la résolution du problème, synchro mysql OK" >> $LOCK && \ | + | echo -e "\n$DATE |
- | | + | mail -a " |
rm -f $LOCK | rm -f $LOCK | ||
fi | fi | ||
</ | </ |
linux/adminsys/check_replication_mysql.1260424983.txt.gz · Dernière modification : 10/12/2009 07:03 de daniel