;
Fév
17
2012

Le petit script de backup de Nono

[Edit du 26/05/2013 : J'ai mis le 'Nono's Backup" sur Github, à toute fin utile]

J'utilisais "historiquement" et surtout par manque de temps libre, la solution backup-manager jusqu'à il y a environs 2/3 semaines. Ca me permettait d'avoir une rotation des logs sur quelques jours, un backup automatique programmable vers un serveur FTP (qui est comprise dans l'offre OVH qui héberge m0le.net). Tout allait bien, jusqu'au jour ou les backup ne se faisait plus correctement...

Pour faire court

Ça a d'abord commencé par la non suppression en local des fichiers. Ca n'a pas loupé :

  • serveur rempli
  • pas mal de services qui foirent ...

Quand on garde cinq jours de backup, et que le serveur dois se prendre dans la tronche cinq fois la taille du disque (à peu de choses près), c'était à prévoir.

J'ai pu corriger (tant bien que mal) le tire, en supprimant quasi manuellement les dossiers non supprimés en local... Fastidieux !

La goutte d'eau, ce fut quand les backup ne s'envoyait pas sur le FTP, mais qu'ils étaient supprimés en local.

Le pompon : j'avais juste plus du tout de backup...

Après avoir cherché un peu la cause de pourquoi et du comment, je me suis quand même tourné vers ma propre solution de backup.

Alors forcément, c'est sans aucun doute loin d'être la meilleure solution, mais elle me convient parfaitement, et me permet de :

  • sauvegarder mes bases de données
  • sauvegarder mes dossiers à archiver
  • faire des exclusions dans mes dossiers de sauvegarde
  • supprimer les dossiers locaux de sauvegarde (inutile ?!?)
  • envoyer les sauvegardes sur un FTP distant.
  • garder toujours cinq jours de sauvegarde.
  • recevoir un rapport tous les jours par mail.

Le script Nonos_Backup_1.0

Vous avez besoin de :

  • mysqldump : pour faire le dump de la base de donnée ...
  • tar : pour créer des paquets pour un dossier donnée (ici, au format tar.bz2)
  • lftp : un outils en ligne de commande qui permet d’exécuter facilement des scripts vers les FTP (et bien d'autre, ce tools est vraiment génial je trouve !)

Sans plus attendre, je vous montre donc le Nonos_Backup_1.0 :

Au niveau du rapport, ca vous chie un truc a peu de chose près comme ca :

N'hésitez pas à me faire par de vos remarques et/ou améliorations, je me réserve juste le droit de les implémenter ... ou pas 🙂

11 Comments + Add Comment

  • rsync peut aussi bien servir

    • Nono

      Je n'ai pas dit le contraire 🙂
      J'ai découvert lftp, et j'ai vu qu'il était très simple de scripter des commandes avec, en plus de pouvoir se connecter facilement à un ftp.
      Avant ca, je trouvais un peu fastidieux, les méthodes pour simplement me connecter à un FTP et afficher la liste des dossiers/fichiers s'y trouvant.

      Disons que c'est une alternative.

  • Problème avec tes balises strongs !

    • Nono

      Tiens, oui, du coup, il changeait aussi mes > et < par leur valeurs html (> et < ) J'ai donc édité la chose, et virer les strong ... Il faudra un peu réfléchir et/ou comprendre le truc pour pouvoir l'utiliser ^^

  • Pour avoir rencontré plusieurs fois le problème sur différents scripts de backup, je te propose quelques améliorations qui pourront toujours servir :

    - Garder les N (keepday) derniers rapports, au cas où le mail ne soit pas envoyé (problème mail ou erreur lors de l'exécution du script).
    - Vérifier l'existence des dossiers avant/après création/suppression.
    - Récupérer le code de sortie des commandes tar (un simple echo $? par tar suffirait + mise en forme ou affichage uniquement si >0), l'utilisation de 2>/dev/null étant assez brutale (erreur lors du backup, espace disque local insuffisant...etc.).

    • Nono

      Merci du feedback Mumzi, si je trouve le temps, j'essayerais de sortir une v1.1 😉
      Autant les rapports, je n'y avait pas pensé, mais le test des dossiers, c’était par pur flemme 😀

      Quand au code de sortie de commande ... Je n'en voyait pas l’intérêt, maintenant oui (on a pas tous nagios ou un moyen de check l’état d'utilisation de ces disques sur son serveur...)

  • Si je ne m'abuse, il y a une coquille, ligne 66 : il manque un dollar devant un nom de variable (mysqldump -u root --password={sql_password})

    Par ailleurs, le 'echo " " >> {rapport}' est peut-être inutile ; s'il s'agit juste de sauter une ligne un simple 'echo >> $rapport' suffira plutôt que rajouter un espace seul sur sa ligne ; mais j'ai peut-être mal compris le but de ce echo.

    • Nono

      Effectivement, mon plugin (crayon) d'affichage de code, masquait le signe $ que j'ai dû doubler ...
      Comprend pas 🙂

      Concernant les echo, je sais que :
      echo >> file
      echo "" >> file
      echo " " >> file

      Sont identiques ... sur debian ! Je n'ai pas testé ailleurs et je me suis dit que c’était la façon la plus générale possible de l’écrire (pas qu'un lecteur quelconques squeeze les sauts de ligne, si il n'y a pas de caractère dedans) ...

      Cela dit, merci de ta vigilance 🙂

  • Bonjour,

    Merci pour ce script !
    Je rencontre un petit soucis, quand je lance le script j'obtiens cette erreur :
    mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: YES) when trying to connect

    Pour si je copie/colle la ligne en dehors du shell, elle fonctionne parfaitement en remplacement les variables .. que je l'execute en root ou avec le simple user de la machine. Je n'arrive pas à comprendre d'où cela vient ?

    Si quelqu'un à une idée je suis preneur, merci beaucoup !
    Thymotep

  • Salut bon travail..... possibilité de l'améliorer et de corriger le bugs

    merci

    • Nono

      J'ai mis à jour le github, le script affiché ici rencontre quelques soucis d'encodage (html).

Leave a comment