Ich habe eine Postgresql-Datenspeicherauszugsdatei. Wie kann ich diese Sicherung in einem reinen Datencontainer auf die Art und Weise wiederherstellen, in der die Wiederherstellung erfolgt, wenn ich den PostgreSQL-Container docker ausführe?Stellen Sie eine Postgresql-Datenbank in einem Docker-Container wieder her. Wenn Postgres gestartet wird, ist die Datenbank vorhanden
Antwort
Am einfachsten wäre es, eine leere postgresql-Datenbank auf dem Host in einem separaten Ordner zu erstellen, dann den PostgreSQL-Daemon zu starten, dann die Daten zu importieren und dann einfach in den Container zu mounten. Mit dem folgenden Skript können Sie die DB im Ordner /tmp/postgres-mem
erstellen und dann Daten in sie importieren.
#!/bin/bash
export PGDIR=/tmp/postgres-mem
pg_ctl -D "$PGDIR" stop
rm -vfr "$PGDIR"
mkdir "$PGDIR"
pg_ctl init -D "$PGDIR"
pg_ctl -D "$PGDIR" start -o "-h localhost -c fsync=off -c synchronous_commit=off -c full_page_writes=off -c log_destination='stderr' -c logging_collector=on -c log_directory='pg_log' -c log_filename='postgresql-%Y-%m-%d_%H%M%S.log' -c log_statement='all' -k /tmp/postgres-mem"
sleep 3
psql -h localhost -c 'create user cooluser with superuser' template1
psql -h localhost -c 'create database "whatever"' template1
und dann
psql -U cooluser whatever < your_dump_file.sql
dann kopieren Sie den Inhalt von/tmp/Postgres-mem in Ihren Datencontainer
immer Sie this approach betrachten möchten.
Wie Stackoverflow penaltizes Antworten, die auf prägnante sind ich wiederholen, was there geschrieben:
- eine Daten erstellen nur Behälter
- Führen Sie einen temporären Postgres Container die Sicherung wiederherstellen. Hängen Sie den Container "Nur Daten" UND das Verzeichnis an, das die lokale Sicherung enthält.
- An den Wiederherstellungscontainer anhängen. Innerhalb des Containers
- Wechseln Sie zum postgresql-Benutzer
- Erstellen Sie den Superuser und passendes Kennwort für die wiederherzustellende Datenbank.
- Verlassen Sie die psql-Sitzung mit \ q. Noch innerhalb des Containers
- die Sicherung an der Eingabeaufforderung wiederherstellen
- Erstellen Sie den endgültigen Docker Postgres Container. Hinweis: Geben Sie den korrekten Namen der Datenbank an, aus der die Wiederherstellung im vorherigen Schritt durchgeführt wurde.
- den Container löschen verwendet, um die Sicherung in die Daten nur Volumen
Deine Antwort wird bedeutungsvoller, wenn du uns auch Beispielbefehle für jede/Pflichtschritte zeigst !! Prost – Sarz
Der Ursprung wurde PostgreSQL-Instanz nicht so der Ansatz, den Sie in Allerdings arbeiten nicht vorschlagen Dockerized wiederherzustellen. – JohnDoe
Okay, Sie müssen immer noch ein Dateisystem mit der Datenbank für die spezifische postgresql-Instanz initialisieren. Und es ist nicht wirklich wichtig, wie du es bekommen würdest :) – jdevelop