« 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. | |||