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.