Automatisez la sauvegarde récurrente de vos bases avec des tâches planifiées cron, appliquez la règle de rétention 3-2-1 et synchronisez vos archives sur un stockage cloud externe hors-site (AWS S3).
Exécution silencieuse chaque nuit aux heures de trafic minimal (ex: 2h du matin).
Copie automatique vers un bucket S3 ou serveur distant indépendant.
Purge des sauvegardes de plus de 30 jours pour ne pas saturer le disque dur.
Une sauvegarde n'est valide que si sa restauration a été testée avec succès.
#!/bin/bash
# /usr/local/bin/backup_database.sh
set -e
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/var/backups/mysql"
FILENAME="db_backup_${DATE}.sql.gz"
mkdir -p ${BACKUP_DIR}
# 1. Export compressé
mysqldump -u app_user -p'MonMotDePasseSecret' --single-transaction app_production | gzip > ${BACKUP_DIR}/${FILENAME}
# 2. Copier vers un bucket S3 cloud indépendant
# aws s3 cp ${BACKUP_DIR}/${FILENAME} s3://mon-bucket-backups/mysql/${FILENAME}
# 3. Purger les sauvegardes locales de plus de 14 jours
find ${BACKUP_DIR} -type f -name "db_backup_*.sql.gz" -mtime +14 -delete
echo "✅ Sauvegarde ${FILENAME} terminée avec succès."
# Configuration dans crontab (crontab -e) :
# 0 2 * * * /usr/local/bin/backup_database.sh >> /var/log/backup.log 2>&1backup.sql.gz fait 10 Mo. Programmez une simulation trimestrielle où vous restaurez le fichier sur une base de test pour confirmer que toutes les tables et données réapparaissent intactes. | Indicateur | Définition | Exemple Pratique |
|---|---|---|
| RPO (Recovery Point Objective) | Perte maximale de données tolérée dans le temps | RPO = 24h si sauvegarde quotidienne ; RPO = 1h si réplication en continu |
| RTO (Recovery Time Objective) | Temps maximal acceptable pour remettre le service en ligne | RTO = 30 minutes pour télécharger le dump et le réinjecter dans MySQL |
| Fréquence conseillée | Calendrier d'exécution | Quotidien pour bases moyennes, toutes les 6h pour e-commerce actif |