Déploiement
Déploiement • Chapitre 13 : Maintenance et dépannage en production

Sauvegarde et restauration

La règle fondamentale du DevOps : une sauvegarde non testée n'est qu'une illusion. Appliquez la règle 3-2-1, automatisez les exports MySQL avec compression et chiffrement, et maîtrisez la procédure de restauration d'urgence en moins de 10 minutes.

📐
Règle 3-2-1

3 copies des données, 2 supports différents, 1 copie hors-site (Cloud distant S3/R2).

📦
mysqldump Automatisé

Export complet du schéma et des tables sans verrouiller les écritures (--single-transaction).

🔒
Chiffrement GPG

Chiffre les archives SQL avant transfert pour protéger la confidentialité des données personnelles.

⏱️
Test de Restauration

Exercice trimestriel obligatoire de restauration sur un serveur vierge pour mesurer le RTO.

backup-and-restore.sh
# 1. Script de sauvegarde nocturne automatique (exécuté par cron à 2h du matin) :
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/var/backups/mysql"
mkdir -p $BACKUP_DIR

# Export sans coupure (--single-transaction) et compression instantanée
mysqldump -u root -p'VeryStrongSecretPass'   --single-transaction --quick --routines   learnweb_prod | gzip > "$BACKUP_DIR/backup_learnweb_$DATE.sql.gz"

# 2. Envoyer la sauvegarde vers un stockage Cloud distant (AWS S3 ou Cloudflare R2)
# aws s3 cp "$BACKUP_DIR/backup_learnweb_$DATE.sql.gz" s3://mon-bucket-backups/

# 3. Supprimer localement les sauvegardes vieilles de plus de 7 jours
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +7 -delete

# 4. PROCÉDURE DE RESTAURATION D'URGENCE :
$ gunzip < /var/backups/mysql/backup_learnweb_20261011_020000.sql.gz | mysql -u root -p learnweb_prod
# ✅ La base de données est restaurée dans son état exact de 2h du matin !

Guide Approfondi & Architecture Système

1. Pourquoi --single-transaction est Indispensable sur MySQL InnoDB ?

Si vous tapez un simple mysqldump sans option sur une base en production :
MySQL pose un verrou de lecture global (FLUSH TABLES WITH READ LOCK). Pendant les 5 minutes que dure l'export, aucun utilisateur ne peut acheter, s'inscrire ou modifier son profil !

Avec --single-transaction, MySQL utilise l'isolation transactionnelle MVCC : il effectue une photographie instantanée cohérente pendant que les utilisateurs continuent d'écrire normalement dans la base sans le moindre ralentissement.

2. Les Métriques RPO et RTO

Deux concepts indispensables pour votre SLA :
  • RPO (Recovery Point Objective) : Quantité maximale de données que vous acceptez de perdre en cas de crash (ex: 24h avec un backup quotidien, 5 minutes avec réplication en temps réel).
  • RTO (Recovery Time Objective) : Temps nécessaire pour remettre le service en ligne (ex: 15 minutes pour restaurer le dump SQL).

Tableau Récapitulatif : Stratégie de Sauvegarde Multi-Niveaux

Niveau de DonnéesFréquence de BackupEmplacement de StockageRétention
Base de données SQLQuotidienne (nuit à 2h)Local + Copie distante Cloud S3/R230 jours glissants
Fichiers téléversés (Uploads images)Synchronisation continue rsyncBucket S3 / Object StorageIllimitée avec versioning
Configuration Nginx / PM2À chaque modificationDépôt Git privé d'infrastructureHistorique infini
Snapshot complet de machine VPSHebdomadaireCentre de données distant de l'hébergeur4 semaines