{"word_count": 411, "character_count": 2942}
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.[caption id="attachment_3825" align="alignleft" width="150"] Screenshot of the famous GLMatrix screensaver Copyright © 1999-2003 by Jamie Zawinski[/caption]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înesfunction in_array(){chaine=$1trouve=$(echo ${exclude[*]} | grep "$chaine")if [ "$trouve" != "" ]thenreturn 1elsereturn 0fi}#récupération de la liste des basesbases=($(mysqlshow -pmotdepasse | cut -d '|' -f2 | sed '1,3d' | sed '$d'))#repertoire de sauvegarde ou sont copiés les exportsrep='/sauvegardes'#liste des bases a exclureexclude=(base1 base2 base3)#lancement de l'exportfor i in ${!bases[*]}do$(in_array ${bases[$i]})inarray=$(echo $?)if [ $inarray -eq 0 ]thenecho ${bases[$i]}mysqldump -u root -pmotdepasse --opt ${bases[$i]} &#62; $rep/${bases[$i]}.sqlfidone[/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]