Sauvegardes avec UrBackup
Sommaire
Mise en œuvre concrète du PRA : sauvegarder un serveur web et un serveur de base de données, puis vérifier la restauration après un incident simulé.
1. Architecture
Un serveur UrBackup dédié, avec son propre volume de stockage, et un agent client installé sur chaque machine à sauvegarder. Le serveur de sauvegarde ne doit pas être joignable depuis les machines de production autrement que par le protocole de l'agent : s'il est administrable depuis un serveur compromis, il tombe avec lui.
2. Configurer le serveur
Interface web sur le port 55414.
- Paramètres > Général : définir le répertoire de stockage, par exemple
/media/BACKUP/urbackup. - Créer un utilisateur admin avec un mot de passe fort (l'interface est ouverte par défaut).
- Activer le chiffrement des sauvegardes.
- Définir les fenêtres de sauvegarde et les politiques de rétention (incrémentales fréquentes, complètes hebdomadaires).
3. Installer les clients
TF=$(mktemp) && wget "https://hndl.urbackup.org/Client/2.5.25/UrBackup%20Client%20Linux%202.5.25.sh" -O $TF && sudo sh $TF
Saisir l'adresse IP du serveur UrBackup pendant l'installation, puis déclarer les chemins à sauvegarder :
| Machine | Chemins | Pourquoi |
|---|---|---|
| Serveur web | /var/www/html, /etc/apache2, /etc/ssl | Contenu du site, configuration du service, certificats |
| Serveur BDD | /var/lib/mysql ou un dump SQL | Données applicatives |
Sauvegarder /var/lib/mysql à chaud, sur une base en cours d'écriture, produit souvent
une copie incohérente. On préfère un dump réalisé avant la sauvegarde de fichiers.
4. Script pré-sauvegarde
Créer /etc/urbackup/prefilebackup :
#!/bin/bash
# Exécuté avant chaque sauvegarde de fichiers par UrBackup
BACKUP_DIR="/var/backups/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
mysqldump -u backup_user -p'MotDePasseBackup' --all-databases \
--single-transaction --routines --triggers \
| gzip > "$BACKUP_DIR/dump_${DATE}.sql.gz"
# Ne garder que les 7 derniers dumps
find "$BACKUP_DIR" -name "dump_*.sql.gz" -mtime +7 -delete
exit 0
sudo chmod +x /etc/urbackup/prefilebackup
--single-transaction: dump cohérent sans verrouiller les tables InnoDB.--routines --triggers: embarque procédures stockées et déclencheurs, souvent oubliés.- Le mot de passe en clair dans le script est un pis-aller de TP : en production, on utilise un fichier
~/.my.cnfen droits600.
5. Compte MySQL dédié
CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'MotDePasseBackup';
GRANT SELECT, LOCK TABLES, SHOW VIEW ON *.* TO 'backup_user'@'localhost';
FLUSH PRIVILEGES;
| Privilège | Utilité pour la sauvegarde |
|---|---|
SELECT | Lire les données des tables |
LOCK TABLES | Figer les tables le temps d'obtenir un état cohérent |
SHOW VIEW | Exporter la définition des vues |
Pourquoi ne pas utiliser root ? Parce qu'un identifiant de sauvegarde se retrouve nécessairement
dans un script, sur disque. S'il fuite, un compte limité au SELECT permet au mieux de lire ;
root permettrait de modifier, supprimer, créer des comptes. C'est l'application directe du
moindre privilège.
6. Tester le PRA
Après avoir vérifié qu'une sauvegarde valide existe, simuler l'incident sur la VM web :
sudo rm -rf /var/www/html/*
Puis restaurer depuis l'interface UrBackup et chronométrer la durée totale, de la détection à la remise en service.
- Si la durée mesurée dépasse le RTO annoncé, c'est le RTO qui est faux, pas la mesure : il faut soit revoir l'objectif, soit investir (réplication, VM de secours préconfigurée, restauration automatisée).
- Vérifier aussi le RPO réel : quelle est la fraîcheur des données restaurées par rapport à l'instant de l'incident ?
- Un PRA non testé n'a aucune valeur : c'est un document, pas une capacité.