Outils pour backuper un site web

Written by Sebastien Lambot on . Posted in Articles techniques, Unix / Linux

La fin du monde n’a finalement pas eu lieu, mais ce n’est pas une raison pour ne pas backuper votre site internet! Et de manière automatisée en plus!

Sauvegarde de la base de données

Cette opération, ausis appelée « dump », permet de sauver la structure et le contenu d’une base de données dans un fichier. La solution manuelle consiste à se connecter sur l’interface de phpmyadmin et de lancer un export, mais ce qui nous intéresse ici, c’est l’automatisation de ce process.

Plusieurs solutions existent sur le marché, à vous de choisir celle qui correspond le mieux à vos besoins:

Dans tous les cas, vérifiez le contenu de vos backups, autant pour les fichiers que pour le contenu du backup de la base de données.

Mysqldump

Sur Freebsd, mysqldump fait partie du client mysql. S’il n’est pas présent sur votre machine, installez-le.

La syntaxe pour effectuer un backup avec mysqldump est

mysqldump -u username -ppassword -h hostname db_name > mybackup.sql

et si vous voulez compresser le résultat et l’envoyer via ssh dans un fichier daté (n’oubliez pas les escape characters «  »si vous placez la commande dans un script shell)

mysqldump -u username -pyourpassword -h hostname db_name | gzip -c > | ssh user@sshserver 'cat > /tmp/$(date -u +%y%m%d)_backup.sql.gz'

Avoir le username et le password SQL en clair dans la commande n’est pas des plus sécurisé, il vaut mieux créer un fichier d’options .my.cnf contenant les lignes suivantes dans le profil de l’utilisateur qui lancera la commande

[client]
password=your_password

N’oubliez pas de restreindre les permissions sur le fichier

# chmod 600 .my.cnf

Il ne reste plus qu’à créer un cronjob pour exécuter automatiquement le script ou la commande.

phpmybackuppro

Très utile dans le cas où votre hébergeur ne vous donne aucun accès à la ligne de commande.
C’est un outil simple d’utilisation qui peut servir dans la plupart des cas.

Téléchargez le zip et dézippez-le dans un dossier de votre site web. Faites de même avec le language pack FR si vous préférez les interfaces en français (dézippez-le dans le dossier /language/).

Le fichier install.txt décrit toutes les étapes pour l’installer. Une fois que c’est fait, vous pouvez accéder à l’interface de configuration http://monserveur/phpmybackuppro/config.php et entrer les identifiants de votre base de données (qui seront aussi les login et mot de passe pour accéder à l’interface web par la suite)

phpmybackuppro_config2

 Dans l’onglet « Schedule backup », vous pouvez définir les paramètres de votre backup et le sauver sous la forme d’un fichier php. Puisque la ligne de commande n’est pas accessible, il faudra faire une query vers cette page à partir d’un cron job configuré sur une de vos machines qui lancera un wget (à installer) ou insérer un lien vers ce php dans l’une des pages de votre site.

Selon les développeurs du logiciel, le cron job devrait en principe ressembler à ceci si vous comptez effectuer un backup journalier:

0 0 * * * wget -q http://monserveurweb/phpMyBackupPro/monbackup.php 2>&1

Le paramètre « -q » active le mode quiet (silence).

N’étant pas arrivé à faire fonctionner le script ci-dessus, j’ai préféré développer une méthode plus personnalisée pour le déclenchement du backup.
En premier lieu, j’ai été dans le menu « configuration > extended configuration » pour cocher la case « disable login ». Et pour que l’accès soit quand même sécurisé, j’ai créé les fichiers .htaccess et .htpasswd dans le directory FTP de phpmybackuppro:

Afficher: .htaccess

Pour générer le .htpasswd, utilisez la commande ci-dessous et n’hésitez pas à utiliser un mot de passe complexe pour mieux vous protéger des attaques par brute-force


# htpasswd -c ./.htpasswd myusername
> enter password:

Une fois que vous avez uploadé les fichiers sur le FTP, il ne reste plus qu’à créer le cronjob qui appelera la commande suivante:


wget -O ./todelete --user='myusername' --password='mypassword' --post-data='db[]=my_db_name&tables=on&data=on&drop=on&zip=gzip' 'http://monserveurweb/phpmybackuppro/backup.php'

Mysqldumper

Plus complet que phpmybackuppro, ses options permettent un règlage plus fin.

Pour l’installer, téléchargez le fichier zip sur le site de mysqldumper et dézippez-le sur votre emplacement d’hébergement dans un sous-dossier (par exemple: mysqldumper). Allez ensuite à l’adresse http://monsite.be/mysqldumper . A partir de là, vous serez guidés pour configurer l’accès au serveur de base de donnée.

A l’écran d’accueil, vous aurez même la possibilité de créeer un .htaccess pour protéger tout le sous-site par mot de passe.

mysqldumper

La suite de la configuration est très intuitive. Avant d’aller dans l’onglet « backup », faites un tour dans la partie « configuration » pour paufiner vos règlages et vérifiez que vous avez tous les prérequis.

Dans le menu de backup, vous pouvez choisir entre PHP et Perl, tout dépend de vos préférences et des modules Apache activés par votre hébergeur.

Si comme moi vous êtes chez un hébergeur qui n’autorise pas l’activation de Perl, vous pouvez exécuter le backup de votre DB en allant sur le lien http://monsite.be/mysqldumper/dump.php?config=mysqldumper à partir de n’importe quel browser supportant Javascript.
L’utilisation de Javascript dans mysqldumper est nécessaire pour éviter un timeout qui est atteint lors du backup de grosses bases de données. C’est là son point fort, mais aussi son seul point faible car il n’est alors plus possible d’utiliser wget pour déclencher à distance le script de backup. Wget est incapable d’interpréter les commandes Javascript. J’ai même essayer de lancer les requêtes via links, un navigateur internet en ligne de commande, mais les fichiers de backup n’étaient pas complets et pesaient 1.25ko alors que les autres backups avaient une taille de plus de 500ko.

Sauvegarde des données

En ce qui concerne le rapatriement des données du site FTP vers mon propre serveur, j’ai pensé en premier lieu au programme lftp, qui permet de transférer des fichiers d’un serveur FTP à un autre sans stockage local, à condition que le protocole FXP soit activé sur chacun. FXP n’étant pas des plus sécurisés, mon fournisseur a décidé de ne pas l’activer. J’ai donc mis la main à la pâte en créant mon premier script bash (soyez indulgents) qui se contente de synchroniser le contenu du serveur FTP avec un share Samba préalablement monté. J’ai même ajouté un logging, un contrôle d’erreur ainsi que la prise en compte du temps d’exécution:

Afficher: backupscript.sh

Explications et subtilités du code:

>> $LOGFILE: redirige la sortie de la commande vers le fichier de log
$(( )): effectue un calcul arithmétique
if [ $? -eq 0 ]: teste si l’exit code de la dernière commande est success (0) ou fail (1)
mount_smbfs … 2>>: monte le share samba selon les paramètres qui suivent, et redirige la sortie d’erreur (2) vers le fichier de log
exit 1: quitte le script avec un exit code de 1 (fail)
lftp: exécute le transfert des fichiers à partir du serveur FTP (plus d’infos dans le manpage via man lftp)

Vous l’aurez sûrement deviné, ce script est exécuté via un crontab. Bien sûr, rien ne vous empêche d’y ajouter une fonction qui fait un wget de la page d’exécution du backup MySQL, et d’avoir au final un unique script à activer dans le crontab.

Tags: ,

Trackback from your site.

Leave a comment

You must be logged in to post a comment.