659 Stimmen

Kopieren der PostgreSQL-Datenbank auf einen anderen Server

Ich möchte eine produktive PostgreSQL-Datenbank auf einen Entwicklungsserver kopieren. Was ist der schnellste und einfachste Weg, dies zu tun?

28voto

pg_basebackup scheint jetzt der bessere Weg zu sein, insbesondere für große Datenbanken.

Sie können eine Datenbank von einem Server mit der gleichen oder einer älteren Hauptversion kopieren. Oder genauer gesagt :

pg_basebackup funktioniert mit Servern der gleichen oder einer älteren Hauptversion, bis hinunter zu 9.1. Allerdings ist der WAL-Streaming-Modus ( -X stream ) funktioniert nur mit Serverversion 9.3 und höher, und der tar-Formatmodus ( --format=tar ) der aktuellen Version funktioniert nur mit der Serverversion 9.5 oder höher.

Dazu müssen Sie auf dem Quellserver sein:

  1. listen_addresses = '*' um vom Zielserver aus eine Verbindung herstellen zu können. Stellen Sie sicher, dass Port 5432 offen ist.
  2. Mindestens 1 verfügbare Replikationsverbindung: max_wal_senders = 1 ( -X fetch ), 2 para -X stream (der Standardwert bei PostgreSQL 12) oder mehr.
  3. wal_level = replica oder höher, um Folgendes einstellen zu können max_wal_senders > 0 .
  4. host replication postgres DST_IP/32 trust en pg_hba.conf . Dies ermöglicht den Zugriff auf die pg Cluster für jeden aus dem DST_IP Maschine. Vielleicht möchten Sie auf eine sicherere Option zurückgreifen.

Änderungen 1, 2, 3 erfordern einen Neustart des Servers, Änderung 4 erfordert einen Reload.

Auf dem Zielserver:

# systemctl stop postgresql@VERSION-NAME
postgres$ pg_basebackup -h SRC_IP -U postgres -D VERSION/NAME --progress
# systemctl start postgresql@VERSION-NAME

13 Stimmen

Könnten Sie Ihre Antwort näher erläutern, beispielsweise durch ein Beispiel?

9 Stimmen

Das funktioniert allerdings nur, wenn beide Rechner die gleichen PG-Versionen haben.

0 Stimmen

Die Chancen sind gering, dass Sie unterschiedliche Datenbankversionen für Entwicklung und Produktion verwenden. Letztes Mal hatte ich eine unangenehme Unterhaltung mit einem meiner Teamkollegen, als sie versuchte, ein Problem einzureichen, dass ein bestimmter Code mit PG 9.6 nicht funktioniert, während wir zu diesem Zeitpunkt 9.5 in der Produktion verwendeten. Das Basis-Backup ist viel schneller. Dann ist pg_upgrade der richtige Weg, falls erforderlich.

14voto

user01 Punkte 1425

Führen Sie diesen Befehl mit dem Namen der Datenbank, die Sie sichern möchten, aus, um einen Dump der DB zu erstellen.

 pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}

 eg. pg_dump -U postgres mydbname -f mydbnamedump.sql

Scpen Sie nun diese Dump-Datei auf den entfernten Rechner, auf den Sie die DB kopieren möchten.

eg. scp mydbnamedump.sql user01@remotemachineip:~/some/folder/

Führen Sie auf dem entfernten Rechner den folgenden Befehl in ~/some/Ordner aus, um die DB wiederherzustellen.

 psql -U {user-name} -d {desintation_db}-f {dumpfilename.sql}

 eg. psql -U postgres -d mynewdb -f mydbnamedump.sql

0 Stimmen

Wie können Sie ein Backup erstellen, wenn Sie keine Verbindung zu psql herstellen können? Gibt es eine Möglichkeit, dies über das Dateisystem zu erreichen?

11voto

MisterJoyson Punkte 299

Legen Sie Ihre Datenbank ab: pg_dump database_name_name > backup.sql


Importieren Sie Ihre Datenbank zurück: psql db_name < backup.sql

8voto

pastullo Punkte 3991

Ich kämpfte ziemlich viel und schließlich war die Methode, die es mir ermöglichte, es mit Rails 4 zum Laufen zu bringen:

auf Ihrem alten Server

sudo su - postgres
pg_dump -c --inserts old_db_name > dump.sql

Ich musste den Postgres-Linux-Benutzer verwenden, um den Dump zu erstellen. Außerdem musste ich -c verwenden, um die Erstellung der Datenbank auf dem neuen Server zu erzwingen. --inserts weist es an, die INSERT()-Syntax zu verwenden, was bei mir sonst nicht funktionieren würde :(

dann, auf dem neuen Server, ganz einfach:

sudo su - postgres
psql new_database_name < dump.sql

Um die Datei dump.sql zwischen den Servern zu übertragen, habe ich einfach "cat" verwendet, um den Inhalt auszudrucken, und dann "nano", um sie neu zu erstellen und den Inhalt zu kopieren.

Außerdem war die ROLE, die ich in den beiden Datenbanken verwendet habe, unterschiedlich, so dass ich alle Besitzernamen im Speicherauszug ersetzen musste.

7voto

Anvesh Punkte 6100

Ich möchte Ihnen ein Linux-Shell-Skript zeigen, mit dem Sie Ihre Tabellendaten von einem Server auf einen anderen PostgreSQL-Server kopieren können.

Die Referenz stammt aus diesem Blog:

Linux Bash Shell Script für die Datenmigration zwischen PostgreSQL Servern:

#!/bin/bash
psql \
    -X \
    -U user_name \
    -h host_name1 \
    -d database_name \
    -c "\\copy tbl_Students to stdout" \
| \
psql \
    -X \
    -U user_name \
    -h host_name2 \
    -d database_name \
    -c "\\copy tbl_Students from stdin"

Ich migriere nur die Daten; bitte erstellen Sie eine leere Tabelle auf Ihrem Ziel-/zweiten Datenbankserver.

Dies ist ein Hilfsskript. Außerdem können Sie das Skript für die allgemeine Verwendung anpassen, indem Sie Parameter für host_name, database_name, table_name und andere hinzufügen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X