26 Avr

If it wasn’t backed-up, then it wasn’t important

Voici un script sympa que j’utilise pour faire des backups de mon système. rien de bien original et j’avoue m’être pas mal inspiré d’exemples divers sur internet. Je crois qu’on ne rappellera jamais la nécessité de réaliser des backups. Un jour ou l’autre, vous pouvez faire une fausse manip, ou tout simplement les disques durs de votre serveur seront morts (même en raid 1 ça arrive !) ou encore votre base de données sera irrémédiablement corrompue. Ce jour là, vous serez plus qu’heureux d’avoir mis en place un système de backup régulier. Mais avant de commencer, quelques pré-requis :

  • le rendre exécutable
  • installer ncftp: apt-get install ncftp sous debian
  • installer xz: apt-get install xz-utils sous debian
  • renseigner dedans les mots de passe et les paramètres ftp/mysql etc.


Quelques Explications

Mon serveur est hébergé chez OVH qui fourni un espace ftp de backup de 100Go. Bien sûr, vous pouvez tout aussi bien disposer d’un espace nfs ou cifs (en beta chez ovh) auquel cas, vous aurez juste à faire un montage dans l’arborescence du serveur et copier dessus le fichier final.

Ce script est une version simplifiée. Par défaut il va réaliser

  • une copie des configs de votre serveur nginx, apache ainsi que de php et mysql
  • une copie des répertoires /home et /var/www où sont censé être vos serveurs web
  • un dump des bases de données mysql.

Si vous n’avez pas renseigné ces dernières à la ligne 19, il va récupérer leurs noms via un show databases à la ligne 41 mais c’est un peu crado car il va aussi faire un dump des « information_schema » et « performance schema ».
Normalement, si vous avez un serveur web classique, il devrait réaliser un backup de tout ce qui est vital. Maintenant, vous avez peut-être d’autres applicatifs spécifiques (bind, exim, postfix etc.), rajoutez ce dont vous avez besoin à la ligne 8! Dans le doute, mettez-y le /etc complet.

Crontab

Une fois que vous en êtes satisfait, rajoutez avec la commande suivante une ligne à la fin de votre crontab pour une exécution régulière:

Cette ligne exécute le script tous les jours à 4h30. Mais si vous souhaitez un backup toutes les heures remplacez « 30 4 » par « 00 * » mais faites attention à la l’espace libre sur votre serveur ftp. D’autant plus que ce script n’efface pas les anciennes versions.

Pour Information

Je préfère utiliser xz plutôt que gzip car il est plus performant en terme de compression de l’ordre de 30% au prix d’une consommation CPU plus importante.

Les copies de fichiers sont séparées des dumps des bdd mais un dernier tar concatène le tout dans un fichier unique.

Vous retrouverez tous les backups du serveur dans le répertoire backup_xxxxxx sur votre ftp et ils seront sous la forme backup_xxxxxx-2014-04-26-043001.tar, par exemple, où xxxxxx est le nom du serveur. C’est une organisation assez pratique, d’autant plus qu’un simple rm backup_xxxxxx-2014-03*.tar effacera tous les backups du mois de mars 2014.

En cas d’erreur, il enverra un mail à l’adresse spécifiée à la ligne 29 sous réserve qu’un mailer ait été configuré (exim par exemple).

Voilà, il marche très bien sur mon serveur Debian et il m’a déjà sauvé la vie une fois et m’a aussi servi lors de l’upgrade de mon serveur. Ce script est un peu brutal dans le sens où il sauvegarde aussi des données qui ne sont pas utiles, tout mon répertoire WordPress par exemple. Mais rien ne vous empêche d’être plus sélectif mais au risque d’oublier quelque chose… Bien évidemment, le plus sûr est de tester une restauration sur une VM, voir, encore mieux, d’écrire un script de restauration qui pourra réinstaller potentiellement votre serveur en quelques minutes. Dans tous les cas et comme d’habitude, il vient sans aucune garantie de ma part!

Le Script en Bash

Une pensée sur “If it wasn’t backed-up, then it wasn’t important

  1. petites questions de bleu ^^

    Cher SYS, nous avons aussi un espace ftp de backup de 100Go, cela marchera pareil qu OVH?
    Doit on nommer le fichier creé par qlq chose de spécial?
    ou doit on le mettre ? etc/ ou www/ ou ?
    peut on lancer le script quand on veut et si oui comment ?

    Apres tt çà, promiis, je me lance 😉

    maaarci encore mille fois mille

    • Mon serveur est chez SYS 🙂
      Ce script (avec le script de restauration) m’a servi chez Kimsufi (quand on avait encore un espace de backup), lors de la migration sur SYS, lorsque que j’ai tué le /var/lib avec un rm -R (oui ça arrive…). Il m’a aussi servi le jour où ma BDD wordpress a été corrompue par une action de maintenance …

      Perso, je laisse le script (backup.sh) créé dans le répertoire /root, et je place une ligne dans la crontab. D’ailleurs la ligne que je propose est celle que j’utilise.

      Tu peux lancer le script quand tu veux bien sûr avec un simple /root/backup.sh. D’ailleurs, c’est ce que je fais quand je sais que je m’apprête à faire quelque chose de dangereux.

      Au passage, le script utilise un serveur ftp. Mais tu peux très bien le bidouiller pour laisser une copie sur le disque en local ou sur un point de montage nfs ou cifs. D’ailleurs, je vais essayer dans un avenir plus ou moins proche de tester le montage d’un google drive sur son serveur. Cela permettrait d’avoir 15Go d’espace de backup gratuit.

      ++

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *