Scripts et Programmation

BASH - Sauvegarder son site et sa base de données

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

Introduction





Quand on a un site, ce qui est bien, c'est de le sauvegarder. Voici ci-dessous le script que je lance à la main lorsque je souhaite le sauvegarder.

C'est le script de linuxtricks. Adapter avec les noms que vous voulez :)



Je l'ai conçu de A à Z, il se peut donc qu'il ne soit pas parfait :merci:



Les variables ont été changées pour ne pas afficher mes identifiants :intello:





Etat des lieux





Le dossier personnel : /home/linuxtricks

Le dossier de sauvegarde : /home/linuxtricks/sauvegarde

Le script de sauvegarde : /home/linuxtricks/sauvegarde-script.sh

Le dossier du site : /home/linuxtricks/public_html



Le script





Code BASH :
 
#! /bin/bash
 
echo On definit les variables systeme
 
path=`dirname $0`
pathsav="$path/sauvegarde"
 
site="www.linuxtricks.fr"
wwwpath="/home/linuxtricks/"
wwwfolder="public_html"
 
dbhost="localhost"
dbuser="linuxtricks"
dbpasswd="linuxtricks"
dbname="linuxtricks"
 
dbrestohost="$dbhost"
dbrestouser="$dbuser"
dbrestopasswd="$dbpasswd"
dbrestoname="ltrestore"
 
echo Variables definies.
 
echo ""
 
echo Vérification des programmes
progtar=$(which tar)
progtar=$(echo $?)
progbzip2=$(which bzip2)
progbzip2=$(echo $?)
progbzcat=$(which bzcat)
progbzcat=$(echo $?)
progmysqdump=$(which mysqldump)
progmysqdump=$(echo $?)
progmysql=$(which mysql)
progmysql=$(echo $?)
 
if [ $progtar -eq 0 ] && [ $progbzip2 -eq 0 ] && [ $progbzcat -eq 0 ] && [ $progmysqdump -eq 0 ] && [ $progmysql -eq 0 ]
then
    echo Tous les programmes sont disponibles sur le serveur
else
    echo Il manque un programme pour faire fonctionner le script de sauvegarde. Vérifier la présence de tar, bzip2, bzcat, mysqldump et mysql
    exit 1
fi
 
echo Vérification des programmes terminés
 
 
 
echo ""
 
echo Iniatalisation du script
cd "$path"
mkdir "$pathsav" 2>/dev/null
echo Script initialise                                                                                                              
 
echo ""
 
echo On definit la date de sauvegarde
dte=$(date +%Y-%m-%d--%H-%M-%S)
 
echo Date de sauvegarde definie sur $dte
 
echo ""
 
echo On lance la sauvegarde
echo ""
echo On lance l\'archivage du site web $site
cd "$wwwpath"
tar cf "$pathsav/$site-$dte.tar" "$wwwfolder"
cd "$path"
 
if [ $? -eq 0 ]
then
    echo Archivage du site Web termine :  "$pathsav/$site-$dte.tar"
else
    echo Echec de l\'archivage du site Web
    exit 2
fi
 
echo ""
 
echo On compresse l\'archive du site web $site
 
bzip2 -z "$pathsav/$site-$dte.tar"
 
if [ $? -eq 0 ]
then
        echo Compression de l\'archive du site Web termine :  "$pathsav/$site-$dte.tar.bz2"
else
        echo Echec de la compression de l\'archivage du site Web
        exit 3
fi
 
echo ""
 
echo On lance la sauvegarde de la base de donnees
 
mysqldump -u "$dbuser" -p"$dbpasswd" -h "$dbhost" "$dbname" > "$pathsav/$site-$dte.sql"
 
if [ $? -eq 0 ]
then
    echo Base de donnees sauvegardee.
else
    echo Echec de la sauvegarde de la base de données
    exit 4
fi
 
echo ""
 
echo On compresse la base de données.
 
bzip2 -z  "$pathsav/$site-$dte.sql"
 
if [ $? -eq 0 ]
then
    echo Base de donnees compressée.
else
    echo Echec de la compression de la base de données
    exit 5
fi
 
echo ""
 
 
 
echo SAUVEGARDE TERMINEE
 
echo ---------------------
 
echo PURGE DES ANCIENNES SAUVEGARDES
 
find "$pathsav" -mtime +30 -exec echo '{}' \;
find "$pathsav" -mtime +30 -exec rm '{}' \;
 
if [ $? -eq 0 ]
then
        echo Anciennes sauvegardes supprimées.
else
        echo Echec de la suppression des anciennes sauvegardes.
        exit 6
fi
 
 
 
echo --------------------
 
echo VERIFICATION DE LA SAUVEGARDE
 
echo On verifie l\'archive "$pathsav/$site-$dte.tar.bz2"
tar tf "$pathsav/$site-$dte.tar.bz2" 2>/dev/null 1>/dev/null
 
if [ $? -eq 0 ]
then
        echo Sauvegarde des fichiers du site : OK
else
        echo Une erreur est survenue durant la restauration. La sauvegarde est probablement endommagee.
fi
 
echo ""
 
echo On verifie la sauvegarde de la base de donnees : "$pathsav/$site-$dte.sql.bz2"
 
bzcat "$pathsav/$site-$dte.sql.bz2" | mysql -u "$dbrestouser" -p"$dbrestopasswd" -h "$dbrestohost" $dbrestoname 
 
if [ $? -eq 0 ]
then
        echo Sauvegarde de la base de donnees : OK
else
        echo Une erreur est survenue durant la restauration. La sauvegarde est probablement endommagee.
fi
 
echo TESTS DE RESTAURATION TERMINES
 
 
 






Le Crontab





Et pour finir, on fait une crontab qui automatise la sauvegarde périodiquement (ici, tous les jours à 00h01) :



Code BASH :
01 00 * * * /home/linuxtricks/sauvegarde-script.sh






Récupérer les sauvegardes ailleurs





Pour plus de sécurité, on peut se permettre de récupérer sur un autre serveur les sauvegardes via la commande :



Code BASH :
cd /le/dossier.voulu/
rsync  -rvzh linuxtricks@linuxtricks.fr:/home/linuxtricks/sauvegarde* .




Utiliser cette commande si on a changé le port de SSH :



Code BASH :
cd /le/dossier.voulu/
rsync -rvzh -e 'ssh -p 2222'  linuxtricks@linuxtricks.fr:/home/linuxtricks/sauvegarde* .