Objectif : sauvegarder les données de l’ensemble du site (configuration, et base de données) de manière hebdomadaire sur le serveur et transférer la backup sur le disque dur externe du raspberry qui me tient lieu de centre de stockage.
Sommaire
Sauvegarde automatique sur le serveur
Utilisation de Backup-Manager : nous commençons par l’installer
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install backup-manager
Puis nous indiquons le répertoire de destination de la sauvegarde, j’ai laissé la valeur par défaut : /var/archives
Puis l’on indique les répertoires que l’on souhaite sauvegarder.
J’ai touché légèrement à la configuration de backup-manager, pour cela il faut éditer le fichier suivant : nano /etc/backup-manager.conf
- BM_REPOSITORY_USER pour que cela soit récupéré par mon utilisateur (sans sudo)
- BM_REPOSITORY_GROUP idem
- BM_ARCHIVE_METHOD avec la valeur
"tarball-incremental mysql"
- BM_MYSQL_DATABASES avec le nom de la base à exporter
pour lancer la sauvegarde, il faut lancer la commande suivante : sudo backup-manager
; le mieux est de programmer la sauvegarde de manière automatique avec le cron. Pour cela il faut se rendre de /etc/cron.daily
créer un fichier backup-manager et mettre à l’intérieur les lignes suivantes :
#!/bin/sh # cron script for backup-manager test -x /usr/sbin/backup-manager || exit 0 /usr/sbin/backup-manager
Cela aura pour conséquence de faire un sauvegarde journalière. Pour les tests, je l’ai laissé à cette endroit, à l’avenir je le déplacerai vers /etc/cron.weekly
Les problèmes rencontrés : j'ai eu un mysqldump: Got error: 1044: "Access denied for user 'root'@'localhost' to database 'information_schema'" when using LOCK TABLES. Il a donc fallu upgrader les droits de root sur la base de donnée, avec la commande suivante : mysql -u root -p et entrer : GRANT SELECT,LOCK TABLES ON DBNAME.* TO 'username'@'localhost'; Autre problème lors de la récupération de la sauvegarde, les fichiers incremental.bin sont à l'utilisateur root. J'ai donc fait un second script pour contourner ce problème.
#!/bin/sh cd /home/<path jusqu\'au backup>/backup for file in *.incremental.bin; do cp $file $file.txt chown <user>:<group> $file.txt done
Je l’ajoute également au cron, juste avant que ne se déclenche le rsync de la partie suivante.
Sources :
- https://www.skyminds.net/serveur-dedie-sauvegarde-automatique-des-fichiers-avec-backup-manager-sur-le-serveur-de-sauvegarde-ovh/
- https://memodugeek.info/sauvegarde-automatisees-des-donnees/
- https://tutox.fr/2017/12/14/en-root-pour-mariadb/
récupération de la sauvegarde
Connexion au serveur sans utiliser de mot de passe
Pour se connecter au serveur et récupérer les sauvegardes il faut pouvoir le faire de manière sécurisé et sans avoir à taper de mot de passe pour l’automatisation, la première étape est donc de mettre en place un couple de clef.
Sur le serveur local, chez moi le raspberry, je vais d’abord créer des clefs rsa privée et public avec la commande suivante :
ssh-keygen -t rsa -b 4096 -C <votreCommentaire>
Les clefs se trouve dans ~/.ssh
. Puis on envoie directement la clef sur le serveur distant : `
ssh-copy-id -i ~/.ssh/id_rsa.pub -p <port> <nom>@<ip>
Cela aura pour conséquence de copier la clef public sur le serveur.
Sources :
Copie d’un serveur à l’autre
# -a = tout de manière recursive
# --stats pour avoir un résumer
# --progress pour voir la progression
# --delete supprime les différences avant le transfert
# -e 'ssh -p <port>' permet d'utiliser un autre port que le 22
# source
# destination
rsync -a --stats --progress --delete -e 'ssh -p <port>' <nom>@<ip>:/home/<nom>/backup /media/<nom>/backup_wordpress
Suite à cette commande sur le serveur de destination, la copie commence. Ensuite il reste à automatiser la tâche. Dans le dossier /home/ je mets un script nommé backup.sh avec pour contenu :
#!/bin/bash echo '===========================================' echo '| Lancement du script de sauvegarde RSYNC |' echo '===========================================' echo '' # Date du jour & création du fichier de log date='date +"%c"' date_fichier_log=$(date +"%d.%m.%y") log='/home/<nom>/logs/rsync/rsync_'$date_fichier_log'.log' touch $log echo '===============================================================' >> $log echo -n 'Nouvelle sauvegarde : ' >> $log date >> $log echo '' >> $log function backup_home { rsync -a --stats --progress --delete -e 'ssh -p <port>' <nom>@<ip>:/home/<nom>/backup /media/<nom>/backup_wordpress | tee -a $log } echo -e '\n\tSauvegarde du dossier wordpress' echo -e '\t==========================\n' backup_home
Puis avec crontab -e
on édite le cron en rajoutant la tâche suivante :
0 1 * * * sh /home/<nom>/script/backup.sh.
La synchronisation se fera toutes les nuits.
Sources :
2 commentaires sur “[WordPress] sauvegarder son site en ligne sur un support extérieur”
Bonjour Fabien,
Merci pour tous ces articles. Juste une petite remrque concernant les 2 articles sur le poulallier connecté de janvier 2019, les images ne sont actuellement plus présentes. Dommage j’aurais aussi voulu l’appliquer à mon poulallier.
Bonjour Christophe,
Je suis en train de refondre complètement cette partie, dans quelques jours sortira un article qui reprendra tout, de l’installation, à la mise en production, avec des images (une migration de serveur qui c’est mal passé) à jours.
Cordialement,