Verschieben einer großen PostgreSQL / PostGIS-Datenbank


8

Ich muss eine sehr große PostGIS-Datenbank (~ 320 GB) von Server1 (PostgreSQL 9.1, PostGIS 1.5) auf Server2 (PostgreSQL 9.3, PostGIS 2.1) verschieben und aktualisieren .

Der Upgrade-Prozess ist gut dokumentiert . Das Problem ist, dass auf Server1 nicht genügend Speicherplatz vorhanden ist , um die Datei dort abzulegen, zu überprüfen , dann auf Server2 zu kopieren und die Summen zu überprüfen. Ich habe es versucht:

  • Piping des Dumps von Server1 zu Server2 mit nc.
  • Schreiben einer Dump-Datei direkt in ein Server2- Dateisystem, das mit Server1 gemountet wird sshfs.

Beide Male scheint die Dump-Datei beschädigt worden zu sein. pg_restorebrach an verschiedenen Stellen mit Fehlern wie diesen:

pg_restore: [compress_io] could not uncompress data: incorrect data check

Kann jemand einen besseren Weg vorschlagen, um diesen Schritt und dieses Upgrade durchzuführen?

UPDATE: NFS ausprobiert (und SSHFS erneut versucht). Es ist klar, dass diese Remote-Dateisysteme nicht so viele Daten zuverlässig übertragen können . In der resultierenden SQL-Datei fehlen sichtbar Blöcke, was beim Import zu folgenden Syntaxfehlern führt:

ERROR:  invalid input syntax for integer: "8266UPDATE spatial_ref_sys o set auth_name = n.auth_name, auth_srid = n.auth_srid, srtext = n.srtext, proj4text = n.proj4text FROM _pgis_restore_spatial_ref_sys n WHERE o.srid = n.srid;"

Die zweite Option scheint gut zu sein, aber warum verwenden Sie kein NFS? Vielleicht gibt es eine kleine Unterbrechung, die von sshfs nicht gut behandelt wird. 320 GB ist eine ziemlich große Datei.
Marco

1
Eine größere Festplatte kaufen? 1 TB kostet heutzutage so gut wie nichts.
Colin 't Hart

Es stellt sich heraus, dass NFS für die Übertragung so vieler Daten genauso unzuverlässig ist wie SSHFS. Frage aktualisieren.
kontextify

Antworten:


7

Ich würde empfehlen, die 9.1-Datenbank wie folgt von Ihrem neuen 9.3-Server zu sichern:

pg_dump -h remoteserver -U remoteuser remotedbname -Fc -f my_old_server_backup.dump

Ich empfehle die Verwendung von 9.3, pg_dumpda pg_dumpes immer abwärtskompatibel, aber nicht vorwärtskompatibel ist. Mit anderen Worten, der neuere pg_dumpkümmert sich um alle Syntaxänderungen, die der neue Server benötigt, von denen das ältere Dienstprogramm nichts weiß.

Stellen Sie sicher, dass Ihr pg_hba.confund listen_addressesin postgresql.confso eingerichtet sind, dass Sie auch eine Remoteverbindung herstellen und einen entsprechenden Speicherauszug erstellen können.

Wenn Sie einen Speicherauszug versuchen und in einem Schritt wiederherstellen möchten, können Sie dies auch versuchen:

pg_dump -h remotehost -U remoteuser remotedbname | psql -U localuser localdbname

Ich hoffe, das hilft. =)


Das "Speichern und Wiederherstellen in einem Schritt" funktioniert wahrscheinlich aufgrund von Unterschieden zwischen den PostGIS-Versionen nicht, aber das Ausführen des Speicherauszugs remote vom empfangenden Server und das Wiederherstellen von diesem Server hat funktioniert! Dies ist eindeutig besser als die Verwendung von Netzwerkdateisystemen. Danke, ich habe jetzt eine funktionierende Datenbank!
kontextify

Ist das ein performativer Prozess? Es scheint mir, dass die Fertigstellung einige Tage dauern wird. Wird pgdump dann eine Dump-Datei mit ~ 300 GB erstellen, wenn ich keine Server-zu-Server-Remote-Sicherung verwende?
deFreitas
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.