« LINUX:MariaDB/Galera - Solution d'automatisation de démarrage » : différence entre les versions

Aucun résumé des modifications
Aucun résumé des modifications
Ligne 85 : Ligne 85 :




==Installation==
==Installation de LUA==
Une partie de la procédure est écrite dans le langage de script LUA. Il faut l'installer:
Une partie de la procédure est écrite dans le langage de script LUA. Il faut l'installer:
  dnf install lua
  dnf install lua
Ligne 134 : Ligne 134 :
----
----
On y remarque le chargement du fichier "hosts.txt". Ce script sera appelé par le script écrit en "bash".
On y remarque le chargement du fichier "hosts.txt". Ce script sera appelé par le script écrit en "bash".
==Script Bash==
Voici le script principal écrit en langage Bash. Nous avons nommé ce script "/produc/mysql.bat/checkdb.bat":
----
#!/bin/bash
 
'''CHEMIN'''="./"
'''CHEMINDB'''="../mysql"
 
cd $CHEMIN
 
PS=`/usr/bin/ps ax | /usr/bin/grep mariadb | /usr/bin/grep -v grep`
 
HOST=`/usr/bin/hostname`
 
/usr/bin/echo "Erreur" > mariadb.log
 
if [ "$PS" != "" ]
then
  echo "Mariadb en activité" > mariadb.log
else
  /usr/bin/lua mariadb.lua
  TAILLE=`/usr/bin/wc -c mariadb.txt | /usr/bin/awk '{printf("%s",$1)}' `
  if [ "$TAILLE" != "0" ]
  then
    /usr/bin/echo "Lancement de Mariadb" > mariadb.log
    /usr/bin/systemctl start mariadb.service
  else
    LIGNE2=`/usr/bin/grep safe_to_bootstrap $CHEMINDB/grastate.dat | /usr/bin/awk '{printf("%s",$2)}' `
    if [ "$LIGNE2" == "1" ]
    then
    /usr/bin/echo "Lancement de Galera" > mariadb.log
    /usr/bin/galera_new_cluster
    else
 
    NOMAX="-1"
    NOREMOTE="-1"
    NOLOCAL="-1"
 
    LISTES=`/usr/bin/cat hosts.txt`
    for LISTE in $LISTES
    do
      /usr/bin/echo "-" > $LISTE.etat
      /usr/bin/rsync $LISTE::db/grastate.dat $LISTE.etat 2> /dev/null
      if [ "$HOST" == "$LISTE" ]
      then
      NOLOCAL=`/usr/bin/grep seqno $LISTE.etat | /usr/bin/awk '{printf("%s",$2)}' `
      else
      NOREMOTE=`/usr/bin/grep seqno $LISTE.etat | /usr/bin/awk '{printf("%s",$2)}' `
      if [ "$NOREMOTE" == "" ]
      then
        NOREMOTE="100000000"
      fi
      fi
 
      if [ $NOMAX -lt $NOREMOTE ]
      then
      NOMAX=$NOREMOTE
      fi
    done
 
    if [ "$NOLOCAL" != "-1" ]
    then
      if [ $NOMAX -lt $NOLOCAL ]
      then
      /usr/bin/sed -i 's/safe_to_bootstrap: 0/safe_to_bootstrap: 1/g' $CHEMINDB/grastate.dat
      /usr/bin/echo "Lancement de Galera" > mariadb.log
      /usr/bin/galera_new_cluster
      else
      if [ "$NOMAX" == "100000000" ]
      then
        /usr/bin/echo "Une machine n'est pas accessible" > mariadb.log
      else
        /usr/bin/echo "Attente de démarrage distant de Galera" > mariadb.log
      fi
      fi
    else
      if [ "$NOMAX" == "100000000" ]
      then
        /usr/bin/echo "Une machine n'est pas accessible" > mariadb.log
      else
        /usr/bin/echo "Attente de démarrage distant de Galera" > mariadb.log
      fi
    fi
    fi
  fi
fi
----
Remarquons que, pour s'exécuter, on doit se trouver dans le répertoire où ce script est localisé; c'est le service qui le précisera.
Il faut faire attention au chemin (variable "CHEMIN") où se trouve la base de données MariaDB; il faut adapter en conséquence la variable "CHEMINDB". Dans notre cas, elle se trouve dans le répertoire voisin "/produc/mysql". Si cette procédure devait être utilisée par le système Cron, il faudrait faudrait les spécifier en absolu et non en relatif.