29-11-2011 : Remettre dans le débat politique les principes du Conseil National de la Résistance
17-02-2012 : Pétition pour une protection de l’apiculture et des consommateurs face au lobby des OGM
Logo de mon site
Logo de mon site
Faire un don

Luxpopuli / eZ Publish / Trucs & astuces / MySQL : sauvegarder et restaurer une base de données





Right menu

Logo du site ez.no  Logo XHTML 1.O du W3C  Logo XHTML 1.O du W3C  Site francophone officiel de Firefox
zero papier grâce aux catalogues et promos en ligne de bonial

MySQL : sauvegarder et restaurer une base de données

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