đ§ 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.