ADeLLA.org , ADeLLA.org
Accueil du site > Documentation > Miscellanées > Automatiser les tâches de sauvegarde d’un site web

Automatiser les tâches de sauvegarde d’un site web

vendredi 23 mars 2007, par daniel


Introduction

Il est fastidieux, lorsqu’on administre plusieurs sites web, de faire des sauvegardes régulières des fichiers et des bases de données. Pourtant, une panne de disque dur est vite arrivée ! Si en plus nous n’avons aucune sauvegarde ...
Il serait intéressant d’automatiser cette tâche.

Notre exemple est celui d’un site web qui est hébergé sur un serveur mutualisé sans accès ssh, nous ne pouvons donc pas exécuter la commande mysqldump (outil de sauvegarde de la base de données MySQL).

Dump de la Base de données

Inutile de réinventer la roue, il existe plein d’exemples sur internet pour le réaliser :
- phpmysqldump
- Backup Base de données MySQL
- ...

Dans notre exemple, nous utiliserons le script php de Cedric Fronteau que vous pouvez télécharger directement ici.

Ce script sera inclu dans le fichier dump_mysql.php.

Il faut créer un script pour se connecter à la BdD, connexion.php :


<?php
// Connexion à la base de données ********************************************
$link = mysql_connect("serveursql.net", "login", "password")// "@ serveur","utilisateur","mdp"
       or die("impossible de se connecter à la base de données");
mysql_select_db("databasename") or die("impossible de trouver la base de données");
?>

Et enfin un dernier script pour exécuter le dump MySQL, run_dump.php :


<?php
include ("dump_mysql.php");
include ("connexion.php");
backupDatabase($link,"databasename",true,true,'INSERT');
?>

Les paramètres de la fonction backupDatabase sont expliqués dans le script de Cedric Fronteau.

Nous ne voulons pas que n’importe qui puisse exécuter un dump de notre base de données. Nous allons imposer une authentification. Apache permet l’utilisation d’un fichier de configuration nommé .htaccess [1] :


AuthType Basic
AuthName "- Zone protégé -"
AuthUserFile /chemin_absolu_de_votre_site_web/backup_database/.htpasswd
require user login

Renseignez les utilisateurs autorisés à voir le contenu du répertoire dans require user. Il faut que le chemin de AuthUserFile soit absolu (pas d’URL).

fichier .htpasswd :


login:aZ4Dfsdz1a

Ce fichier est composé du login et du mot de passe généré à l’aide de l’utilitaire htpasswd et séparé par le caractère " :" [2]. Si vous ne l’avez pas, vous pouvez le générer par exemple ici :
- http://shop.alterlinks.com/htpasswd...
- http://faq.1and1.fr/espace/htaccess...

Nous incluons ces 5 fichiers (.htaccess, .htpasswd, dump_mysql.php, connexion.php et run_dump.php) dans un répertoire que nous nommerons backup_database et nous déposons ce répertoire, via ftp, à la racine de notre site web.

Maintenant, à l’aide de votre navigateur, essayez d’exécuter le script php en vous authentifiant, URL : http://www.mondomaine.net/backup_database/run_dump.php

Vous pouvez vérifier, à l’aide d’un client ftp, qu’un fichier databasename.sql a bien été créé dans le répertoire backup_database.

Miroir FTP

Nous allons créer un script qui exécutera le dump MySQL puis qui "aspirera" notre site web, mirror.sh :


#!/bin/bash
# sauvegarde BdD mysql sur le serveur en tant que fichier
# aspire le site web en FTP
# Daniel ROCHER - 23/03/2007

repertoire_courant=$PWD

#execute la sauvegarde de la BdD
echo "Sauvegarde la BdD..."
wget -O /dev/null --http-user=login --http-passwd=password http://www.mondomaine.net/backup_database/run_dump.php
echo "Done."
echo "wait please..."
sleep 30

# miroir FTP

mkdir "$repertoire_courant/miroir" 2>/dev/null
cd "$repertoire_courant/miroir"

echo "Aspiration ftp..."
lftp -e "mirror && quit" -u loginFtp,passwordFtp serveurftp.net
echo "Done."

cd $repertoire_courant

Rendre ce script exécutable à l’aide de chmod :


chmod 750 mirror.sh

wget permet de charger la page run_dump.php et de nous identifier en une seule ligne ! L’option -O /dev/null permet de ne pas enregistrer de fichier HTML sur notre disque dur.

lftp est un client FTP qui offre la possibilité de réaliser des miroirs. L’option -e permet d’exécuter une commande FTP dès que la connexion est établie. Dans notre cas, nous "aspirons" (mirror) le site web puis nous quittons (quit) l’utilitaire.

Vous pouvez maintenant tester le bon fonctionnement de votre script :


./mirror.sh

Automatiser les tâches

Cela passe évidemment par le service cron. Vous pouvez vous aider de cet article ou bien utiliser l’excellent Webmin.

Conclusion

J’espère vous avoir donné envie de sauvegarder vos données plus souvent ;-)

Si vous avez des commentaires ou vous constatez des omissions, n’hésitez pas à me contacter.


23/03/2007

Notes

[1] Si l’authentification en utilisant le fichier .htaccess ne fonctionne pas, vous pouvez utiliser la méthode suivante :
Créer un fichier authentification.php :


<?php
//Authentification *************************************************************
if (!isset ($_SERVER ['PHP_AUTH_USER'])) {
        header('WWW-Authenticate: Basic realm="Cette page nécessite un mot de passe"');
        header('HTTP/1.0 401 Unauthorized');
        Print " Vous n'êtes pas autorisé à acceder à cette page !";
        exit;
        } else {
        if($_SERVER['PHP_AUTH_USER']=="login" and $_SERVER['PHP_AUTH_PW']=="password") {
                // si mdp ok
                } else {
                //si mauvais mot de passe
                Print " Vous n'êtes pas autorisé à acceder à cette page !";
                exit;
                }
        }
// Fin authentification *******************************************************
?>

Il faudra aussi modifier le fichier run_dump.php :


<?php
include ("authentification.php");
include ("dump_mysql.php");
include ("connexion.php");
backupDatabase($link,"databasename",true,true,'INSERT');
?>

[2] Chez certains hébergeurs, le mot de passe doit être enregistré en clair

Répondre à cet article


Suivre la vie du site | Valid HTML 4.01! | Valid CSS! | Plan du site | Espace privé | SPIP