BASH - Sauvegarder son site et sa base de données
Table des matières
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
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
Si le dossier rapports est accessible via le serveur web, voici une page PHP (à nommer index.php par exemple et à placer dans le même dossier que les rapports) qui permet de les lister et d'y accéder facilement :
Et pour finir, on fait une crontab qui automatise la sauvegarde périodiquement (ici, tous les jours à 00h01) :
Pour plus de sécurité, on peut se permettre de récupérer sur un autre serveur les sauvegardes via la commande :
Utiliser cette commande si on a changé le port de SSH :
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
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
Code BASH :
#! /bin/bash echo On definit les variables systeme dte=$(date +%Y-%m-%d--%H-%M-%S) path=`dirname $0` pathsav="$path/sauvegarde" pathrap="$path/public_html/sauvegarde" ficrap="$pathrap/sauvegarde-$dte-rapport.log" site="www.linuxtricks.fr" wwwpath="/home/linuxtricks/" wwwfolder="public_html" dbhost="localhost" dbuser="xxx" dbpasswd="xxx" dbname="xxx" dbrestohost="$dbhost" dbrestouser="$dbuser" dbrestopasswd="$dbpasswd" dbrestoname="xxrestore" echo Variables definies. echo "" mkdir -p "$pathrap" 2>/dev/null echo "RAPPORT SAUVEGARDE $site du $dte" > "$ficrap" echo Vérification des programmes >> "$ficrap" 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 >> "$ficrap" 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 >> "$ficrap" exit 1 fi echo Vérification des programmes terminés >> "$ficrap" echo "" >> "$ficrap" echo Iniatalisation du script >> "$ficrap" cd "$path" mkdir -p "$pathsav" 2>/dev/null echo Script initialise >> "$ficrap" echo "" >> "$ficrap" echo On lance la sauvegarde >> "$ficrap" echo "" >> "$ficrap" echo On lance l\'archivage du site web $site >> "$ficrap" 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" >> "$ficrap" else echo Echec de l\'archivage du site Web >> "$ficrap" exit 2 fi echo "" >> "$ficrap" echo On compresse l\'archive du site web $site >> "$ficrap" bzip2 -z "$pathsav/$site-$dte.tar" if [ $? -eq 0 ] then echo Compression de l\'archive du site Web termine : "$pathsav/$site-$dte.tar.bz2" >> "$ficrap" else echo Echec de la compression de l\'archivage du site Web >> "$ficrap" exit 3 fi echo "" >> "$ficrap" echo On lance la sauvegarde de la base de donnees >> "$ficrap" mysqldump -u "$dbuser" -p"$dbpasswd" -h "$dbhost" "$dbname" > "$pathsav/$site-$dte.sql" if [ $? -eq 0 ] then echo Base de donnees sauvegardee. >> "$ficrap" else echo Echec de la sauvegarde de la base de données >> "$ficrap" exit 4 fi echo "" >> "$ficrap" echo On compresse la base de données. >> "$ficrap" bzip2 -z "$pathsav/$site-$dte.sql" if [ $? -eq 0 ] then echo Base de donnees compressée. >> "$ficrap" else echo Echec de la compression de la base de données >> "$ficrap" exit 5 fi echo "" >> "$ficrap" echo SAUVEGARDE TERMINEE >> "$ficrap" echo --------------------- >> "$ficrap" echo PURGE DES ANCIENNES SAUVEGARDES >> "$ficrap" find "$pathsav" -mtime +30 -exec echo '{}' \; >> "$ficrap" find "$pathsav" -mtime +30 -exec rm '{}' \; >> "$ficrap" if [ $? -eq 0 ] then echo Anciennes sauvegardes supprimées. >> "$ficrap" else echo Echec de la suppression des anciennes sauvegardes. >> "$ficrap" exit 6 fi echo -------------------- >> "$ficrap" echo VERIFICATION DE LA SAUVEGARDE >> "$ficrap" echo On verifie l\'archive "$pathsav/$site-$dte.tar.bz2" >> "$ficrap" tar tf "$pathsav/$site-$dte.tar.bz2" 2>/dev/null 1>/dev/null if [ $? -eq 0 ] then echo Sauvegarde des fichiers du site : OK >> "$ficrap" else echo Une erreur est survenue durant la restauration. La sauvegarde est probablement endommagee. >> "$ficrap" fi echo "" >> "$ficrap" echo On verifie la sauvegarde de la base de donnees : "$pathsav/$site-$dte.sql.bz2" >> "$ficrap" 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 >> "$ficrap" else echo Une erreur est survenue durant la restauration. La sauvegarde est probablement endommagee. >> "$ficrap" fi echo TESTS DE RESTAURATION TERMINES >> "$ficrap"
Lister les rapports
Si le dossier rapports est accessible via le serveur web, voici une page PHP (à nommer index.php par exemple et à placer dans le même dossier que les rapports) qui permet de les lister et d'y accéder facilement :
Code PHP :
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* .