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 06:47] – aj test var vides 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.1260424054.txt.gz · Dernière modification : 10/12/2009 06:47 de daniel