(modifié le 2 mars 2022 à 2:57)

Les sauvegardes, un sujet important. Il suffit d'avoir vécu une perte de données pour ne plus jamais les négliger.

bm-backup-ssh

Aujourd'hui je libère les sources du script que j'ai écrit pour sauvegarder Blogmotion. Voici comment sauvegarder votre blog.

Télécharger le script

Le script est disponible sur ce dépôt GitHub :

▶️ https://github.com/blogmotion/bm-backup-ssh

Vous y trouverez également quelques informations sur ce script.

Compatibilité

J'utilise ce script chez l'hébergeur Web4all (devenu YulPa) qui propose un accès SSH sur mon hébergement mutualisé. Renseignez-vous auprès de votre hébergeur, il est parfois nécessaire que des commandes (binaires) soit ajoutées.

Si vous avez un dédié alors ce script fonctionnera nativement.

Rôle du script

Le script génère :

  • une sauvegarde des données (data)
  • une sauvegarde MySQL (ou mariaDB)

Exemple avec un backup LIVE  :

  • 2015-05-10_backup-bm_data.tar.gz
  • 2015-05-15_backup-bm_mysql.gz

Avec un backup MENSUEL :

  • 2015-05-10_backup-bm_data__MENSUEL.tar.gz
  • 2015-05-15_backup-bm_mysql__MENSUEL.gz

Attention : le script supprime les sauvegardes précédentes avant d'en créer une nouvelle, pour des questions d'espace disque. En effet j'utilise ce script directement sur le serveur W4A, puis mon NAS Synology vient chercher ces sauvegardes et les suppriment du serveur Web4all (je ferai un autre billet pour ça).

Voici un exemple d'exécution en terminal :

bm-backup-ssh-demo

Le script affiche les deux sauvegardes produites ainsi que leur taille respective (oui la sauvegarde de BM pèse 258 mo grâce à la compression). Dans mon cas l'exécution dure environ 6 minutes, cela peut paraître long mais face aux 8 ans de contenu du blog, pas tant que ça.

Exécution

Au moment de l'exécution du script il faut choisir le type de sauvegarde : LIVE, HEBDO, MENSUEL. Ce type n'a aucune influence sur le contenu de la sauvegarde, elle sera identique dans les 3 modes. J'ai simplement ajouté ceci pour que les noms des fichiers soient plus parlants et utilisable avec CRON.

Exemple d'utilisation avec CRON, on lance un backup mensuel chaque premier jour du mois à 2h10 :

10 2 1 * * /home/xhark/backup-bm-ssh.sh MENSUEL

Variables

Vous devez modifier quelques variables dans le script.

Le nom de votre site qui apparaîtra dans les fichiers générés (sans espace!):

SITENAME="bm"

Les informations de connexion à la base de données :

usersql="mon_utilisateur"
mdpsql="xxxxxxxxx"
hostsql="localhost"
basesql="ma_base"

Le chemin du site (SRC_BACKUP) et le répertoire de destination des sauvegardes (DST_BACKUP) :

SRC_BACKUP="/var/www/monsite"
DST_BACKUP="/var/backup"

Attention à ne pas définir la destination dans un sous-répertoire de la source, sinon ça va boucler car le script va sauvegarder le contenu des sauvegardes qu'il est en train de produire.

Exclusion de répertoire (cache WordPress par exemple) :

 --exclude '${DST_BACKUP}' \
 --exclude '/var/www/html/wp-content/backup' \
 --exclude '/var/www/html/wp-content/cache' \
 --exclude '/var/www/html/un_repertoire_a_exclure'

Attention à la destination

Je vous conseille chaudement de définir un chemin de destination qui ne soit pas accessible via votre site, c'est à dire un cran au dessus du répertoire racine (www, htdocs ou html). Ce serait dommage que Google vienne indexer ça, ou que quelqu'un puisse téléchargement votre backup.

FAQ

  1. Est-ce normal d'avoir le message "rm: cannot remove" ? Oui, je ne l'ai volontairement pas masqué de façon à savoir si un ancien backup trainait ou non.
  2. Est-ce normal d'avoir le message "tar: Removing leading `/' from member names" ? Oui.
  3. C'est rose chez moi ! C'est volontaire, afin de distinguer l'exécution du script du reste du terminal, on peut ainsi voir de loin sur un écran que le script a fini.
  4. Comment interrompre le script ? ctrl+C ou ctrl+Z dans votre terminal
  5. J'ai interrompu le script, puis-je le relancer  ? Oui, sans problème.
  6. Cela ralentit l'accès à mon site, que faire ? Vous pouvez exécuter le script avec la commande nice en +19
  7. L'exécution du script prend beaucoup de temps. Pensez à exclure des répertoires s'ils sont trop volumineux.
  8. Comment récupérer un seul fichier ? Ouvrez l'archivez avec 7zip
  9. Puis-je modifier le script ? Oui, tant que vous respectez la licence Creative Commons BY-ND

Mise à jour 03/2022 : si vous obtenez cette erreur :

tar: The following options were used after non-optional arguments in archive create or update mode. These options are positional and affect only arguments that follow them. Please, rearrange them properly. tar: --exclude '/chemin/dossier' has no effect tar: Exiting with failure status due to previous errors

C'est parce que TAR a modifié l'ordre des arguments à partir de la v1.30. Pour connaîtra la version de TAR :

tar --versiontar (GNU tar) 1.26

➡ J'ai corrigé ce bug pour que ça fonctionne avec toutes les versions de TAR, assurez-vous de bien télécharger la dernière version de mon script.

Voilà, profitez-en bien et n'hésitez pas à l'améliorer avec des push ou en le forkant sur GitHub.

 

Auteur : Mr Xhark

Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter