Attention… Cet article a été écrit en février 2009 – Je ne l’ai aps encore réactualisé, juste transféré !
Quand on a un serveur dédié, ou même un poste sous Linux, on désire effectuer des sauvegardes, de manière régulière.
Je vous propose ici le script que j’utilise se mes serveurs dédiés, afin d’effectuer une sauvegarde journalière de mes sites, ainsi que de la base de donnée concernée. Le script permets de garder un historique de 7 jours des fichiers et des bases de données. Il ne s’agit pas d’un backup incrémentiel, mais bien total. Pourquoi? Par simplicité, pour éviter d’éventuels problèmes de perte de données intermédiaires, et parce que le backup que j’utilise (backup fournis avec mon dédié chez OVH) ne me permets que de faire du ftp => pas de rsync.
Le script effectue 2 sauvegardes. Tout d’abords il récupère un dump de la base de donnée (dump complète), puis il compresse chaque répertoire séparément. Finalement, il effectue un backup complet directement sur le ftp. Il faut prévoir suffisament de place sur le disque. D’autant que le script garde en local une copie des backups des 7 jours. Il est possible de les supprimer, pour cela, il suffit de faire un rm -rf du répertoire du jour (1-7) et de le recréer.
Néanmoins, je vous proposerais prochainement un script plus perfectionner, permettant de faire à la fois du rsync sur un serveur distant, et du ftp. Il s’agit d’un script sans grandes prétentions, mais qui permets d’avoir un backup fiable et simple à mettre en place!
N’oubliez pas d’adapter les informations de configuration en haut du script, de lui donner les droits d’exécution, et de le placer dans le crontab! Parmis les outils nécessaires au fonctionnement du script, pensez à installer ncftp (aptitude install ncftp), afin de disposer du programme ncftput.
#!/bin/bash
# Les constantes
ftp_login=”’
ftp_pwd=”
ftp_host=”
bdd_login=”
bdd_pwd=”
path_site=”
path_bkp=”
path_ftp=”
email_log=”
date=`date`
# erreurs de ncftput
declare -a CDERR
CDERR[1]=”Could not connect to remote host.”
CDERR[2]=”Could not connect to remote host – timed out.”
CDERR[3]=”Transfer failed.”
CDERR[4]=”Transfer failed – timed out.”
CDERR[5]=”Directory change failed.”
CDERR[6]=”Directory change failed – timed out.”
CDERR[7]=”Malformed URL.”
CDERR[8]=”Usage error.”
CDERR[9]=”Error in login configuration file.”
CDERR[10]=”Library initialization failed.”
CDERR[11]=”Session initialization failed.”
CDERR[142]=”Delai depasse pour la connexion.”
start=”file debut : $date — ”
id=`date +%u`
`mysqldump -u $bdd_login -p$bdd_pwd –all-database > $path_bkp/$id/mysqldump_$id.sql`
for site in `ls $path_site`
do
`rm -Rf $path_bkp/$id/$site”_”$id.tgz`
`tar czf $path_bkp/$id/$site”_”$id.tgz $path_site/$site`
done
`tar –create –gzip –file – $id | ncftpput -v -u $ftp_login -p $ftp_pwd -c $ftp_host $path_ftp/$id.tgz`
res_ftp=$?
if [ $res_ftp != "0" ]; then
`echo ${CDERR[$res_ftp]} | mailx -s “ERREUR LORS DU BACKUP DES FICHIERS !!!” $email_log`
fi
date=`date`
echo $start “fin: $date”
`ls -la $path_bkp/$id/ | mailx -s “Backup du $date” $email_log`