Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
j'ai un backup postgres 13 qui a été effectué avec pg_base_backup, ainsi qu'un dossier de wal (3 fichiers 00000001000000D700000015..17).
Je dois restaurer une copie et appliquer les wal sur une autre machine (postgres 13 aussi ).
Sur la cible:
* stop postgres
* copie data/Restore backup
* effacement du sous-dossier pg_wal du backup
* création de standby.signal:
restore_command = 'cp /mnt/nfs/backup-replica/wal/%f %p'
* adaptation du postgresql.conf: force log_level=minimal, hot_standby=off, restore_command = 'cp /mnt/nfs/backup-replica/wal/%f %p'
start postgres: Il prend le premier wal puis stoppe sur cannot stat ‘/var/lib/pgsql/13/wal/00000002.history’: No such file or directory:
2023-05-17 12:40:42.447 -01 [4035] LOG: restored log file "00000001000000D700000015" from archive
cp: cannot stat ‘/var/lib/pgsql/13/wal/00000002.history’: No such file or directory
2023-05-17 12:40:47.449 -01 [4035] LOG: restored log file "00000001000000D700000015" from archive
cp: cannot stat ‘/var/lib/pgsql/13/wal/00000002.history’: No such file or directory
2023-05-17 12:40:52.452 -01 [4035] LOG: restored log file "00000001000000D700000015" from archive
cp: cannot stat ‘/var/lib/pgsql/13/wal/00000002.history’: No such file or directory
2023-05-17 12:40:57.453 -01 [4035] LOG: restored log file "00000001000000D700000015" from archive
cp: cannot stat ‘/var/lib/pgsql/13/wal/00000002.history’: No such file or directory
2023-05-17 12:41:02.555 -01 [4035] LOG: restored log file "00000001000000D700000015" from archive
cp: cannot stat ‘/var/lib/pgsql/13/wal/00000002.history’: No such file or directory
2023-05-17 12:41:07.544 -01 [4035] LOG: restored log file "00000001000000D700000015" from archive
cp: cannot stat ‘/var/lib/pgsql/13/wal/00000002.history’: No such file or directory
2023-05-17 12:41:12.565 -01 [4035] LOG: restored log file "00000001000000D700000015" from archive
Or postgres peut écrire sous /var/lib/pgsql/13/wal.
Quelqu'un peut-il m'éclairer sur cette "erreur"?
Merci!
Hors ligne
PostgreSQL ne cherche pas à écrire dans ce répertoire, il cherche à lire. Son problème est qu'il ne trouve pas ce fichier. Difficile de dire pourquoi vu qu'on a qu'un extrait des traces.
Guillaume.
Hors ligne
Pourquoi a-t'il besoin de ce fichier? Dans le dossier wal, il n'y a que des .wal, pas autre chose...
Hors ligne
j'ai recommencé la manoeuvre.
1. restore data
2. adaptation postgresql.conf sur la cible:
archive_mode = off
wal_level = minimal
restore_command = 'cp /var/lib/pgsql/13/wal/%f %p'
delete standby.signal, création d'un fichier recovery.signal dans la datadir.
systemctl start postgresql-13
log:
2023-05-17 18:44:05.923 -01 [29950] LOG: starting PostgreSQL 13.11 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
2023-05-17 18:44:05.925 -01 [29950] LOG: listening on IPv4 address "0.0.0.0", port 5432
2023-05-17 18:44:05.925 -01 [29950] LOG: listening on IPv6 address "::", port 5432
2023-05-17 18:44:05.928 -01 [29950] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2023-05-17 18:44:05.933 -01 [29950] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
2023-05-17 18:44:05.940 -01 [29953] LOG: database system was interrupted; last known up at 2023-05-01 00:00:02 -01
cp: cannot stat ‘/var/lib/pgsql/13/wal/00000002.history’: No such file or directory
2023-05-17 18:44:06.102 -01 [29953] LOG: starting archive recovery
cp: cannot stat ‘/var/lib/pgsql/13/wal/00000001000000D700000014’: No such file or directory
2023-05-17 18:44:06.114 -01 [29953] LOG: redo starts at D7/14000028
2023-05-17 18:44:06.118 -01 [29953] LOG: consistent recovery state reached at D7/14000138
2023-05-17 18:44:06.150 -01 [29953] LOG: restored log file "00000001000000D700000015" from archive
2023-05-17 18:44:06.432 -01 [29953] LOG: redo done at D7/14000138
cp: cannot stat ‘/var/lib/pgsql/13/wal/00000001000000D700000014’: No such file or directory
cp: cannot stat ‘/var/lib/pgsql/13/wal/00000002.history’: No such file or directory
2023-05-17 18:44:06.453 -01 [29953] LOG: selected new timeline ID: 2
2023-05-17 18:44:06.760 -01 [29953] LOG: archive recovery complete
cp: cannot stat ‘/var/lib/pgsql/13/wal/00000001.history’: No such file or directory
2023-05-17 18:44:06.816 -01 [29950] LOG: database system is ready to accept connections
souci:
le dossier /var/lib/pgsql/13/wal contient les wal 00000001000000D700000015 00000001000000D700000016 00000001000000D700000017 qui ont l'air d'avoir été superbement ignorés... mais ils ont été copiés sous pg_wal avec un timeline différent (le préfixe est devenu 00000002 et un fichier 00000002.history est créé sous pg_wal et contient: 1 D7/15000000 no recovery target specified.
Questions: pourquoi une seconde timeline? Pourquoi pas de recovery?
Merci.
Hors ligne
Pourquoi a-t'il besoin de ce fichier? Dans le dossier wal, il n'y a que des .wal, pas autre chose...
Non, il peut aussi y avoir des fichiers .hitstory dans le cas d'un ou plusieurs changements de timeline.
Pourquoi pas de recovery?
Le dossier /var/lib/pgsql/13/wal contient quoi exactement ? des wal archivés ou des wal en cours de gestion par l'ancien serveur ?
La seule hypothèse que j'arrive à faire est que ce sont des wal en cours de gestion par l'ancien serveur. Au moment de la sauvegarde, le serveur en était au wal 15, les 16 et 17 étaient créés en avance.
De ce fait, lors de la restauration, PostgreSQL détecte qu'il est en mode recovery, et lance le recover à partir du dernier checkpoint. Il rejoue le journal 15 partiellement vu que ce dernier n'était pas terminé à la fin de la sauvegarde. Et du coup, il ignore les fichiers suivants qui ne contiennent aucune information intéressante. Une timeline 2 est créé vu qu'il est arrivé en fin de rejeu. L'activité commence ce qui lui fait générer les wal 15 (la fin), 16, 17, etc sur la timeline 2.
Questions: pourquoi une seconde timeline?
En fin de recovery, il bascule tout le temps sur la timeline suivante. Vous étiez sur la 1, il passe donc à la 2.
Guillaume.
Hors ligne
Pages : 1