2015-04-15 19 views
14

Ich versuche pg_dump eine SQL-Datenbank auf einem Remote-Server in unserer DMZ. Es gibt 2 Probleme.pg_dump postgres Datenbank von Remote-Server

1) Es ist nicht viel Platz auf dem Remote-Server übrig, so dass der normale Befehl zur lokalen Sicherung der Datenbank pg_dump -C database > sqldatabase.sql.bak aus Platzgründen nicht funktioniert.

2) Ich kann auch nicht die andere Version von pg_dump Befehl ausführen Datenbank von Remote-Server auf lokale Server Dump mit:

pg_dump -C -h remotehost -U remoteuser db_name | psql localhost -U localuser db_name 

als der Server in unserem DMZ ist und Port 5432 blockiert wird. Was ich sehen möchte, ist, wenn es möglich ist, pg_dump die Datenbank und sofort speichern Sie es (ssh oder eine andere Form) als Datei auf einem Remote-Server. Was ich versuchte war: pg_dump -C testdb | ssh [email protected] | > /home/admin/testdb.sql.bak

Weiß jemand, wenn was ich versuche zu erreichen ist möglich?

+0

[ungetestet] (1) ein netcat Hörer ** auf dem lokalen Rechner einrichten ** (mit einer Port-Nummer, die nicht verwendet oder blockiert ist), zB 'netcat -l -p 1234> die Datei & '. (2) ** von der Remote-Maschine **, tun: 'pg_dump ... | netcat your.local.ip 1234' – wildplasser

Antwort

31

Sie können eine Verbindung mit ssh zu Ihrem Remote-Server, tun mit der Verbindung der pg_dump Aufruf und senden Sie die Ausgabe zurück zu stdout des lokalen Computers.

ssh [email protected]_machine "pg_dump -U dbuser -h localhost -C --column-inserts" \ 
>> backup_file_on_your_local_machine.sql 

Edit: ein Tippfehler behoben.

+0

Das ist viel einfacher als mein Netcat-Hack. – wildplasser

+0

Vielen Dank, das hat mein Problem geklärt, habe den Job vermisst ich war das –

2

Eine mögliche Lösung - Rohr durch ssh - wurde erwähnt.

Sie könnten auch Ihren DB-Server die öffentliche inet-Adresse überwachen lassen, einen Hostssl-Eintrag für Ihre Backup-Maschine zu pg_hba.conf hinzufügen, vielleicht ein Client-Zertifikat für Sicherheit konfigurieren und dann einfach den Dump auf dem Client/Backup ausführen Maschine mit pg_dump -h dbserver.example.com ...

Dies ist einfacher für unbeaufsichtigte Sicherungen.

Für die Konfiguration der Verbindung (sslmode) siehe auch the supported environment variables.

+0

Wäre hilfreich, den gesamten Befehl hier zu zeigen, da ich nicht verstehe, wie Sie auch auf diese Weise auf die Zielmaschine wiederherstellen können (Natürlich kann man zuerst dump und dann wiederherstellen, aber das passt nicht zur Frage) –

+0

Sorry, ich habe kein einfaches Kommando Beispiel, mein Setup ist ziemlich mit Konfigurationsdateien für ssh (für die ssh-Pipe-Alternative) und für psql mit Dienstnamen entwickelt zum Verbinden. Der Befehl ist das Problem? Sie müssen nur den Hostnamen zur Befehlszeile hinzufügen. Ich würde eher denken, das Problem/die Aufgabe ist die Einrichtung von TLS auf dem Server! Sobald Sie das getan haben, ist es einfach nur die Befehlszeile psql und pg_dump mit einem anderen Hostnamen als localhost. –

0

Sie können versuchen, wie dies in der lokalen Maschine in eine Datei Teil der Tabelle zu entleeren (unter der Annahme der lokalen Maschine hat psql installiert ist):

psql -h ${db_host} -p 5432 -U ${db_user} -d ${db_name} \ 
-c "\copy (SELECT * FROM my_table LIMIT 10000) to 'some_local_file.csv' csv;" 

Und Sie können die exportierte CSV in eine andere db importieren später wie folgt aus:

COPY my_table FROM '/path/to/some_local_file.csv' WITH (FORMAT csv);