Die "Timeline-Verlaufsdatei" kann nicht gefunden werden, damit die Replikation funktioniert

2822
valya

Ich verwende PostgreSQL 9.4 und versuche, die Replikation in Gang zu setzen.

Was ich mache, lasse mich von den Anweisungen im Wiki und der Dokumentation inspirieren :

  1. SELECT pg_start_backup('clone', true);
  2. rsync von der Datenbank zur Replik
  3. SELECT pg_stop_backup();
  4. rsyncdes pg_xlogOrdners auf die gewünschte Replik

Ich starte die Replik und es heißt:

LOG: fetching timeline history file for timeline 3 from primary server FATAL: could not receive timeline history file from the primary server: ERROR: could not open file "pg_xlog/00000003.history": No such file or directory 

Natürlich suche ich die .historyDatei pg_xlog/auf beiden Servern, aber es gibt keine.

Ich überfliege die Dokumente, um das herauszufinden

Um die Sicherung verwenden zu können, müssen Sie alle während und nach der Sicherung des Dateisystems generierten WAL-Segmentdateien aufbewahren. Zu diesem Zweck erstellt die Funktion pg_stop_backup eine Sicherungsprotokolldatei, die sofort im WAL-Archivbereich gespeichert wird. Diese Datei ist nach der ersten WAL-Segmentdatei benannt, die Sie für die Sicherung des Dateisystems benötigen. Wenn die WAL-Startdatei beispielsweise 0000000100001234000055CD ist, wird die Sicherungsverlaufsdatei in etwa wie 0000000100001234000055CD.007C9330.backup benannt.

Aber es ist einfach so, dass es nach mir pg_stop_backup()noch nichts in pg_xlog/oder noch irgendwo gibt.

Woher bekomme ich diese "Timeline-History-Datei"?

5

1 Antwort auf die Frage

2
Pimp Juice IT

Nach dem Six for Two- Beitrag können Sie möglicherweise nur eine Datei erstellen und dann mit dem Replikationssetup fortfahren. Im Wesentlichen handelt es sich jedoch um einen PostgresSQL-Fehler, bei dem diese Datei benötigt wird, obwohl sie nicht anwendbar ist oder per Post gelöscht wird Operation.

Wenn PostgreSQL einen neuen primären Server heraufstufen will, erstellt er eine Markierung der Timeline-Aufteilung in Form einer kleinen Textdatei, die im WAL-Dateiverzeichnis abgelegt wird. Diese Datei ermöglicht es, Point-in-Time-Recovery in einigen recht komplexen Failover- und Failback-Szenarien zu erreichen.

Es scheint also, dass Sie die Datei neu erstellen müssen. Eine sehr schöne Zusammenfassung der .history-Datei finden Sie im Postgres-Wiki. Da die Informationen jedoch in .pdf enthalten sind, ist die Indexierung schwieriger, sodass Sie möglicherweise Schwierigkeiten haben, das Dokument zu finden, wenn Sie nicht bereits wissen, dass es dort ist.

Aber wir werden nie wieder auf diese Zeitachse zurückgreifen, weil sie vor unserem Upgrade liegt. Alles, was wir zum Wiederherstellen einer verlorenen Datei benötigen, ist eine ausreichend große Anzahl. Und Sie können eine bekommen, indem Sie laufen:

# SELECT pg_current_xlog_location(); pg_current_xlog_location -------------------------- 1/38F70328 (1 row) 

Erstellen Sie mit diesen Werten eine .history-Datei in Ihrem WAL-Verzeichnis, et voila. Die Replik kann sofort gestartet werden.

Quelle

Erstellen Sie die Datei mit diesen (obigen) Ergebnissen, jedoch mit dem erwarteten Namen pro Fehler.


Weitere Ressourcen

  • Grundlegendes zu PostgreSQL-Timelines

  • Systemverwaltungsfunktionen

    Name: pg_current_xlog_location()

    Rückgabetyp: Text

    Beschreibung: Abrufen des aktuellen Speicherorts für das Transaktionsprotokoll

    pg_current_xlog_locationZeigt den aktuellen Speicherort für das Transaktionsprotokoll in demselben Format an, das von den obigen Funktionen verwendet wird. In ähnlicher Weise zeigt pg_current_xlog_insert_location den Einfügepunkt des aktuellen Transaktionsprotokolls an. Die Einfügemarke ist das "logische" Ende des Transaktionsprotokolls zu einem beliebigen Zeitpunkt, während der Schreibort das Ende dessen ist, was tatsächlich aus den internen Puffern des Servers ausgeschrieben wurde. Der Schreibspeicherort ist das Ende dessen, was von außerhalb des Servers untersucht werden kann, und ist normalerweise das, was Sie möchten, wenn Sie an der Archivierung von teilweise vollständigen Transaktionsprotokolldateien interessiert sind. Die Einfügemarke wird hauptsächlich für Server-Debugging-Zwecke zur Verfügung gestellt. Beide Operationen sind schreibgeschützt und erfordern keine Superuser-Berechtigungen.

    Sie können pg_xlogfile_name_offsetden entsprechenden Namen der Transaktionsprotokolldatei und den Byte-Offset aus den Ergebnissen einer der oben genannten Funktionen extrahieren.

    Ebenso wird pg_xlogfile_namenur der Name der Transaktionsprotokolldatei extrahiert. Wenn sich der angegebene Transaktionsprotokollspeicherort genau an einer Grenze der Transaktionsprotokolldatei befindet, geben beide Funktionen den Namen der vorhergehenden Transaktionsprotokolldatei zurück. Dies ist normalerweise das gewünschte Verhalten beim Verwalten des Transaktionsprotokollarchivierungsverhaltens, da die vorherige Datei die letzte ist, die derzeit archiviert werden muss.

    Quelle