Ich möchte eine produktive PostgreSQL-Datenbank auf einen Entwicklungsserver kopieren. Was ist der schnellste und einfachste Weg, dies zu tun?
Könnten Sie Ihre Antwort näher erläutern, beispielsweise durch ein Beispiel?
Ich möchte eine produktive PostgreSQL-Datenbank auf einen Entwicklungsserver kopieren. Was ist der schnellste und einfachste Weg, dies zu tun?
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:
listen_addresses = '*'
um vom Zielserver aus eine Verbindung herstellen zu können. Stellen Sie sicher, dass Port 5432 offen ist.max_wal_senders = 1
( -X fetch
), 2
para -X stream
(der Standardwert bei PostgreSQL 12) oder mehr.wal_level = replica
oder höher, um Folgendes einstellen zu können max_wal_senders > 0
.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
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.
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
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.
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 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.