J’avais déjà écrit un billet intitulé « Scripts de sauvegardes journalières et hebdomadaires » et un commentaire de Tetsumaki m’a donner à réfléchir.
Pourquoi je fais compliqué quand ont peut faire simple?
Soit, j’aime les scripts, et du coup il m’arrive de m’emballer et il fallait un disque de sauvegarde assez « gros »… Et j’ai décidé de regarder du côté de Rdiff-Backup. J’ai été séduit !
Je fais donc un nouveau billet sur le sujet de la sauvegarde sans pour autant supprimer l’autre…
Rdiff-Backup existe aussi pour Windows, je suppose qu’il doit exister une interface graphique , j’avoue ne pas avoir cherché puisque je m’en sert pour la sauvegarde d’un serveur, qui n’a pas d’interface graphique et de façon automatisée.
Bien entendu, une sauvegarde ne se fait pas sur une partition du disque dur, pas même sur un autre disque dur sur le même pc, mais sur un disque externe ou un pc distant…
Une modification à été apporté le 07/12/2023 concernant le message d’érreur :
/bin/sh: 1: root: not found
Lire la suite…
Sauvegarde avec Rdiff-Backup et MysqlDump.
Dans un premier temps j’ai défini les répertoires que je souhaitais sauvegarder, puis j’ai créé un fichier texte pour les regrouper.
Dans cet exemple, je décide de sauvegarder « /etc », « /home », « /var »
# nano /root/scripts/include-dir.txt
Copiez ce qu’il y a ci-dessous:
/etc
/home
/var
Maintenant nous allons créer le script dans la « cron.daily »
# nano /etc/cron.daily/backup
Copiez en adaptant ce qui suit.
#!/bin/bash
rdiff-backup --include-globbing-filelist /root/scripts/include-dir.txt --exclude '**' / /dir/de/sauvegarde/backup/
/dir/de/sauvegarde/backup/ est la destination de la sauvegarde, je vous laisse l’adapter selon vos choix.
Le rendre exécutable:
chmod +x /etc/cron.daily/backup
Je souhaite également sauvegarder des bases de données, on peut aussi le faire via Rdiff-backup, personnellement le préfère utiliser « mysqldump » (et oui, je suis un animal d’habitudes) :
# nano /etc/cron.daily/mysql-backup
Copiez en adaptant ce qui suit.
#!/bin/bash
mysqldump -u nextcloud -motdepasse nextcloud > /dir/de/sauvegarde/bd/nextcloud.sql
mysqldump -u dolibarr -motdepasse dolibarr > /dir/de/sauvegarde/bd/dolibarr.sql
mysqldump -u grr -motdepasse grr > /dir/de/sauvegarde/bd/grr.sql
Le rendre exécutable:
chmod +x /etc/cron.daily/mysql-backup
Pour que cela se fasse automatiquement et chaque jour, mettez le tout dans votre crontab:
# crontab -e
Copiez en adaptant ce qui suit.
PATH=/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/sh
MAILTO=""
# m h dom mon dow command
0 10 * * * root sh /etc/cron.daily/backup >/var/log/monbackup 2>&1 # JOB_BACKUP
0 15 * * * root sh /etc/cron.daily/mysql-backup >/var/log/monsav-bd 2>&1 # JOB_MYSQL-BACKUP
<Ajout du 07/12/2023>
J’ai le message d’erreur suivant : /bin/sh: 1: root: not found
Il arrive que root n’a pas de Shell et que l’user principal peut utiliser « sudo » sans confirmation de mot de passe, le cas par exemple de Raspberry, d’où un mot de passe fort pour cette user.
# nano /etc/cron.daily/backup
Copiez en adaptant ce qui suit.
#!/bin/bash
sudo rdiff-backup --include-globbing-filelist /root/scripts/include-dir.txt --exclude '**' / /dir/de/sauvegarde/backup/
# crontab -e
Copiez en adaptant ce qui suit.
PATH=/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/sh
MAILTO=""
# m h dom mon dow command
0 10 * * * /etc/cron.daily/backup >/var/log/monbackup 2>&1 # JOB_BACKUP
0 15 * * * /etc/cron.daily/mysql-backup >/var/log/monsav-bd 2>&1 # JOB_MYSQL-BACKUP
</Ajout du 07/12/2023>
Ceci-dit, il faut vérifier les sauvegardes, moi je simule une restauration dans un dossier de test, ici « test-sauv »
rdiff-backup --force -r now /dir/de/sauvegarde/backup/ /home/sima78/backup/rdiff-backup-data/test-sauv/
On peut voir les statistiques de la dernière sauvegarde
rdiff-backup-statistics /dir/de/sauvegarde/backup/
Ou la liste des incréments d’une sauvegarde
rdiff-backup -l /dir/de/sauvegarde/backup/
Vous pouvez aussi spécifier une durée de rétention des sauvegardes, dans le cas ci-dessous je supprime au-delà de 10 jours
rdiff-backup --remove-older-than 10D --force /dir/de/sauvegarde/backup/
Vous pouvez mettre D pour(Day), W pour(Week), M pour (Month) et Y pour (Year).
Donc voilà ma base, maintenant vous pouvez affiner comme par exemple avec mysqldump par lequel il est possible d’exporter plusieurs bases de données en une seule commande:
mysqldump --databases database1 database2 [...] > /home/sima78/my_databases.sql
Bref plein de possibilités il suffit de faire un « man » pour s’en rendre compte
man rdiff-backup
man mysqldump