Bien des sites proposent des méthodes de backup avec l'utilitaire rsync mais trop souvent quand on cherche des documentations, la méthode de backup présentée est complexe puisqu'elle se fait de serveur à serveur. Personnellement je n'ai pas 36 PCs à la maison alors toutes ces méthodes ne peuvent me servir. Par contre j'ai deux disques dur sur mon serveur et ceci peut déjà servir pour palier la casse matériel d'un des disques. Vous pouvez aussi utiliser ce petit script si vous n'avez qu'un seul disque. Ceci vous protégera des mauvaises mapulations sur votre site ou votre base de données.

Voici le script que j'utilise :

  1. #!/bin/sh
  2. # date d'aujourd'hui
  3. TODAY=$(date +%Y%m%d)
  4. # date de la plus ancienne sauvegarde à supprimer
  5. LASTWEEK=$(date --date '1 week ago' +%Y%m%d)
  6. # dossier qui contiendra les sauvegardes
  7. SAUV=/home/backup/
  8. # dossier dans lequel est contenu le site
  9. SITE=dossier_du_site
  10. # adresse complete
  11. DIR=/home/${SITE}
  12. # fait une copie du dossier qui contient le site vers le dossier de sauvegarde
  13. rsync -a --delete ${DIR} ${SAUV}
  14. # compresse la copie de sauvegarde avec la date d'aujourd'hui
  15. tar -czf ${SAUV}${SITE}_${TODAY}.tar.gz ${SAUV}${SITE}
  16. # ajoute les droit de lecture necessaire
  17. chown user:user ${SAUV}${SITE}_${TODAY}.tar.gz
  18. chmod 400 ${SAUV}${SITE}_${TODAY}.tar.gz
  19. # supprime la sauvegarde du site datant d'une semaine
  20. # fonctionnement similaire à log rotate
  21. if [ -f ${SAUV}${SITE}_${LASTWEEK}.tar.gz ]
  22. then
  23. rm -f ${SAUV}${SITE}_${LASTWEEK}.tar.gz
  24. fi
  25. # login de l'utilisateur de la base de données
  26. DBU=user
  27. # mot de passe de l'utilisateur de la base de données
  28. DBP=password
  29. #base de donnée à sauvegarder
  30. #BASE=ma_base
  31. # option du backup (tout est sur une seule ligne)
  32. DBOPTIONS="--skip-opt --compatible=mysql40 --add-drop-table --add-locks
  33. --create-options --quick --lock-tables --set-charset --disable-keys -c"
  34. # backup (dump) de la base de donnée vers un fichier dans le dossier de sauvgarde
  35. mysqldump --user=${DBU} --password=${DBP} ${DBOPTIONS} ${BASE} > ${BASE}_${TODAY}.sql
  36. # compresse le fichier de sauvegarde des données
  37. gzip ${SAUV}${BASE}_${TODAY}.sql
  38. # donne les droits d'utilisation souhaités au fichier
  39. chown user:user ${SAUV}${BASE}_${TODAY}.sql.gz
  40. chmod 400 ${SAUV}${BASE}_${TODAY}.sql.gz
  41. # comme le dossier du site fait une rotation des sauvegarde sur une semaine.
  42. if [ -f ${SAUV}${BASE}_${LASTWEEK}.sql.gz ]
  43. then
  44. rm -f ${SAUV}${BASE}_${LASTWEEK}.sql.gz
  45. fi

Il ne vous reste plus qu'à enregistrer tout ceci dans un fichier et lui fournir les droits d'éxécution nécessaire.

Pour automatiser votre sauvegarde (c'est le but), ajoutez une ligne dans votre crontab pour lancer ce fichier tous les jours à 4H du matin par exemple.

Je pense que le script est assez bien commenté pour que vous puissiez le modifier vous même.

Pourquoi utiliser rsync plutot que l'utilitaire cp ? L'une ou l'autre méthode sont identique lors de la première sauvegarde mais différente pour les suivantes. Rsync lors des sauvegardes suivantes se basera sur la sauvegarde déjà faîte et n'appliquera que les modifications qui ont été produites sur le dossier source depuis, ce qui est beaucoup plus efficace.

J'aime cette méthode car j'ai une archive journalière pendant une semaine de mon site ce qui me permet de revenir plusieurs jours en arrière en cas de problème et j'ai un dossier complet du site qui n'est pas compressé. Ce qui permet de gagner beaucoup de temps quand on souhaite récupérer un seul fichier ou parfois un ligne de code dans un fichier. En ce qui concerne le dump mysql j'ai mis toute les options du raccourcis –opt sauf l'insertion étendue car je préfère avoir un insert par ligne dans une table. Et surtout l'avantage de pouvoir laisser un dump beaucoup plus lisible si vous souhaitez le parcourir pour récupérer un enregistrement précis. D'autant plus que j'ai eu des soucis avec les insertions étendues avec des tables très très longues mais c'est au détriments des performances. Si vous préférez une restauration performante changer les options par –opt.

Pour ceux qui souhaite restaurer rapidement leur sauvegarde je ferais à la demande le script de restauration de la dernière sauvegarde. Je vous conseille de télécharger vos sauvegardes sur un autre poste de temps en temps disons une fois par semaine pour garder vos sauvegardes à l'extérieur du serveur au cas ou votre serveur complet planterai.

Voilà faîtes en bon usage. Pour plus de détails les commentaires sont là.