PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 07/06/2021 16:04:31

olivier2831
Membre

Resturation avec barman sur un autre hôte

Bonjour,

J'ai trois hôtes:
- target sous Debian Buster/PostgreSQL 11
- barman sous Debian Buster/Barman 2.6
- recover sous Debian Buster/PostgreSQL 11

Je souhaite vérifier que les sauvegardes de target faite avec barman peuvent être restaurées sur recover sans aucune perte en cas de perte totale et définitive de l'hôte target.

Comme avec [1], j'arrive à produire sur recover un fichier /var/lib/posgresql/11/main/recovery qui contient:
restore_command = 'cp barman_xlog/%f %p'
recovery_end_command = 'rm -fr barman_xlog'
recovery_target_time = '2021-05-31 12:43:38.157798+02:00'

Quand je lance service posgresql start, j'ai:
nterrompu ; dernier lancement connu à 2021-05-31 12:43:36 CEST
Jun  7 15:37:54 fcore5 postgresql@11-main[1115]: 2021-06-07 15:37:54.432 CEST [1121] LOG:  début de la restauration de l'archive à 2021-05-31 12:43:38.157798+02
Jun  7 15:37:54 fcore5 postgresql@11-main[1115]: 2021-06-07 15:37:54.432 CEST [1121] LOG:  enregistrement du point de vérification primaire invalide
Jun  7 15:37:54 fcore5 postgresql@11-main[1115]: 2021-06-07 15:37:54.432 CEST [1121] PANIC:  n'a pas pu localiser un enregistrement d'un point de vérification valide

Il me faut préciser:
- je suis un débutant complet dans l'utilisation de barman
- les machines target et recover ont des noms d'hôte et adresses IP différentes.

1. Est-il nécessaire de rebaptiser recover en target (avec changement d'adresse IP) pour pouvoir récupérer sur recover une sauvegarde de target ?
2. Est-il nécessaire de créer sur recover les bases de données ou les utilisateurs qui ont les droits de lecture ou écriture sur les bases de données de target, sauvegardées avec barman ?
3. Comment vérifier régulièrement qu'une base de données PosgreSQL est entièrement restaurable sans perte de données ? Conseils, lectures ?

[1]  https://medium.com/coderbunker/recover- … 5ee4e11939

Slts

PS: J'espère que la rubrique Sécurité est la bonne pour poser ce type de question. Si ce n'était pas le cas veuillez m'en excuser.

Hors ligne

#2 07/06/2021 18:46:55

olivier2831
Membre

Re : Resturation avec barman sur un autre hôte

Sur recover, j'ai augmenté à debug2, le niveau de log.
Voici un extrait de ceux-ci:

Jun  7 18:18:19 fcore5 postgresql@11-main[1632]: 2021-06-07 18:18:19.043 CEST [1638] DEBUG:  restore_command = 'cp barman_xlog/%f %p'
Jun  7 18:18:19 fcore5 postgresql@11-main[1632]: 2021-06-07 18:18:19.043 CEST [1638] DEBUG:  recovery_end_command = 'rm -fr barman_xlog'
Jun  7 18:18:19 fcore5 postgresql@11-main[1632]: 2021-06-07 18:18:19.043 CEST [1638] LOG:  début de la restauration de l'archive
Jun  7 18:18:19 fcore5 postgresql@11-main[1632]: 2021-06-07 18:18:19.043 CEST [1638] DEBUG:  n'a pas pu ouvrir le fichier « pg_wal/000000010000000000000084 » : Aucun fichier ou dossier de ce type


J'ai un fichier /var/lib/postgresql/11/main/barman_xlog/000000010000000000000084, un répertoire /var/lib/postgresql/11/main/pg_wal mais pas de fichier 000000010000000000000084 dans ce dernier.

Pour tous les fichiers 0000XXX de barman_xlog, j'ai opéré comme suit
cd  /var/lib/postgresql/11/main/pg_wal
ln -s ../barman_xlog/000000010000000000000084
chown -h postgresql:postgresql 000000010000000000000084

J'ai ensuite saisi:
service postgresql start
find / -name recovery.conf
find / -name recovery.done

Le fichier recovery.conf est devenu recovery.done.
En me connectant sur recover avec les droits d'un utilisateur de la base sur target, j'ai pu accéder aux données initiales.


1. Ceci semble confirmer qu'il n'est pas nécessaire de créer les utilisateurs de Postgres sur la machine recover. Êtes-vous d'accord ?
2. Comment configurer correctement les chemins pg_wal/barman_xlog ? Dans barman ? Dans recover ?
3. Quels sont les riques d'avoir target et recover simultanément en ligne ?

Slts





Comment

Hors ligne

#3 08/06/2021 09:28:07

gleu
Administrateur

Re : Resturation avec barman sur un autre hôte

Ca va être très difficile de vous aider si vous ne nous donnez qu'une partie des étapes que vous suivez. Il faudrait nous indiquer toutes les étapes (spécifiques à PostgreSQL) que vous suivez pour restaurer votre serveur.

Normalement, une restauration PITR se fait soi directement avec l'outil barman (ce que vous ne semblez pas faire malgré votre utilisation de cet outil pour la sauvegarde) soit manuellement. Manuellement, on procède ainsi :

* copie du répertoire principal des données de PostgreSQL ainsi que des tablespaces (et autres répertoires déportés si existants), à partir de la sauvegarde
* configuration du recovery.conf (vu que vous êtes en version 11)
* démarrage de PostgreSQL

Il faudrait donc nous indiquer les commandes utilisées pour chacune de ses étapes, ainsi que le log complet de démarrage de PostgreSQL.


Guillaume.

Hors ligne

#4 08/06/2021 17:06:57

yohmartin
Membre

Re : Resturation avec barman sur un autre hôte

Bonjour
Pour compléter ce que dit Guillaume, pour restaurer avec barman on utilise la commande barman recover

exemple pour restaurer a a la date de 08/06 a 22h00 avec un backupId = 20210608T210000 et un pg data =/data:

/usr/bin/barman recover --target-time "2021-06-05 22:00:00" --remote-ssh-command "ssh -o 'StrictHostKeyChecking=no' postgres@recover" target 20210608T210000 /data

Pour restaurer a la date la plus proche possible :

/usr/bin/barman recover --target-immediate --remote-ssh-command "ssh -o 'StrictHostKeyChecking=no' postgres@recover" target 20210608T210000 /data

Attention, barman doit pouvoir se connecter en ssh avec l'utilisateur postgres pour pouvoir fonctionner
les données dans /data de recover seront supprimées.
Une fois la restauration effectuée, il faudra demarre l'instance qui vient d'etre restaurée et pour pouvoir l'ouvrir en l'ecture/ecriture il faudra lancer la commande suivante :

select pg_wal_replay_resume();

Cordialement
Yohann

Hors ligne

Pied de page des forums