Date de publication: le mercredi 8 août 2007 à 21h00
Dernière modification: par Pascal BOYER le mercredi 6 mai 2009 à 19h35
« Article précédent: eZ Publish : login et mot de passe perdus
» Article suivant: rewriting - virtualhost
MySQL : script de sauvegarde de la base de données de eZ Publish
Le petit script interactif ci-dessous permet de faire une sauvegarde de la base de données MySQL utilisée par votre site eZ publish:
#!/bin/bash echo ""; echo ""; echo ""; echo ""; echo ""; echo " ################################################################################"; echo " # La sauvegarde de la base de données du site luxpopuli.fr va être effectuée #"; echo " ################################################################################"; echo ""; echo ""; echo ""; # L'option -n supprime le retour chariot echo -n " > 1°/ Veuillez entrez le nom de la Base de données à sauvegarder: "; # et maintenant on affecte ce qui est répondu par l'utilisateur à la # variable dbase (pas de $ devant la variable car elle est en train d'être créée) read dbase; echo ""; echo -n " > 2°/ Veuillez entrez le nom de l'administrateur de cette base de données: "; read admin; echo ""; echo -n " > 3°/ Veuillez entrez le mot de passe de l'administrateur de cette base de données: "; # L'option -s permet de ne pas afficher les caractères du mot de passe lorsqu'on le tape. read -s adminpswd; # L'option -s supprime l'écho, donc le mot de passe ne s'affiche pas à l'écran. echo ""; # Maintenant on définit le nom du fichier de sauvegarde: jour=`date +%A`; #mois=`date +%B`; mois=`date +%m`; date=`date +%d`; heure=`date +%X`; annee=`date +%Y`; # Il est IMPÉRATIF de coller la variable au signe = !!! #file=$dbase\_dumpfile_$jour-$date-$mois-$annee-a-$heure.sql; file=$annee-$mois-$date-a-$heure--$dbase\_dumpfile.sql; echo ""; echo " Le nom du fichier de sauvegarde sera: $file"; echo -n " Il sera placé dans /usr/local/Backup/ezpdbase/"; sleep 5; echo ""; echo ""; echo -n " > Veuillez patienter pendant que le système crée la sauvegarde de votre base de données..."; `mysqldump -u $admin -p"$adminpswd" -h localhost --opt $dbase > /usr/local/Backup/ezpdbase/$file` # On compresse le fichier: echo ""; echo " > Le fichier de sauvegarde a bien été créé."; echo -n " > Veuillez patienter pendant que le système compresse le fichier de sauvegarde..."; `bzip2 -9 /usr/local/Backup/ezpdbase/$file`; # On récupère la taille du fichier compressé: taille=`ls -la /usr/local/Backup/ezpdbase/$file.bz2 |awk '{print $5}'`; echo ""; echo " > L'opération s'est correctement déroulée."; echo " Le nom final du fichier est: $file.bz2"; echo " Sa taille est de $taille octets"; echo ""; echo ""; exit 0
Après avoir placé ces lignes dans un fichier ( mysqldump_luxpopuli par exemple), rendez-le exécutable:
chmod +x mysqldump_luxpopuli
...puis restreignez ainsi les droits:
chmod 700 mysqldump_luxpopuli
Placez ensuite , par exemple, le script dans le répertoire /usr/local/sbin/.
Ensuite, il suffit de créer le répertoire /usr/local/ Backup/ et son sous-répertoire /usr/local/Backup/ ezp/ dans lequel seront placés les fichiers de sauvegarde.
Lorsque l'on exécute ce script, voici l'ensemble des sorties qu'il produit:
./mysqldump_luxpopuli
.
################################################################################
# La sauvegarde de la base de données du site luxpopuli.fr va être effectuée #
################################################################################
> 1°/ Veuillez entrez le nom de la Base de données à sauvegarder: madbase
> 2°/ Veuillez entrez le nom de l'administrateur de cette base de données: monidentifiant
> 3°/ Veuillez entrez le mot de passe de l'administrateur de cette base de données:
Le nom du fichier de sauvegarde sera: 2007-08-08-a-19:15:43--madbase_dumpfile.sql
Il sera placé dans /usr/local/Backup/ezpdbase/
> Veuillez patienter pendant que le système crée la sauvegarde de votre base de données...
> Le fichier de sauvegarde a bien été créé.
> Veuillez patienter pendant que le système compresse le fichier de sauvegarde...
> L'opération s'est correctement déroulée.
Le nom final du fichier est: 2007-08-08-a-19:15:43--madbase_dumpfile.sql.bz2
Sa taille est de 7146167 octets
.
MySQL : automatiser les sauvegardes de la base de données
Si vous souhaitez automatiser la procédure de sauvegarde de votre base de données MySQL, il suffit d'utiliser crontab (ou l'interface graphique kcron).
Par contre, il ne sera plus possible d'utiliser un script interactif et les noms de la base de données, de l'administrateur et son mot de passe devront donc être inscrits en dur dans le script qui devient alors:
#!/bin/bash # Lorsqu'on définit une variable il est IMPERATIF de coller la variable au signe égal ("=") # On définit le nom de la base de données dbase=madbase; # On définit le nom de l'administrateur de la base de données admin=monidentifiant; # On définit le mot de passe de l'administrateur adminpswd=monmotdepasse; # On définit le jour en cours ##jour=`date | awk '{print $1}'`; jour=`date +%A`; # On définit le mois en cours ##mois=`date | awk '{print $3}'`; mois=`date +%m`; # On définit le jour en cours ##date=`date | awk '{print $2}'`; date=`date +%d`; # On définit l'heure courante ##heure=`date | awk '{print $5}'`; heure=`date +%X`; # On définit l'année en cours ##annee=`date | awk '{print $4}'`; annee=`date +%Y`; # On définit le nom que portera le fichier de sauvegarde #file=`touch $dbase_dumpfile_$jour-$date-$mois-$annee-a-$heure.sql`; file=$annee-$mois-$date-a-$heure--$dbase\_dumpfile.sql; # On effectue le dump de la base de donnée `mysqldump -u $admin -p"$adminpswd" -h localhost --opt $dbase > /usr/local/Backup/ezp/$file`; # On compresse le fichier: `bzip2 -9 /usr/local/Backup/ezp/$file`; # On supprime le fichier non compressé # C'EST INUTILE CAR bzip2 SUPPRIME LE FICHIER ORIGINAL #`rm /usr/local/Backup/eZP/$file`; exit 0
Cron : configuration d'une sauvegarde automatique
Voici à présent un exemple de table cron qui fait une sauvegarde toutes les 6 heures de la base de données de eZ publish:
crontab -u root -e
# Sauvegarde de la base de données de eZ publish 0 0,6,12,18 * * * /usr/local/sbin/mysqldump_luxpopuli
MySQL : restauration du dump de la base
Supposons qu'à la suite d'une malencontreuse manipulation vous sabordiez votre base de données. Il va être possible de rapidement remettre en service votre serveur web grâce au dernier fichier de sauvegarde à votre disposition.
La seule chose à faire est de lancer cette commande:
mysql -u login -p password -h nom_serveur -D nom_base < nom_du_fichier_de_sauvegarde.sql
où:
- login doit être remplacé par le nom de l'administrateur de la base de données,
- password doit être remplacé par le mot de passe de l'administrateur de la base de données,
- nom_serveur doit être remplacé par le nom (ou l'adresse IP) du serveur MySQL (ou par localhost si la commande est lancée directement à partir de la machine qui abrite le serveur MySQL),
- nom_base doit être remplacé par le nom de la base de données que l'on souhaite restaurer.
Personnellement, avant de restaurer l'intégralité des tables de ma base de données utilisée par eZ Publish, je prends toujours la peine de vider complètement cette dernière. Mais pour cela j'utilise phpMyAdmin car la liste des tables est bien trop longue pour envisager la ligne de commande.
Commentaires














