Script de sauvegarde pour MySQL

Nos serveurs étant installés selon la technologie RAID, le risque de perte de données provient essentiellement d’une erreur logicielle ou humaine. Ne disposant pas de solution de sauvegarde professionnelle pour nos sites web et documents numériques, nous ne pouvions cependant pas rester sans copie de secours des fichiers et des bases les plus importants. Concernant ces dernières, un simple script les enregistre dans des fichiers distincts à intervalles réguliers. L’alambic numérique étant peu pourvu en langage informatique — un comble pour le blog d’une bibliothèque numérique –, voyons plus en détail le fonctionnement de ces quelques lignes de code.

Screenshot of the famous GLMatrix screensaver Copyright © 1999-2003 by Jamie Zawinski
Screenshot of the famous GLMatrix screensaver Copyright © 1999-2003 by Jamie Zawinski

MySQL, le système de gestion de bases de données  que nous utilisons, dispose d’un certain nombre d’outils d’administration. L’un d’entre-eux, permet d’exporter les bases dans un format adapté à un éventuel ré-import (en SQL). Chaque nuit, le programme qui nous intéresse ici, exporte les données de nos sites principaux à l’aide de ces commandes de gestion. Les extractions de la veille sont écrasées systématiquement et même si nous archivons régulièrement ces fichiers il n’y a donc pas de gestion des versions précédentes. Nous disposons tout de même d’une copie de secours en cas d’une perte de données inattendue.

Voici ce script et un commentaire associé :

[sourcecode language= »bash » highlight= »15,31″]
#! /bin/bash
#fonction testant la presence d’un element dans un tableau de chaînes
function in_array(){
chaine=$1
trouve=$(echo ${exclude[*]} | grep « $chaine »)
if [ « $trouve » != «  » ]
then
return 1
else
return 0
fi
}

#récupération de la liste des bases
bases=($(mysqlshow -pmotdepasse | cut -d ‘|’ -f2 | sed ‘1,3d’ | sed ‘$d’))

#repertoire de sauvegarde ou sont copiés les exports
rep=’/sauvegardes’

#liste des bases a exclure
exclude=(base1 base2 base3)

#lancement de l’export
for i in ${!bases[*]}
do
$(in_array ${bases[$i]})
inarray=$(echo $?)
if [ $inarray -eq 0 ]
then
echo ${bases[$i]}
mysqldump -u root -pmotdepasse –opt ${bases[$i]} > $rep/${bases[$i]}.sql
fi
done
[/sourcecode]

Ces quelques lignes sont écrites pour BASH, l’interpréteur de la ligne de commande sous Linux. Son fonctionnement est simple, il récupère la liste des bases présentes dans le serveur MySQL puis les enregistre dans un répertoire indiqué dans le programme à la ligne 18 . Certaines bases peuvent être ignorées en indiquant leur nom dans la liste de la ligne 21.
Les lignes en surbrillance ont une syntaxe particulière. Il ne s’agit pas d’une faute de frappe mais le mot de passe doit être accolé à l’option « -p » passée aux commandes mysqlshow et mysqldump.

Il suffit ensuite d’attribuer les droits d’exécution à ce script et de le lancer avec les commandes suivantes :

[sourcecode language= »bash » gutter= »false »]
$ chmod a+x dump-mysql
$ ./dump-mysql
[/sourcecode]


Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *