Sauvegarde et récupération des bases de données PostgreSQL : Un guide complet pour les utilisateurs d’AlexHost
Pourquoi la stratégie de sauvegarde PostgreSQL est plus importante que vous ne le pensez
La perte de données n’est pas un risque hypothétique — c’est une certitude opérationnelle que chaque administrateur de base de données affrontera à un moment donné. Les défaillances matérielles, les suppressions accidentelles, les transactions corrompues et les attaques par ransomware peuvent tous paralyser un environnement de production en quelques secondes. Pour les utilisateurs de PostgreSQL, avoir une stratégie de sauvegarde robuste, testée et automatisée est la différence entre un incident mineur et une défaillance commerciale catastrophique.
AlexHost Dedicated Servers fournissent une base idéale pour héberger et protéger les bases de données PostgreSQL. Avec un stockage NVMe SSD de classe entreprise offrant un débit d’E/S exceptionnel, un accès root complet pour un contrôle de configuration complet, et une protection DDoS intégrée, AlexHost vous offre les performances d’infrastructure et la posture de sécurité que les charges de travail de base de données sérieuses exigent.
Que vous exécutiez une plateforme e-commerce à fort trafic, une application SaaS, une installation WordPress soutenue par une base de données relationnelle, ou un système d’entreprise personnalisé, ce guide vous guide à travers chaque méthode majeure de sauvegarde et de récupération PostgreSQL — des simples vidages SQL à la récupération avancée à un moment donné (PITR) — tous optimisés pour les environnements de production.
1. Comprendre les options de sauvegarde PostgreSQL
PostgreSQL est livré avec plusieurs mécanismes de sauvegarde matures et bien documentés. Le choix du bon dépend de la taille de votre base de données, de vos objectifs de temps de récupération (RTO), de vos objectifs de point de récupération (RPO) et de votre tolérance à la complexité opérationnelle.
| Méthode | Idéale pour | Avantages | Inconvénients |
|---|---|---|---|
SQL Dump (pg_dump) | Petites à moyennes bases de données | Simple, portable, lisible par l’homme | Lent pour les très grandes BD |
| Custom Format Dump | Moyennes à grandes bases de données | Compressé, restauration parallèle | Binaire, nécessite pg_restore |
| File System Snapshot | Très grandes bases de données | Rapide, cohérent | Nécessite une expertise, la BD doit être au repos ou compatible avec les snapshots |
| PITR (WAL Archiving) | Systèmes de production critiques | Récupération granulaire à un point dans le temps | Configuration et maintenance complexes |
Comprendre ces compromis avant de commencer est essentiel. La plupart des environnements de production bénéficient de la combinaison d’au moins deux approches — par exemple, des dumps au format personnalisé chaque nuit aux côtés de l’archivage WAL continu pour une capacité de récupération granulaire.
2. Conditions préalables et exigences de privilèges
Avant d’exécuter toute opération de sauvegarde, confirmez que les conditions préalables suivantes sont en place :
Privilèges utilisateur :
- Vous devez être un superutilisateur PostgreSQL ou le propriétaire de la base de données cible pour effectuer une sauvegarde complète.
- Pour
pg_dumpall, les privilèges de superutilisateur sont obligatoires.
Vérifiez votre version PostgreSQL :
psql --versionVérifiez l’espace disque disponible avant la sauvegarde :
df -h /var/lib/postgresql/Assurez-vous que votre destination de sauvegarde dispose d’un espace libre suffisant — au minimum 1,5× la taille de la base de données en cours de sauvegarde pour tenir compte des fichiers temporaires et de la surcharge de compression.
Connectez-vous à votre serveur via SSH :
ssh root@your-server-ipSi vous utilisez un plan VPS Hosting, vous aurez un accès SSH complet et la possibilité d’installer, configurer et gérer PostgreSQL sans restriction.
3. Méthode 1 — SQL Dump avec pg_dump
L’utilitaire pg_dump est l’outil de sauvegarde PostgreSQL le plus couramment utilisé. Il produit un snapshot cohérent d’une seule base de données, même pendant que la base de données est activement utilisée. La sortie est un script SQL en texte brut qui peut être examiné, édité et rejoué sur n’importe quelle installation PostgreSQL compatible.
Étape 1 : Ouvrir un Terminal et Accéder à Votre Serveur
ssh root@your-alexhost-server-ipÉtape 2 : Exécuter la Commande pg_dump
pg_dump -U username -W -F p database_name > /backups/backup_file.sqlDétail des paramètres :
| Paramètre | Description |
|---|---|
-U username | L’utilisateur PostgreSQL effectuant la sauvegarde |
-W | Demander le mot de passe de manière interactive |
-F p | Format de sortie : p = texte SQL brut |
database_name | Le nom de la base de données à sauvegarder |
> /backups/backup_file.sql | Rediriger la sortie vers un fichier |
Exemple pratique :
pg_dump -U postgres -W -F p my_production_db > /backups/my_production_db_$(date +%Y%m%d_%H%M%S).sql> Conseil Pro : Ajouter un horodatage en utilisant $(date +%Y%m%d_%H%M%S) à votre nom de fichier de sauvegarde garantit que vous ne remplacerez jamais accidentellement une sauvegarde précédente et crée une archive naturellement chronologique.
Étape 3 : Vérifier le Fichier de Sauvegarde
ls -lh /backups/
head -50 /backups/my_production_db_*.sqlLe fichier doit commencer par des commentaires d’en-tête PostgreSQL et des déclarations SET, confirmant qu’une sauvegarde valide a été créée.
4. Méthode 2 — Sauvegarde de toutes les bases de données avec pg_dumpall
Lorsque vous devez sauvegarder chaque base de données dans une instance PostgreSQL — y compris les objets globaux tels que les rôles et les tablespaces — pg_dumpall est l’outil approprié.
pg_dumpall -U postgres -W > /backups/all_databases_$(date +%Y%m%d).sqlCette commande exporte :
- Toutes les bases de données
- Tous les rôles (utilisateurs et groupes)
- Tous les tablespaces
- Toute la configuration globale
Important : Le fichier de sortie de pg_dumpall peut être très volumineux sur les serveurs occupés. Assurez-vous que votre partition de sauvegarde dispose d’un espace adéquat et envisagez de compresser la sortie immédiatement :
pg_dumpall -U postgres | gzip > /backups/all_databases_$(date +%Y%m%d).sql.gz5. Méthode 3 — Sauvegardes de format personnalisé pour les grandes bases de données
Pour les bases de données de production dépassant quelques gigaoctets, le format personnalisé (-F c) est fortement recommandé par rapport aux vidages SQL simples. Les sauvegardes de format personnalisé sont :
- Compressées par défaut — réduisant considérablement les exigences de stockage
- Plus rapides à restaurer — supportant les opérations de restauration parallèles avec le drapeau
-j - Restaurables sélectivement — vous permettant de restaurer des tables ou des schémas individuels
Création d’une sauvegarde de format personnalisé
pg_dump -U postgres -W -F c my_production_db > /backups/my_production_db_$(date +%Y%m%d).dumpCréation d’une sauvegarde de format répertoire compressé (supporte le parallélisme)
pg_dump -U postgres -W -F d -j 4 -f /backups/my_production_db_dir my_production_db| Paramètre | Description |
|---|---|
-F d | Format répertoire — un fichier par table |
-j 4 | Utiliser 4 processus de travail parallèles |
-f /path/to/dir | Répertoire de sortie (ne doit pas exister encore) |
Cette approche réduit considérablement la durée de sauvegarde sur les serveurs multi-cœurs, ce qui la rend idéale pour les environnements de serveur dédié haute performance disponibles chez AlexHost.
6. Restauration à partir de vidages SQL
Restaurer une seule base de données à partir d’un vidage SQL brut
D’abord, assurez-vous que la base de données cible existe. Si ce n’est pas le cas, créez-la :
psql -U postgres -c "CREATE DATABASE my_restored_db;"Ensuite, restaurez :
psql -U postgres -d my_restored_db -f /backups/my_production_db_backup.sqlDétail des paramètres :
| Paramètre | Description |
|---|---|
-U postgres | Superutilisateur PostgreSQL |
-d my_restored_db | Base de données cible pour la restauration |
-f /path/to/file.sql | Chemin d’accès au fichier de vidage SQL |
Surveiller la progression de la restauration
Pour les fichiers SQL volumineux, vous pouvez surveiller la progression en utilisant pv :
pv /backups/my_production_db_backup.sql | psql -U postgres -d my_restored_db7. Restauration à partir de vidages au format personnalisé
Les vidages au format personnalisé nécessitent l’utilitaire pg_restore plutôt que psql.
Restauration de base
pg_restore -U postgres -d my_restored_db /backups/my_production_db.dumpRestauration et création automatique de la base de données
Utilisez l’indicateur -C pour instruire pg_restore de créer la base de données avant de la remplir :
pg_restore -U postgres -C -d postgres /backups/my_production_db.dumpRestauration parallèle pour une récupération plus rapide
pg_restore -U postgres -d my_restored_db -j 4 /backups/my_production_db_dir/L’utilisation de -j 4 avec une sauvegarde au format répertoire peut réduire le temps de restauration jusqu’à 75 % sur un serveur quad-core — un avantage significatif pour minimiser les temps d’arrêt lors de la récupération après sinistre.
Restaurer une table spécifique uniquement
pg_restore -U postgres -d my_restored_db -t orders /backups/my_production_db.dumpCette capacité granulaire est l’un des principaux avantages du format personnalisé par rapport aux vidages SQL simples.
8. Méthode 4 — Archivage continu et récupération à un moment précis (PITR)
PITR est la norme de référence pour les déploiements PostgreSQL critiques. Il vous permet de restaurer votre base de données à n’importe quel moment spécifique — pas seulement la dernière sauvegarde — en relisant les segments Write-Ahead Log (WAL) sur une sauvegarde de base. Ceci est essentiel pour les scénarios où vous devez récupérer d’une erreur logique (comme un DROP TABLE accidentel) qui s’est produit à un horodatage connu.
Étape 1 : Activer l’archivage WAL dans postgresql.conf
Localisez et modifiez votre fichier de configuration PostgreSQL :
nano /etc/postgresql/15/main/postgresql.confAjoutez ou modifiez les directives suivantes :
# Enable WAL archiving
wal_level = replica
archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/wal_archive/%f'Explication des paramètres :
| Paramètre | Valeur | Description |
|---|---|---|
wal_level | replica | Active les détails WAL suffisants pour l’archivage |
archive_mode | on | Active le processus d’archivage |
archive_command | 'cp %p /path/%f' | Commande shell pour copier les fichiers WAL vers l’archive |
Créez le répertoire d’archive et définissez les permissions correctes :
mkdir -p /var/lib/postgresql/wal_archive
chown postgres:postgres /var/lib/postgresql/wal_archive
chmod 700 /var/lib/postgresql/wal_archiveRedémarrez PostgreSQL pour appliquer les modifications :
systemctl restart postgresqlÉtape 2 : Effectuer une sauvegarde de base avec pg_basebackup
pg_basebackup -U postgres -D /backups/base_backup -Ft -z -P -Xs| Paramètre | Description |
|---|---|
-D /backups/base_backup | Répertoire de destination pour la sauvegarde de base |
-Ft | Format Tar en sortie |
-z | Compresser avec gzip |
-P | Afficher la progression |
-Xs | Diffuser WAL pendant la sauvegarde |
Étape 3 : Restaurer à un moment précis
Pour restaurer à partir d’une sauvegarde de base et des archives WAL :
- Arrêtez PostgreSQL :
systemctl stop postgresql- Effacez le répertoire de données existant :
rm -rf /var/lib/postgresql/15/main/*- Extrayez la sauvegarde de base :
tar -xzf /backups/base_backup/base.tar.gz -C /var/lib/postgresql/15/main/- Créez un
recovery.conf(PostgreSQL 11 et antérieures) ou configurezpostgresql.confet créez un fichierrecovery.signal(PostgreSQL 12+) :
# For PostgreSQL 12+
touch /var/lib/postgresql/15/main/recovery.signalAjoutez à postgresql.conf :
restore_command = 'cp /var/lib/postgresql/wal_archive/%f %p'
recovery_target_time = '2025-01-15 14:30:00'
recovery_target_action = 'promote'- Définissez la propriété correcte et démarrez PostgreSQL :
chown -R postgres:postgres /var/lib/postgresql/15/main/
systemctl start postgresqlPostgreSQL relira les segments WAL jusqu’à l’horodatage spécifié, puis passera à un état normal de lecture-écriture.
9. Automatiser les sauvegardes avec Cron
Les sauvegardes manuelles ne sont pas fiables. Automatiser votre calendrier de sauvegarde avec cron assure la cohérence et élimine le facteur d’erreur humaine.
Créer un script de sauvegarde
nano /usr/local/bin/pg_backup.sh#!/bin/bash
# PostgreSQL Automated Backup Script
BACKUP_DIR="/backups/postgresql"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
DB_USER="postgres"
DB_NAME="my_production_db"
RETENTION_DAYS=14
# Create backup directory if it doesn't exist
mkdir -p "$BACKUP_DIR"
# Perform the backup
pg_dump -U "$DB_USER" -F c "$DB_NAME" > "$BACKUP_DIR/${DB_NAME}_${TIMESTAMP}.dump"
# Remove backups older than retention period
find "$BACKUP_DIR" -name "*.dump" -mtime +"$RETENTION_DAYS" -delete
# Log completion
echo "[$TIMESTAMP] Backup of $DB_NAME completed successfully." >> /var/log/pg_backup.logRendre le script exécutable :
chmod +x /usr/local/bin/pg_backup.shPlanifier avec Cron
crontab -eAjoutez la ligne suivante pour exécuter une sauvegarde chaque nuit à 2:00 AM :
0 2 * * * /usr/local/bin/pg_backup.shPour les sauvegardes complètes hebdomadaires plus l’archivage WAL incrémental quotidien, combinez ceci avec la configuration PITR décrite dans la section précédente.
10. Sécurisation et stockage des sauvegardes hors site
Une sauvegarde stockée sur le même serveur que votre base de données de production n’est pas une vraie sauvegarde — c’est un point de défaillance unique. Mettez en œuvre les pratiques de sécurité et de stockage hors site suivantes :
Chiffrer les sauvegardes avant le transfert
gpg --symmetric --cipher-algo AES256 /backups/my_production_db.dumpTransférer les sauvegardes vers un emplacement distant avec rsync
rsync -avz --progress /backups/postgresql/ user@remote-backup-server:/remote/backups/postgresql/Utiliser pg_dump avec SSH Pipe pour une sauvegarde distante directe
pg_dump -U postgres my_production_db | gzip | ssh user@remote-server "cat > /backups/my_production_db_$(date +%Y%m%d).sql.gz"Règles de pare-feu pour PostgreSQL (UFW)
Limitez l’accès au port PostgreSQL aux adresses IP de confiance uniquement :
ufw allow from 192.168.1.0/24 to any port 5432
ufw deny 5432
ufw enablePour les équipes gérant plusieurs projets sur différents niveaux d’hébergement, les plans AlexHost Shared Web Hosting supportent également des outils de gestion de base de données qui peuvent compléter vos flux de travail de sauvegarde pour les projets plus petits.
11. Résumé des meilleures pratiques
La mise en œuvre correcte des sauvegardes PostgreSQL nécessite de la discipline et une approche en couches. Suivez ces meilleures pratiques pour assurer que vos données sont toujours protégées :
| Pratique | Recommandation |
|---|---|
| Fréquence de sauvegarde | Au minimum quotidienne ; horaire pour les bases de données à transactions élevées |
| Formats de sauvegarde | Utilisez le format personnalisé (-F c) pour les bases de données > 1 GB |
| Politique de rétention | Conservez 14 sauvegardes quotidiennes, 4 hebdomadaires et 3 mensuelles |
| Vérification | Restaurez dans un environnement de test mensuellement pour valider l’intégrité |
| Chiffrement | Chiffrez toujours les sauvegardes avant le transfert hors site |
| Stockage hors site | Maintenez les sauvegardes dans au moins un emplacement géographiquement séparé |
| Surveillance | Alertez sur les défaillances des tâches de sauvegarde par e-mail ou système de surveillance |
| PITR pour la production | Activez l’archivage WAL sur toutes les bases de données critiques |
| Documentation | Maintenez un runbook écrit pour les procédures de restauration |
> Rappel critique : Une sauvegarde qui n’a jamais été testée n’est pas une sauvegarde — c’est une hypothèse. Planifiez des exercices de restauration réguliers et documentez les résultats.
Conclusion : Protégez vos données PostgreSQL en toute confiance sur AlexHost
PostgreSQL offre l’un des ensembles d’outils de sauvegarde et de récupération les plus complets de tout système de base de données open-source. De la simplicité de pg_dump pour les snapshots SQL rapides à la précision chirurgicale de PITR pour la récupération granulaire à un moment précis, vous avez tout ce dont vous avez besoin pour construire une stratégie de protection des données infaillible.
La clé est l’exécution : automatisez vos sauvegardes, vérifiez-les régulièrement, chiffrez-les avant le transfert et stockez-les hors site. Combiné avec la performance et la fiabilité des serveurs dédiés AlexHost — dotés de stockage NVMe, d’un accès root complet et d’une protection DDoS de niveau entreprise — vos bases de données PostgreSQL seront à la fois rapides et résilientes.
Pour les équipes qui ont besoin d’une infrastructure évolutive sans la surcharge de la gestion du matériel nu, l’hébergement VPS AlexHost offre une alternative flexible et rentable avec le même engagement envers la performance et la disponibilité. Et si vous avez besoin de sécuriser vos applications web basées sur une base de données de bout en bout, l’association de votre hébergement avec les certificats SSL AlexHost garantit une communication chiffrée entre votre couche application et vos utilisateurs.
Commencez à mettre en œuvre ces stratégies de sauvegarde dès aujourd’hui. Votre moi futur — face à un incident à 3 heures du matin avec une base de données de production corrompue — vous en remerciera.
sur tous les services d'hébergement