Serveur MYSQL CLUSTER cluster restore semiauto
Aller à la navigation
Aller à la recherche
| Fiche express | |
|---|---|
| Type | Script de restauration semi-automatique |
| Rôle | Récupère et décompresse une sauvegarde NDB depuis le NFS, puis affiche les commandes ndb_restore à lancer
|
| Prérequis | /etc/my.cnf, config.ini, sauvegarde déjà exportée sur le NFS
|
| Voir aussi | Sauvegarde · Script cluster |
Ce script est qualifié de semi-automatique : il automatise la partie mécanique de la restauration (repérage de l'archive sur le NFS, montage, copie, décompression, identification des bases à restaurer), mais laisse volontairement le déclenchement final de ndb_restore à l'opérateur — la restauration NDB implique des choix (quel nœud restaurer en premier avec les métadonnées -m, quelles bases/tables inclure) qu'un script ne peut pas décider seul en toute sécurité.
Fonctionnement
- Monte le partage NFS distant contenant les archives (
archives/cluster*.tar). - Propose un choix interactif (
select) parmi les archives disponibles. - Copie l'archive choisie en local, démonte le NFS.
- Décompresse l'archive
.tarpuis les fichiers de backup NDB (.tgz) qu'elle contient. - Détermine automatiquement les bases utilisateur présentes dans le backup (exclut
sys,mysql,test) viandb_print_backup_file. - Affiche les commandes à exécuter manuellement pour créer les bases puis lancer
ndb_restoresur chacun des deux nœuds.
Script
Le nom du serveur NFS (variable server) est un exemple générique à adapter à l'environnement cible.
#!/bin/bash
[ ! -f /etc/my.cnf ] && echo "Fichier my.cnf manquant!" && exit 1
[ ! -f /usr/local/mysql-cluster/config.ini ] && echo "Fichier config.ini manquant!" && exit 1
datadir=$(grep -m1 FileSystemPath /usr/local/mysql-cluster/config.ini)
datadir=${datadir#*=}
[ ! -d "$datadir" ] && echo "Mauvaise valeur pour FileSystemPath=$datadir" && exit 1
tmprestore=$datadir/tmprestore
mountdir=/mnt
tomount=/home/cluster
server=backup.example.local
nodeid=$(grep -m1 nodeid /etc/my.cnf)
nodeid=${nodeid##*=}
nodeid=${nodeid%%,*}
# Nœud "jumeau" (l'autre nœud de données du couple) : sur un cluster à 2 nœuds
# symétriques (id 11/12), c'est simplement l'id complémentaire.
if [ $nodeid = "11" ];then
nodeid2=12
else
nodeid2=11
fi
clear
# Montage du partage NFS distant
mount -t nfs $server:$tomount $mountdir
[ $? -ne 0 ] && echo "Impossible de monter le repertoire de sauvegarde" && exit 1
echo -e "Montage du repertoire de sauvegarde OK.\n"
cd $mountdir
if [ ! -d archives ]; then
echo "Repertoire d'archives absent!"
umount -l $mountdir
exit 1
fi
cd archives
lsa=$(ls cluster*.tar)
if [ -z "$lsa" ]; then
echo "Aucunes sauvegardes présentes!"
umount -l $mountdir
exit 1
fi
echo "Selectionnez la sauvegarde que vous voulez restaurer :"
select tar in $lsa
do
echo "Vous avez choisi de restaurez : ${tar%.*}"
break
done
echo -e "\nCopie de l'archive..."
[ -d $tmprestore ] && rm -rf $tmprestore
mkdir $tmprestore
cp $tar $tmprestore
cd $tmprestore
umount -l $mountdir
echo "Décompression de l'archive..."
tar -xf $tar
tar=${tar%.tar}
cd ${tomount#/}/$tar
numero=$(ls | sed s/BACKUP-// | sort -n| tail -n1)
backdir=BACKUP-$numero
cd $backdir
for i in $(ls);do
tar -xzf $i
done
rm *.tgz
# Bases utilisateur présentes dans le backup (exclut sys/mysql/test)
bases=$(ndb_print_backup_file $backdir.$nodeid.ctl \
|sed -ne "s/Key: 1 .*: \"\([a-z]*\)\/.*\"/\1/gp" |sort -u|egrep -v "(sys|mysql|test)")
clear
echo -e "\n1)Déplacez-vous dans le répertoire de restauration :"
echo -e "# cd $tmprestore/${tomount#/}/$tar/$backdir\n"
echo -e "Vous vous trouvez dans le répertoire contenant les fichiers de backup "
echo -e "des 2 noeuds.\n"
echo "2)Commencez par créer manuellement les databases dont vous aurez besoin :"
echo "Exemples:"
for i in $bases; do echo "mysql < <(echo \"create database $i;\")"; done
echo -e "\n3)Ensuite, par exemple, si vous voulez restaurer les bases db1 et db2, "
echo -e "et juste les tables t1 et t4 de la base db3 ; tapez ces 2 commandes :\n"
echo -e "Le premier appel avec l'option '-m' :\n"
echo -e "# ndb_restore -n $nodeid -b $numero -m -r --backup_path=. \\ "
echo -e "--include-databases=db1,db2 --include-tables=db3.t1,db3.t4\n"
echo -e "Puis sans l'option '-m' et avec l'id de l'autre noeud :\n"
echo -e "# ndb_restore -n $nodeid2 -b $numero -r --backup_path=. \\ "
echo -e "--include-databases=db1,db2 --include-tables=db3.t1,db3.t4\n"
echo -e "\n(Supprimez le répertoire 'tmprestore' une fois fini!)"
Points d'attention
- L'option
-mdendb_restorerestaure les métadonnées (structure des tables) : elle ne doit être utilisée qu'une seule fois, sur un seul nœud — l'appel sur le second nœud (nodeid2) l'omet volontairement. - Le script crée les bases cibles automatiquement dans sa liste de suggestions mais laisse le
CREATE DATABASEréel à l'opérateur. - Pensez à supprimer le répertoire temporaire
tmprestoreune fois la restauration terminée (rappelé en fin de script).
Voir aussi
- Serveur MYSQL CLUSTER cluster backup — script de sauvegarde produisant l'archive restaurée ici
- Serveur MYSQL CLUSTER cluster — script de démarrage/arrêt du cluster
- Serveur MYSQL CLUSTER config.ini — configuration dont est tiré
FileSystemPath