Faire ses sauvegardes avec rsync, mysqldump, cron, tar, date et scp

En voilà un long nom de billet. C'est la liste des outils que je vais présenter pour effectuer des sauvegardes. Je ne sais pas si c'est la meilleure manière de procéder (probablement que non), mais c'est une manière de procéder qui marche. Avec ce HOWTO, j'utiliserai les outils présentés dans le titre, je ferai un petit script qui sera exécuté une fois par jour. Je ne présenterai pas la manière de remettre vos données en cas de crash, ou changement de machine. Cela fera l'objet d'un futur billet, car à l'heure actuelle, je ne sais pas le faire, mais je vais devoir apprendre, car dans quelques mois, il y a une migration de ce serveur vers un autre beaucoup mieux. Enfin cela fera aussi l'objet d'un billet.

Rsync

Pour commencer ce petit HOWTO, l'installation de rsync est nécessaire. Je suppose que vous savez installer un paquet sur votre distribution préférée, je passerai cette étape. Rsync est un logiciel qui permet de copier récursivement des répertoires, tout en gardant la même hiérarchie, les mêmes droits, les mêmes propriétaires, groupes, les liens symboliques. On peut également l'utiliser à distance, mais à cause de l'utilisation de mysqldump et de la compression avec tar, je n'utiliserai pas la copie à distance. Un de ces autres avantages est que pour les utilisations régulières, il ne recopie pas tout, uniquement ce dont il y a besoin (donc la première utilisation est généralement la plus longue). Il supprime également les fichiers qui l'ont été entre deux utilisations. Son utilisation n'est pas très compliquée. Personnellement j'utilise cette commande :

rsync -rltgoD --del-ignore-errors --force /home /mnt/rsync/

Cette commande copiera /home récursivement dans /mnt/rsync. Voici les options (pour ceux qui ont un peu la flemme d'aller voir le man) :

-r visite récursive des répertoires
-l copie les liens symboliques comme liens symboliques
-t préserve les dates
-g préserve le groupe
-o préserve le propriétaire
-D préserve les périphériques (root uniquement)
--del efface au cours du transfert, pas avant
--ignore-errors efface même s'il y a eu des erreurs E/S
--force force la suppression de répertoires même non-vides

Pour plus d'informations, je vous invite à lire le man de rsync.

Mysqldump

Mysqldump est un outils permettant de sauvegarder l'ensemble des bases de données, comprenant les tables. Bien évidemment, ça ne marche que pour pour le SGBD mysql. J'utilise cette commande :

mysqldump --password=motdepass --add-drop-database --complete-insert --add-drop-table --extended-insert --hex-blob --all-databases --log-error=/mnt/mysqldump_errors/$DATE >/mnt/rsync/mysql_dump.sql

J'ai d'abord créé un répertoire /mnt/mysqldump_errors pour y stocker les fichiers d'erreurs.

$DATE correspond à la date d'aujourd'hui sous la forme : YY-MM-DD, où YY représente l'année, MM le mois, et DD le jour.

La liste des options :

--password=motdepasse le mot de passe de l'utilisateur. Personnellement, c'est mon mot de passe root (le compte mysql de l'utilisateur root). Utiliser cet utilisateur me permet de récupérer toutes les bases de données, de tous les utilisateurs.
--add-drop-database Permet de mettre un DROP DATABASE avant un CREATE DATABASE.
--complete-insert Permet d'avoir des INSERT complets ce qui permet d'avoir le nom des colonnes.
--add-drop-table Ajoute un DROP TABLE avant un CREATE TABLE.
--extended-insert Permet de faire un seul INSERT pour ajouter plusieurs valeurs.
--hex-blob Permet d'avoir les binaires sous forme hexadécimale.
--all-databases Copie l'intégralité des bases de données --log-error=/mnt/mysqldump_errors/$DATE Le fichier où seront stockées les erreurs.

Tar

Tar est un outil permettant de compresser des données. en un fichier unique.
J'utilise la commande suivante pour compresser le dossier rsync qui contient toutes les données que nous venons de rassembler au moyen de rsync et mysqldump :

tar cjf /mnt/rsync-$DATE.tar.gz /mnt/rsync

$DATE correspond toujours au même format de date que j'ai donné plus haut. Pour les options :

c créé une nouvelle archive
j traite  les  archives  avec bzip2.
f utilisera le nom du paramètre suivant, soit /mnt/rsync-$DATE.tar.gz dans notre cas.

Le script final

#!/bin/bash
DATE=`date +%y-%m-%d`
mysqldump --password=mmotdepasse --add-drop-database --complete-insert --add-drop-table --extended-insert --hex-blob --all-databases --log-error=/mnt/mysqldump_errors/$DATE > /mnt/rsync/mysql_dump.sql
rsync -rltgoD --del --ignore-errors --force /home /mnt/rsync/
rsync -rltgoD --del --ignore-errors --force /var/log /mnt/rsync/
rsync -rltgoD --del --ignore-errors --force /etc /mnt/rsync/
tar cjf /mnt/rsync-$DATE.tar.gz /mnt/rsync
mv /mnt/rsync-$DATE.tar.gz /mnt/sauvegarde

Pour reprendre :

  • On définit le Shebang, ici l'interpréteur de notre script sera donc bash.
  • On définit la variable DATE qui est utilisée à plusieurs endroits. Ce sera la date d'aujourd'hui, sous la forme YY-MM-DD comme expliqué plus haut.
  • On sauvegarde les bases de données dans /mnt/rsync
  • On sauvegarde les répertoires /home /var/log ainsi que /etc dans /etc/rsync
  • On compresse le tout
  • Finalement on déplace notre archive dans un dossier qui contiendra toutes notes archives répertoriées jour par jour

Enregistrez ce script dans un fichier. Faites un chmod +x dessus, et déplacez le dans /etc/cron.daily. Comme ça, il sera exécuté tous les jours.

Récupérer l'archive compressée

Maintenant que vous avez effectué vos sauvegardes, il est temps de les récupérer. Ce qui suit est à effectuer une autre machine, comme votre ordinateur personnel par exemple. Vous pouvez faire quelque chose de ce style :

#!/bin/bash
scp user@server:/mnt/sauvegarde/rsync-$DATE.tar.gz /mnt/sauvegarde

Enregistrez ce mini script dans un fichier, faites un chmod +x dessus (tout comme pour l'autre), et placer le dans /etc/cron.daily. Vérifiez juste dans votre /etc/crontab exécute le cron.daily après celui de votre serveur, autrement il n'y aura rien à récupérer.
Dernier détail pour que ça marche automatiquement, il faut générer une paire de clé RSA, pour que vous n'ayez pas à taper de mot de passe lors du scp. Pour cela, je vous invite à lire ce document.
Avec ça, vous devriez être capable de gérer correctement vos sauvegardes, et surtout qu'elles soient datées jour par jour. Comme ça en cas de pépin, vous pourrez remettre exactement ce que vous souhaitez. Attention, cela peut prendre beaucoup de place très vite par contre.

Vus : 2172
Publié par Pacodastre : 10