Prérequis : Pour utiliser la fonction d'envoi par mail de la sauvegarde SQL compressée, Mutt, le client de messagerie en ligne de commande doit être installé sur le serveur [1].

Voici le script (que vous pourrez adapter à votre convenance et à vos besoins) :

#!/bin/bash

HOME="<repertoire_personnel>" # exemple : /home/users/toto
DIR_BLOG="$HOME<chemin_vers_le blog>" # exemple : /public_html/dotclear
DIR_BACKUP="$HOME<chemin_vers_le_repertoire_de_sauvegardes>" # exemple : /backup

SQL_HOST="<votre_hôte_mysql>"
SQL_USER="<votre_nom_d_utilisateur_mysql>"
SQL_PASS="<votre_mot_de_passe_mysql>"
SQL_BASE="<votre_base_mysql>"

CURRENTDATE=$(date +%Y%m%d)

MAIL_TO="<votre_adresse_email>"
MAIL_SUBJECT="[$CURRENTDATE] Sauvegarde SQL"
MAIL_MESSAGE="En pièce jointe la base de données en date du $CURRENTDATE"

DBDUMP_FILENAME="sql$CURRENTDATE.sql"

echo "Export de la base de données..."
touch $DIR_BACKUP/$DBDUMP_FILENAME
mysqldump -h $SQL_HOST -u $SQL_USER --password=$SQL_PASS $SQL_BASE > $DIR_BACKUP/$DBDUMP_FILENAME

echo "Compression de l'export..."
tar czf $DIR_BACKUP/$DBDUMP_FILENAME.tar.gz $DIR_BACKUP/$DBDUMP_FILENAME

echo "Création de l'achive globale..."
tar czf $DIR_BACKUP/puc$CURRENTDATE.tar.gz $DIR_BLOG $DIR_BACKUP/$DBDUMP_FILENAME.tar.gz

echo "Envoi de la sauvegarde MySQL par email à $MAIL_BACKUP..."
echo $MAIL_MESSAGE | mutt -s $MAIL_SUBJECT -a $DIR_BACKUP/$DBDUMP_FILENAME.tar.gz $MAIL_TO

echo "Suppression des fichiers tempporaires..."
rm -f $DIR_BACKUP/$DBDUMP_FILENAME
rm -f $DIR_BACKUP/$DBDUMP_FILENAME.tar.gz

echo "Sauvegarde effectuée dans $DIR_BACKUP/puc$CURRENTDATE.tar.gz"

Personnellement, j'ai stocké ce script dans un dossier bin à la racine de mon répertoire personnel et l'ai nommé backup.sh et lui ai attribué les droits d'utilisation pour l'utilisateur courant (moi) :

$ chmod u+x ~/bin/backup.sh

On peut tester le script en l'executant :

$ ~/bin/backup.sh

Il est également possible de plannifier l'execution de ce script à intervalle régulière ; par exemple tous les dimanches à 23h00. Pour cela, il faut éditer notre fichier crontab :

$ crontab -e

Dans l'éditeur (généralement, Vi), ajoutez cette ligne [2] :

0 23 * * 0       ~/bin/backup_puc.sh

Vous noterez que le script est assez brut de décoffrage, notamment en ce qui concerne la gestion d'erreurs (absente). N'hésitez pas à proposer vos suggestions en commentaire :)

Notes

[1] Si vous connaissez un moyen d'envoyer une pièce jointe encodée en base64 via uuencode et la commande mail, vos lumières sont les bienvenues :)

[2] Pour plus d'info, la syntaxe cron est détaillée sur ce site.