Configurer des sauvegardes incrémentales avec PostgreSql - Introduction (Partie 1 )


🧭 Introduction
PostgreSQL est un système de gestion de bases de données robuste, fiable, et très utilisé dans le monde du développement. Il respecte les standards SQL, il est open source, et surtout, il garde précieusement nos données.
Mais même le meilleur outil ne peut rien contre une mauvaise manip, un bug, ou un crash serveur. C’est là qu’intervient notre meilleure alliée : la sauvegarde.
Dans ce guide, on va découvrir comment configurer des sauvegardes incrémentales sur PostgreSQL.
L’objectif ? Que tu sois développeur, administrateur, étudiant ou simplement curieux, tu pourras mettre en place un système de sauvegarde automatique, efficace et rassurant.
On va :
comprendre ce qu’est une sauvegarde (et une sauvegarde incrémentale 🧠),
découvrir les outils disponibles dans PostgreSQL 🔧,
configurer étape par étape notre système de sauvegarde incrémentale 🛠️,
automatiser le tout avec des scripts et
cron
⏰,et même tester la restauration (parce qu’une sauvegarde non testée, c’est juste une illusion de sécurité 😉).
Prêt ? Alors on commence par les bases. 👇
🧠 Rappel : qu’est-ce qu’une sauvegarde (et une sauvegarde incrémentale) ?
Avant de plonger dans la configuration, prenons une minute pour poser les bases, parce qu’une bonne compréhension, c’est déjà la moitié du boulot.
🔐 Une sauvegarde, c’est quoi ?
C’est tout simplement une copie de données (fichiers, bases, configurations, etc.) qu’on garde à part, dans un coin sûr, pour pouvoir les récupérer en cas de pépin : erreur humaine, panne, piratage, ou juste un “Oups, j’ai tout supprimé”.
🧱 Les 3 grands types de sauvegardes
Il existe plusieurs façons de sauvegarder ses données. Voici les trois principales :
Sauvegarde complète : on copie tous les fichiers à chaque fois. C’est simple, mais ça peut vite devenir lourd en espace disque.
Sauvegarde différentielle : on copie uniquement les fichiers qui ont changé depuis la dernière sauvegarde complète. C’est plus léger, mais au fil du temps, ça peut s’accumuler.
Sauvegarde incrémentale : on copie les fichiers qui ont changé depuis la dernière sauvegarde, quelle qu’elle soit (complète ou incrémentale). C’est la plus optimisée en taille et en temps, mais un peu plus technique à gérer.
📌 Pourquoi les sauvegardes incrémentales sont cool ?
Parce qu’elles permettent de gagner du temps et de l’espace, tout en conservant l’historique des modifications. Et la bonne nouvelle, c’est que PostgreSQL permet ce type de sauvegarde en s’appuyant sur un mécanisme intégré de journalisation anticipée (WAL : Write-Ahead Logging).
👉 C’est justement ce qu’on va exploiter dans ce guide.
🔍 Comment Postgres permet-il les sauvegardes incrémentales ?
Nous allons nous intéresser dans un premier temps aux possibilités de sauvegarde offertes par PostgreSQL, afin de comprendre les différents mécanismes disponibles avant de se plonger dans la configuration des sauvegardes incrémentales.
🧬 Les différents types de sauvegarde avec PostgreSQL
Postgresql offre trois possibilités 👇:
1. Sauvegarde complète
Elle consiste à copier l’intégralité de la base de données à un instant donné. Ce type de sauvegarde est un instantané de la base et permet de restaurer une base de données dans son état précis au moment de la sauvegarde. Cela peut être effectué avec des outils comme pg_basebackup
, ou manuellement en copiant les fichiers de données de PostgreSQL.
2. Sauvegarde logique (pg_dump)
Elle utilise l’outil pg_dump
, qui exporte les données de la base sous forme de script SQL. Il s’agit d’une forme de sauvegarde complète qui permet de récupérer la base de données sous un format indépendant de PostgreSQL. Cette méthode est souvent utilisée pour migrer des bases de données ou pour effectuer des sauvegardes spécifiques (par exemple, d’une table ou d’un schéma). Toutefois, elle a des limites pour les sauvegardes incrémentales, car elle n’inclut pas directement les journaux de transactions (WAL).
3. Sauvegarde incrémentale (basée sur les WAL)
La sauvegarde incrémentale, comme son nom l’indique, permet de ne sauvegarder que les modifications effectuées après une première sauvegarde complète. Cela repose sur l’archivage des fichiers WAL (Write-Ahead Log) générés par PostgreSQL. Ces fichiers contiennent un enregistrement de toutes les transactions qui ont été appliquées à la base de données. En utilisant les fichiers WAL, il est possible de restaurer la base de données à un moment précis, ce qui permet d’atteindre un objectif RPO (Recovery Point Objective) très bas, souvent à quelques minutes seulement. Il s’agit ici de minimiser la quantité de donnée qu’on est prêt à perdre après un incident.
🧪 Les sauvegardes incrémentales
PostgreSQL offre une fonctionnalité clé qui permet de réaliser des sauvegardes incrémentales : le Write-Ahead Logging (WAL).
Chaque opération d’écriture sur la base de données est journalisée dans des fichiers de log. Ces fichiers enregistrent les modifications de la base de données avant que celles-ci ne soient réellement appliquées, garantissant ainsi l'intégrité des données.
Ce mécanisme, appelé WAL, permet de restaurer l'état de la base de données à un moment précis, une technique connue sous le nom de Point In Time Recovery (PITR). Cela signifie qu'après une première sauvegarde complète, vous pouvez restaurer une base de données à n'importe quel instant en récupérant les fichiers WAL générés depuis cette sauvegarde.
C'est exactement ce que nous allons exploiter dans notre configuration avec Barman.
⚙️ Principe de fonctionnement du WAL
Lorsque l'archivage des WAL est activé dans PostgreSQL, il génère des fichiers dans un dossier spécifique (/var/lib/postgresql/{version}/main/pg_wal/
) à chaque opération d'écriture. Ces fichiers font l’objet d’une rotation dès qu’ils atteignent une taille de 16 Mo par défaut.
Chaque fois qu'un fichier WAL est modifié ou créé, PostgreSQL permet de définir une commande spécifique à exécuter. Cela permet de centrer l'archivage des fichiers WAL et de gérer plus facilement la récupération des données.
Barman va s’appuyer sur ces fichiers WAL pour faciliter la gestion des sauvegardes incrémentales et des restaurations à un moment précis.
🚀C'est quoi Barman ?
🍹Découverte de barman
Barman (Backup and Recovery Manager) est un outil écrit en Python qui facilite la gestion des sauvegardes et restaurations des bases de données PostgreSQL.
Ce gestionnaire de sauvegardes est spécialement conçu pour PostgreSQL et simplifie :
La planification et l’automatisation des sauvegardes.
La gestion des sauvegardes complètes et incrémentales.
La récupération Point-in-Time Recovery (PITR) en utilisant les fichiers WAL.
Il est particulièrement pratique pour gérer plusieurs serveurs PostgreSQL en centralisant les opérations de sauvegarde et de restauration en un seul endroit.
Ce sera l'outil que nous allons configurer et utiliser dans cet article.
🤔 Barman vs pg_dump
Avant d’aller plus loin, faisons une petite comparaison entre Barman et les outils classiques de sauvegarde PostgreSQL : pg_dump/pg_basebackup.
pg_dump / pg_basebackup : Ces outils permettent des sauvegardes complètes, où vous pouvez exporter l'état d'une base de données (sous forme de script SQL par exemple, avec des options pour une table, un schéma, ou toute la base). Cependant, pg_dump/pg_basebackup ne conviennent pas pour des restaurations rapides en cas de sinistre, car vous devez toujours restaurer à partir de l’heure précise de la sauvegarde.
Essayons nous à une petite expérience de pensée; vous faites régulièrement vos sauvegardes avec pg_dump par exemple à 3 heures du matin et vous avez un crash/incident à 18 heures. Vu que pg_dump récupère l'état de votre système à une heure bien précise (ici 3h), et qu’un incident survient à 18h, vous perdrez toutes les données ajoutées depuis la dernière sauvegarde. On parle bien de 15h de données, dans tous les scénarios, cette perte est inacceptable pour de nombreuses entreprises.
Barman : Contrairement à
pg_dump
, Barman opère au niveau physique de la base de données. Cela signifie qu'il prend des copies complètes et incrémentales de vos données, permettant de récupérer tout ce qui a changé depuis la dernière sauvegarde, sans risquer une perte importante de données. Ce système est particulièrement adapté pour des objectifs RPO (Recovery Point Objective) bas, réduisant ainsi la perte de données à quelques minutes seulement.
Bien sûr, cela nécessite un peu plus d’espace disque pour stocker les sauvegardes, mais le compromis en termes de sécurité et de récupération est largement justifié.
📦 Installation de barman
Avant de pouvoir utiliser Barman pour la gestion des sauvegardes incrémentales, il est nécessaire de s'assurer que les composants Postgresql sont bien installés. Pour les utilisateurs d’Ubuntu
ce tutoriel est excellent pour l’installation de PostgreSQL. Pour ceux avec CentOs/RHEL
vous pouvez suivre celui-ci.
Une fois PostgreSQL installé et pret à l’utilisation, nous reviendrons sur les configuration plus avancées nécessaire à notre sauvegarde. A présent passons maintenant à l’installation de Barman
a. Sur Ubuntu/Debian
Sur les distributions basées sur Debian comme Ubuntu, vous pouvez installer Barman directement depuis les dépôts officiels.
Installation depuis les depôts :
$ sudo apt update $ sudo apt install barman
Vérifier l'installation :
Une fois l'installation terminée, vérifiez que Barman est bien installé en exécutant la commande suivante :
$ barman --version
b. Sur CentOS/RHEL
Sur CentOS ou RHEL, vous devez d’abord ajouter le dépôt officiel de Barman avant de l’installer.
Ajouter le dépôt officiel Barman :
$ sudo yum install -y https://dl.enterprisedb.com/barman/barman-2.16.0-1.rhel7.x86_64.rpm
Mettre à jour les paquets système et installer barman:
$ sudo yum update $ sudo yum install barman
Vérifier l'installation :
$ barman --version
🧾 Conclusion
Dans cet article, nous avons exploré les concepts fondamentaux nécessaires à la mise en place de sauvegardes incrémentales sur PostgreSQL, en mettant l'accent sur le rôle essentiel des journaux de transactions (WAL) et le mécanisme de PITR. Nous avons également vu comment Barman, l'outil de gestion de sauvegarde et de restauration, s'intègre parfaitement dans ce processus.
L’objectif était de fournir une compréhension claire de ce qu'implique une sauvegarde incrémentale avec PostgreSQL avant de plonger dans la configuration technique elle-même. Ces bases vous permettent d’avoir une vue d’ensemble sur les enjeux et les outils à utiliser pour une gestion efficace des sauvegardes.
Dans la suite, nous entrerons dans le vif du sujet avec la configuration complète de Barman : de l’installation à l’activation des sauvegardes incrémentales, en passant par la gestion des restaurations point-in-time. Nous aborderons également les bonnes pratiques pour garantir la continuité et la fiabilité de vos sauvegardes.
Rendez-vous dans le prochain article pour découvrir comment configurer et automatiser vos sauvegardes de manière optimale.
Subscribe to my newsletter
Read articles from Trinité ZINSOU directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Trinité ZINSOU
Trinité ZINSOU
I'm a Software Engineer, with +5 years of professional experience, I specialize in building software focusing on quality , improving integration and deployment, creating product documentation. I'm working currently in Bénin using, Js/React, Python/Django, DevOps skills and others, this list is not exhaustive