Sauvegarde et restauration
Introduction
La sauvegarde et la restauration font référence aux technologies et pratiques permettant de réaliser des copies périodiques de données et d'applications sur un périphérique secondaire distinct, puis d'utiliser ces copies pour récupérer les données et les applications, ainsi que les opérations commerciales dont elles dépendent.
La sauvegarde et la restauration sont utilisées si les données et les applications d'origine sont perdues ou endommagées en raison d'une panne de courant, d'une cyberattaque, d'une erreur humaine, d'une catastrophe ou de tout autre événement imprévu.
Sous PostgreSQL
Sous PostgreSQL par défaut il existe 3 type de sauvegarde.
- Sauvegarde de type SQL (Dump)
- Sauvegarde au niveau du système de fichier
- Sauvegarde en archivage continue
Sauvegarde
La sauvegarde SQL (également appelé Dump) se réalise avec le programme founit en standard pg_dump.
Restauration
la restauration de cette sauvegarde se fera avec le programme pg_restore
pg_dump – Sauvegarde de bases PostgreSQL
Description
pg_dump est un outil en ligne de commande qui permet de sauvegarder une base de données PostgreSQL.
Avantages :
- Ne bloque pas les autres connexions.
- Plusieurs formats de sortie possibles.
- Permet de sauvegarder tout ou partie d’une base.
Formats de sorties
| Format | Description | Extension |
|---|---|---|
| SQL | Script SQL lisible et portable. | .sql |
| Custom | Format binaire optimisé pour pg_restore. | .dump |
| Directory | Un fichier par table, idéal pour les grosses BDD. | /dir/ |
| Tar | Format binaire compressé, compatible avec tar. | .tar |
Options courantes
| Option | Description |
|---|---|
| -U utilisateur | Nom de l’utilisateur PostgreSQL |
| -h hôte | Adresse du serveur PostgreSQL |
| -p port | Port de connexion (par défaut : 5432) |
| -d base | Nom de la base à sauvegarder |
| -F format | Format de sortie (p, c, d, t) |
| -f fichier | Fichier de sortie |
| -W | Demande le mot de passe |
| --clean | Nettoie les objets avant recréation |
| --if-exists | Utilise IF EXISTS pour éviter les erreurs |
Exemples d’utilisation
Sauvegarde complète en SQL
pg_dump -U mon_user -h localhost -p 5432 -d ma_base -F p -f sauvegarde.sqlSauvegarde en format custom (binaire)
pg_dump -U mon_user -d ma_base -F c -f sauvegarde.dumpSauvegarde en format directory
pg_dump -U mon_user -d ma_base -F d -f sauvegarde_dir/Sauvegarde avec compression
pg_dump -U mon_user -d ma_base -F c -f - | gzip > sauvegarde.dump.gzSauvegarde d’un schéma spécifique
pg_dump -U mon_user -d ma_base -n mon_schema -f schema.sqlSauvegarde des données uniquement
pg_dump -U mon_user -d ma_base -a -f données.sqlpg_restore – Restauration de bases PostgreSQL
Description
pg_restore permet de restaurer une base de données PostgreSQL à partir d’un fichier créé par pg_dump (surtout en formats custom, directory ou tar).
Avantages :
- Restauration sélective (tables, schémas, etc.).
- Contrôle fin sur les options de restauration.
- Optimisé pour les gros volumes.
Formats supportés
| Format | Description |
|---|---|
| Custom | Format binaire optimisé pour pg_restore |
| Directory | Un fichier par table, idéal pour les grosses BDD |
| Tar | Format binaire compressé, compatible avec tar |
WARNING
Ne fonctionne pas avec les sauvegardes en format SQL pur (.sql)
utiliser la commande psql dans ce cas
Options courantes
| Option | Description |
|---|---|
| -U utilisateur | Nom de l’utilisateur PostgreSQL |
| -h hôte | Adresse du serveur PostgreSQL |
| -p port | Port de connexion (par défaut : 5432) |
| -d base | Base cible pour la restauration |
| -F format | Format de la sauvegarde (c, d, t) |
| -j nombre | Nombre de jobs parallèles (accélère la restauration) |
| --clean | Nettoie les objets avant recréation |
| --if-exists | Utilise IF EXISTS pour éviter les erreurs |
| --no-owner | Ignore les propriétaires des objets |
| --no-privileges | Ne restaure pas les permissions |
| -v | Mode verbeux |
| -l | Liste le contenu de la sauvegarde |
Exemples d’utilisation
Restauration complète (format custom)
pg_restore -U mon_user -d ma_base -F c sauvegarde.dumpRestauration avec jobs parallèles (4 jobs)
pg_restore -U mon_user -d ma_base -j 4 -F c sauvegarde.dumpRestauration sélective (une seule table)
pg_restore -U mon_user -d ma_base -t ma_table -F c sauvegarde.dumpRestauration en mode "clean" (nettoyage avant)
pg_restore -U mon_user -d ma_base --clean --if-exists -F c sauvegarde.dumpLister le contenu d’une sauvegarde
pg_restore -l -F c sauvegarde.dumpRestauration depuis un format directory
pg_restore -U mon_user -d ma_base -F d sauvegarde_dir/Depuis un script SQL
psql -U mon_user -d ma_base -f sauvegarde.sqlWARNING
Dans cet exemple on utilise psql au lieu de pg_restore
pgBackRest – Sauvegarde et Restauration PostgreSQL
Description
pgBackRest est un outil open source conçu pour gérer les sauvegardes fiables, performantes et automatisées des bases de données PostgreSQL.
Avantages :
- Sauvegardes incrémentielles et différentielles.
- Compression et chiffrement natifs.
- Restauration rapide et flexible (PITR, tablespaces, etc.).
- Intégration facile avec les environnements de production.
- Support des clusters et réplications.
Concepts clés
| Concept | Description |
|---|---|
| Full Backup | Sauvegarde complète de la base |
| Incremental Backup | Sauvegarde uniquement les changements depuis la dernière sauvegarde |
| Differential Backup | Sauvegarde les changements depuis la dernière sauvegarde complète |
| PITR | Restauration à un point précis dans le temps (Point-In-Time Recovery) |
| Stanza | Configuration logique d’une base ou d’un cluster à sauvegarder |
| Repository | Emplacement de stockage des sauvegardes (local, S3, SFTP, etc.) |
Installation
Sur Debian/Ubuntu
sudo apt-get install pgbackrestSur RHEL/CentOS
sudo yum install pgbackrestConfiguration minimale
[global]
repo1-path=/var/lib/pgbackrest
repo1-retention-full=2
log-level-console=info
[ma_stanza]
pg1-path=/var/lib/postgresql/17/mainCommandes de base
Initialiser une stanza
pgbackrest --stanza=ma_stanza stanza-createSauvegarde complète
pgbackrest --stanza=ma_stanza --type=full backupSauvegarde incrémentielle
pgbackrest --stanza=ma_stanza --type=incr backupVérifier l’état des sauvegardes
pgbackrest infoRestauration complète
pgbackrest --stanza=ma_stanza restoreRestauration PITR (Point-In-Time Recovery)
pgbackrest --stanza=ma_stanza --type=time --target="2025-09-13 12:00:00+00" restoreExemples avancés
Sauvegarde avec compression et chiffrement
[global]
repo1-cipher-type=aes-256-cbc
repo1-cipher-pass=mon_mot_de_passe
compress-level=3Sauvegarde vers un repository distant (S3)
[global]
repo1-type=s3
repo1-s3-bucket=mon-bucket-pgbackrest
repo1-s3-endpoint=s3.eu-west-3.amazonaws.com
repo1-s3-region=eu-west-3
repo1-s3-key=ma_clé
repo1-s3-key-secret=ma_clé_secrèteRestauration vers un nouvel emplacement
pgbackrest --stanza=ma_stanza --pg1-path=/nouveau/chemin/data restore