Serveur MYSQL CLUSTER cluster backup

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Script de sauvegarde
Rôle Compresse et exporte vers un serveur NFS le dernier backup NDB produit sur le nœud
Prérequis /etc/my.cnf, config.ini, backup NDB déjà déclenché
Voir aussi Restauration · Script cluster

Ce script complète le backup natif de MySQL Cluster (NDB) : NDB écrit ses fichiers de sauvegarde localement sur chaque nœud de données (sous FileSystemPath/BACKUP), sans les exporter ailleurs. Ce script récupère le backup le plus récent, le compresse et le copie sur un partage NFS distant pour l'externaliser.

Important : ce script ne déclenche pas lui-même la sauvegarde NDB — il faut d'abord lancer manuellement (ou via une tâche planifiée séparée) :

ndb_mgm -e 'start backup [id] [nowait]'

avant d'exécuter ce script, qui se contente de repérer et d'exporter le backup déjà produit.

Fonctionnement

  1. Lit FileSystemPath dans config.ini pour localiser le répertoire de backups NDB.
  2. Repère automatiquement l'identifiant du backup le plus récent (BACKUP-ID le plus élevé).
  3. Monte le partage NFS distant (serveur/point de montage à adapter à l'environnement).
  4. Compresse chaque fichier du backup en .tgz.
  5. Copie l'archive compressée vers le partage NFS, dans un répertoire daté du jour.
  6. Démonte le partage NFS.

Script

Le nom du serveur NFS et le chemin de montage (variables server/tomount) sont des exemples génériques à 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

backupdir=$datadir/BACKUP
if ! ls -d $backupdir/BACKUP-*/ >/dev/null 2>&1 ; then
	echo "Aucun backup présent sur le serveur!"
	echo "Lancez ndb_mgm -e 'start backup [id] [nowait]' d'abord!"
	exit 1
fi

# Sauvegarde automatiquement le backup le plus récent présent localement.
ID=$(ls -d $backupdir/*/| sed "s#.*BACKUP-\([0-9]*\)/#\1#g" | sort -n| tail -n1)
iddir=BACKUP-$ID
mountdir=/mnt
tomount=/home/cluster
server=backup.example.local
nodeid=$(grep -m1 nodeid /etc/my.cnf)
nodeid=${nodeid##*=}
nodeid=${nodeid%%,*}

# Montage du partage NFS distant
mount -t nfs $server:$tomount $mountdir
[ $? -ne 0 ] && echo "Impossible de monter le repertoire de sauvegarde." && exit 1
echo "Montage OK"

# Compression des fichiers du backup NDB
echo "Compression des fichiers..."
cd $backupdir/BACKUP-$ID
for i in $(ls BACKUP-${ID}*)
do
 tar -czf ${i}.tgz $i
done

cd $mountdir

directoire=cluster_back_$(date +%y%m%d)

[ -d $directoire ] || mkdir $directoire
[ -d $directoire/BACKUP-${ID} ] || mkdir $directoire/BACKUP-${ID}

echo "Copie du Backup..."

cp $backupdir/BACKUP-${ID}/*.tgz $mountdir/$directoire/BACKUP-${ID} >/dev/null 2>&1

if [ $? -eq 0 ]; then
		echo "Backup sauvegardé avec succès!"
	else
		echo "Copie ratée!..."
fi

cd
umount -l $mountdir

Voir aussi