pg_verifybackup — Vérifie l'intégrité d'une sauvegarde de base d'une instance PostgreSQL
pg_verifybackup
[option
...]
pg_verifybackup est utilisé pour contrôler
l'intégrité d'une sauvegarde d'une instance effectuée avec
pg_basebackup
, grâce au manifeste de sauvegarde
(backup_manifest
) généré par le serveur au moment de la
sauvegarde de base. La sauvegarde doit être stockée au format
« plain » : un format « tar :» peut être vérifié
après son extraction.
Notez que la validation effectuée par pg_verifybackup n'effectue pas toutes les vérifications effectuées par un serveur qui cherche à utiliser cette sauvegarde, et ne pourrait pas le faire. Même si vous utilisez cet outil, vous devez toujours procéder à des tests de restauration, vérifier que les bases de données résultantes fonctionnent comme prévu, et semblent contenir les bonnes données. Cependant, pg_verifybackup peut détecter de nombreux problèmes courants, dus au stockage ou une erreur de l'utilisateur.
La vérification de sauvegarde s'effectue en quatre étapes. Premièrement,
pg_verifybackup
lit le fichier
backup_manifest
. S'il n'existe pas, ne peut être lu, est
malformé, ou échoue au contrôle face à sa propre somme de contrôle interne,
pg_verifybackup
se termine avec une erreur fatale.
Deuxièmement, pg_verifybackup
tentera de vérifier que
les fichiers de données en place sur le disque à ce moment sont exactement
les mêmes que les fichiers que le serveur voulait envoyer, à quelques
exceptions près listées plus bas. Les fichiers en trop ou manquants seront
détectés, avec quelques exceptions. Cette étape ignore la présence ou la
modification de postgresql.auto.conf
,
standby.signal
, et recovery.signal
,
car il est prévisible que la procédure de sauvegarde les crée ou les
modifie. Il n'y aura pas non plus de plainte à propos d'un fichier
backup_manifest
dans le répertoire cible, ou quoi que ce
soit dans pg_wal
, bien que ces fichiers ne soient pas
listés dans le manifeste de sauvegarde. Seuls les fichiers sont
contrôlés ; la présence ou l'absence des répertoires n'est pas
vérifiée, ou indirectement : si un répertoire manque, tout fichier
qu'il aurait dû contenir sera forcément porté manquant.
Ensuite, pg_verifybackup
calcule les sommes de contrôle
de tous les fichiers, les compare aux valeurs du manifeste, et émet des
erreurs pour tous les fichiers où la somme de contrôle calculée ne
correspond pas à celle du manifeste. Cette étape n'est pas effectuée pour
les fichiers qui ont produit des erreurs à l'étape précédente, puisqu'il
est déjà connu qu'ils sont problématiques. Les fichiers ignorés à l'étape
précédente sont aussi ignorés à celle-ci.
Enfin, pg_verifybackup
va utiliser le manifeste pour
vérifier que les enregistrements des journaux de transaction nécessaires à
la restauration de la sauvegarde sont présents, et peuvent être lus et
analysés. Le backup_manifest
contient des informations
sur les enregistrements nécessaires des journaux.
pg_verifybackup
les utilise pour invoquer
pg_waldump
et analyser les journaux. L'option
--quiet
peut être utilisée pour que
pg_waldump
ne renvoie que les erreurs, sans générer
d'autre sortie. Bien qu'à ce niveau les vérifications soient suffisantes
pour détecter les problèmes évidents, comme des fichiers manquants ou une
somme de contrôle incohérente, elles ne sont pas assez complètes pour
détecter tous les problèmes possibles pouvant arriver lors d'une tentative
de restauration. Par exemple, un bug du serveur générant des journaux de
transaction avec les bonnes sommes de contrôle, mais spécifiant des
opérations absurdes, ne peut être détecté par cette méthode.
Notez que s'il y a des fichiers WAL en plus, non nécessaires pour restaurer
la sauvegarde, ils ne seront pas vérifiés par cet outil, bien qu'un appel
séparé à pg_waldump
permet de le faire. Notez aussi que
la vérification des journaux est spécifique à chaque version : vous
devez utiliser la version de pg_verifybackup
, et donc de
pg_waldump
, qui correspond à la sauvegarde à vérifier.
En revanche, les tests d'intégrité des fichiers devraient fonctionner avec
toutes les versions du serveur qui génèrent un fichier
backup_manifest
.
pg_verifybackup accepte les arguments suivants en ligne de commande :
-e
--exit-on-error
Sort dès qu'un problème avec la sauvegarde est détecté. Si cette
option n'est pas spécifiée, pg_verifybackup
va
continuer à vérifier la sauvegarde après la détection d'un problème,
et rapportera tous les problèmes en tant qu'erreurs.
-i path
--ignore=path
Ignore le fichier ou répertoire spécifié (à exprimer avec un chemin
relatif), lors de la comparaison des fichiers effectivement dans la
sauvegarde avec ceux listés dans le fichier
backup_manifest
. Si un répertoire est spécifié,
cette option affecte toute l'arborescence en-dessous. Les plaintes sur
des fichiers excédentaires ou manquants, des différences de taille, ou
des incohérences de sommes de contrôle, seront supprimées si le chemin
relatif correspond à celui spécifié. Cette option peut être répétée
plusieurs fois.
-m path
--manifest-path=path
Utiliser le fichier manifeste au chemin spécifié, plutôt que celui à la racine du répertoire de sauvegarde.
-n
--no-parse-wal
N'essaie pas d'analyser les journaux de transaction nécessaires à la restauration de la sauvegarde.
-P
--progress
Active le statut de progression. L'activer va afficher un rapport de progression lors de la vérification des sommes de contrôle.
This option cannot be used together with the option
--quiet
.
-q
--quiet
N'affiche rien si la sauvegarde est vérifiée avec succès.
-s
--skip-checksums
Ne vérifie pas les sommes de contrôle. La présence ou l'absence des fichiers et leur taille sera toujours contrôlée. C'est beaucoup plus rapide, car il n'y a pas besoin de lire les fichiers eux-mêmes.
-w path
--wal-directory=path
Essaie d'analyser les fichiers WAL stockés dans le répertoire indiqué,
plutôt que ceux dans pg_wal
. Ce peut être utile si
la sauvegarde est stockée dans un emplacement différent des archives
des journaux.
D'autres options sont disponibles :
-V
--version
Affiche la version de pg_verifybackup et sort.
-?
--help
Affiche l'aide sur les arguments en ligne de commande de pg_verifybackup, puis sort.
Pour créer une sauvegarde de base du serveur sur
mydbserver
, et vérifier son intégrité :
$
pg_basebackup -h mydbserver -D /usr/local/pgsql/data
$
pg_verifybackup /usr/local/pgsql/data
Pour créer une sauvegarde de base du serveur sur
mydbserver
, déplacer le manifeste hors du répertoire de
la sauvegarde, et vérifier l'intégrité de la sauvegarde :
$
pg_basebackup -h mydbserver -D /usr/local/pgsql/backup1234
$
mv /usr/local/pgsql/backup1234/backup_manifest /my/secure/location/backup_manifest.1234
$
pg_verifybackup -m /my/secure/location/backup_manifest.1234 /usr/local/pgsql/backup1234
Pour vérifier une sauvegarde, tout en ignorant un fichier ajouté manuellement au répertoire de sauvegarde, et aussi sauter la vérification des sommes de contrôle :
$
pg_basebackup -h mydbserver -D /usr/local/pgsql/data
$
edit /usr/local/pgsql/data/note.to.self
$
pg_verifybackup --ignore=note.to.self --skip-checksums /usr/local/pgsql/data