Ich habe eine Weile an einem Hot-Backup für Postgres 9.1 gearbeitet und bin auf ein konsistentes Problem gestoßen. Nach dem Neustart von Postgres auf dem Slave-Server werden die Protokolldatei pgstartup und die tägliche Protokolldatei im Verzeichnis pg_log fehlerfrei gelesen. Wenn ich jedoch versuche, mit dem Befehl psql in die Datenbank einzutreten, wird der folgende Fehler angezeigt:
FATAL: Das Datenbanksystem wird gestartet.
Die Datei recovery.conf wechselt auch nicht zu recovery.done. Ich habe diesen Fehler eingehend untersucht und finde immer die gleiche Antwort: Die Datenbank wurde nicht ordnungsgemäß heruntergefahren, bevor ich versuchte, Postgres neu zu starten. Ich habe Postgres nur über die Befehle service postgresql-9.1 restart
oder neu gestartet /etc/init.d/postgresql-9.1 restart
. Nachdem ich diesen Fehler erhalten habe, bringe ich alle Prozesse zum Stillstand und versuche erneut, die Datenbank neu zu starten, und erhalte weiterhin den gleichen Fehler. Ich weiß nicht, wohin ich von hier aus gehen soll und wie ich dieses Problem beheben soll. Nachstehend ist der genaue Vorgang aufgeführt, den ich ausgeführt habe, um das Hot-Backup abzuschließen.
Master-Server-Konfigurationen:
pg_hba.conf hat folgende Zeile hinzugefügt:
Host-Replikation postgres IPAddressOfSlaveServer-Vertrauensstellung
postgresql.conf:
wal_level = hot_standby max_wal_senders = 5 listen_address = '*' port = 5432 max_wal_senders = 5 wal_keep_segments = 32
Slave-Serverkonfigurationen:
postgresql.conf:
hot_standby = ein
recovery.conf:
standby_mode = on primary_conninfo = host = IPAddressOfMasterServer port = 5432 Benutzer = Postgres restore_command = 'cp /var/lib/pgsql/9.1/data/pg_xlog/%f "% p"'
Nach der Konfiguration beider Server
Ich wechsle zum Benutzer postgres auf dem Masterserver und führe die folgenden Befehle aus:
psql -c "Select pg_start_backup ('label', true);"; rsync -a -v -e ssh /var/lib/pgsql/9.1/data slave: /var/lib/pgsql/9.1/data \ - postmaster.pid ausschließen pgsql -c "select pg_stop_backup ();";
Nach dem Synchronisieren der Datenbank mit dem Slave-Server
Ich starte den Slave-Server neu und der Start schlägt nicht fehl. Die Datei pgstartup.log lautet:
Erfolg. Sie können den Datenbankserver jetzt über Folgendes starten: /usr/pgsql-9.1/bin/postgres -D /var/lib/pgsql/9.1/data oder /usr/pgsql/9.1/bin/pg_ctl -D /var/lib/pgsql/9.1/data -l Start der Protokolldatei
Die aktuelle Tagesprotokolldatei postgresql-Thu.log lautet:
Protokoll: Herunterfahren Protokoll: Das Datenbanksystem wird heruntergefahren Protokoll: Das Datenbanksystem wurde bei der Wiederherstellung am 10.04.2012 heruntergefahren Protokoll: Aufrufen des Standby-Modus Protokoll: Wiederhergestellte Protokolldatei "logFileName" aus dem Archiv Protokoll: Konsistenter Wiederherstellungsstatus erreicht bei 0 / BF0000B0 Protokoll: Wiederholen beginnt bei 0 / BF000020 Protokoll: Wiederhergestellte Protokolldatei "logFileName" aus dem Archiv Protokoll: unerwartetes pageaddr 0/85000000 in Protokolldatei 0, Segment 192, Offset 0 Protokoll: unerwartetes pageaddr 0/85000000 in Protokolldatei 0, Segment 192, Offset 0 Protokoll: Die Streaming-Replikation wurde erfolgreich mit dem primären Server verbunden
Ich habe unerwartetes pageaddr recherchiert und aus den Postgres-Archiven habe ich verstanden, dass es ganz normal ist und eine der erwarteten Möglichkeiten ist, das Ende von WAL zu erkennen.
Jeder Rat wäre sehr dankbar.
quelle
Interessanterweise habe ich das Gegenteil von Paul gelöst.
Ich fügte hinzu:
hot_standby = on
oder vielmehr
#hot_standby = off
in das oben Gesagte geändert . (Dies wurde mit 9,5)quelle
Ich habe dies in Protokollen:
So beheben Sie den unbegrenzten Start des Servers: Beenden Sie den Dienst (falls vorhanden) und beenden Sie den Prozess 'postgres' (normalerweise ist er vorhanden). Führen Sie dies in der Konsole aus:
Diese Meldung erscheint, weil das xLog-Verzeichnis Daten enthält, die vor dem Herunterfahren des Dienstes nicht geschrieben wurden. Und dann versucht er beim Starten des Dienstes, diese Daten zu reparieren. Manchmal friert es den Start ein und endet nie. Kommando beim Aufräumen dieser nicht fixierten Daten, die den Dienst nur zum Starten mit festen Daten anwenden. Möglicherweise gehen einige Teile der nicht festgelegten Daten verloren, aber der Datenbankserver wird normal ausgeführt und kann von Apps aufgerufen werden.
quelle