Verschieben von Postgresql-Daten auf ein anderes Laufwerk


20

Ich verwende AWS als Cloud-Umgebung. Ich habe PostgreSQL auf demselben Laufwerk wie mein Root-Instanz-Volume installiert. Ich habe das zweite Laufwerk an meine Instanz angehängt und gemountet. Jetzt möchte ich alle meine PostgreSQL-Daten auf das andere Laufwerk verschieben. Ich bin noch im Entwicklungsmodus, damit ich die alten Daten löschen kann, wenn dies die Übertragung zu diesem Zeitpunkt erleichtert. Wie geht das am besten?

Ist der PostgreSQL-Tablespace etwas, auf das ich achten sollte?


1
Tablespaces wären der richtige Weg, wenn Sie einen Teil Ihrer Datenbank (en) auf ein separates Laufwerk verschieben möchten .
Erwin Brandstetter

Diese Antwort lässt vermuten , dass tablespacessollte nicht auf einer externen Festplatte gehen: dba.stackexchange.com/a/62037/41823 ich das Risiko nicht sicher verstehen , wenn Sie bereits die Daten auf einem externen setzen?
Statwonk

Antworten:


19

Folgendes sollte es tun:

  1. Beenden Sie PostgreSQL
  2. Stellen Sie sicher, dass PostgreSQL nicht mehr ausgeführt wird
  3. Stellen Sie sicher, dass PostgreSQL wirklich gestoppt ist
  4. Kopieren Sie das alte Datenverzeichnis auf das neue Laufwerk.
    Dies wird normalerweise über einen Befehlszeilenparameter ( -D) für Ihren Dienst oder über die PGDATAUmgebungsvariable definiert.
  5. Aktualisieren Sie Ihre PostgreSQL-Konfiguration (Dienst, Umgebungsvariable), um auf das neue Datenverzeichnis zu verweisen.
  6. Wenn Sie die Daten kopiert haben, benennen Sie das alte Datenverzeichnis um, um sicherzustellen, dass PostgreSQL es nicht mehr findet. Auf diese Weise erhalten Sie eine Fehlermeldung, wenn Sie die Konfiguration nicht richtig vorgenommen haben.
  7. Starten Sie den Dienst
  8. Wenn alles gut läuft, können Sie das alte Verzeichnis löschen.

Was meinen Sie im vierten Punkt mit "Dies wird normalerweise über einen Befehlszeilenparameter definiert ..."?
Codecool

@codecool: Es gibt verschiedene Möglichkeiten, wie dies definiert werden kann. Normalerweise ist es Teil der Service-Definition. Dies hängt jedoch von Ihrem Betriebssystem, der Verteilung und den persönlichen Änderungen ab.
a_horse_with_no_name

Dies hat funktioniert, aber ich habe regedit anstelle der Befehlszeile für Windows verwendet. Wütend. Der Speicherplatz meiner Festplatte war fast erschöpft, aber jetzt kann sie sicher an einem anderen Ort mit genügend Speicherplatz betrieben werden.
Graben

Hier ist ein Schritt-für-Schritt-Blog-Beitrag mit spezifischen Details, der für die typische Ubuntu- und 9,5-DB-Version auf dem
neuesten Stand ist

4
  1. Beenden Sie den postgresql-Dienst
  2. cp -a Quelldatenverzeichnis Zieldatenverzeichnis
  3. chown -R postgres_user / destination_data_directory
  4. export PGDATA = Ziel_Daten_Verzeichnis
  5. Ändern des Datenverzeichnisses in das Zieldatenverzeichnis in postgresql.conf
  6. pg_ctl start

Ich bin froh, dass Sie sich an den chownBefehl für den neuen Ordner erinnert haben.
RolandoMySQLDBA

0

Hier finden Sie eine Beschreibung zum Verschieben einer vorhandenen PostgreSQL-Datenbank an einen neuen Speicherort (Ordner, Partition) unter Arch Linux (diese Vorgehensweise sollte für andere Linux-Distributionen ähnlich sein).

pg_dumpallist ein Dienstprogramm zum Ausgeben (Dumpen) aller PostgreSQL-Datenbanken eines Clusters in eine Skriptdatei. ... Dazu wird pg_dumpjede Datenbank im Cluster aufgerufen. ...

Beispielsweise:

## To dump all databases:
$ pg_dumpall > /tmp/db.out               ## backup all postgres databases to file
$ pg_dumpall -Fc dbname > /tmp/outfile   ## backup a database

## To reload database(s) from that file:
$ psql -f /tmp/db.out postgres

TL / DR

Du brauchst:

  • export ( pg_dumpall) Datenbank
  • Erstellen Sie ein neues LEERES Verzeichnis
  • Bearbeiten Sie die postgresql.conf-Datei
  • Starten Sie den Postgres-Serverdienst neu
  • Laden Sie alte Daten aus der Dump-Datei in die neue Datenbank

Zusammenfassung der Befehle

Ich lasse meine Shell-Eingabeaufforderungen (Hostname ...), um zu klären, in welcher Shell ich mich befinde, wenn ich fortfahre.

[victoria@victoria ~]$ postgres --version     ## postgres (PostgreSQL) 11.2
[victoria@victoria claws]$ sudo -u postgres -i
[postgres@victoria ~]$ pg_dumpall > /tmp/db.out
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;              ## /var/lib/postgres/data
[postgres]# exit
[victoria@victoria postgres]$ mkdir /mnt/Vancouver/programming/rdb/postgres/postgresdb
## IMPORTANT: dir must be empty:
[victoria@victoria postgres]$ l postgresdb/   ## total 0
[victoria@victoria postgres]$ sudo chown postgres:root /mnt/Vancouver/programming/rdb/postgres/postgresdb/
[victoria@victoria postgres]$ sudo systemctl status postgresql
  ...
  May 02 19:55:21 victoria systemd[1]: Started PostgreSQL database server.
[postgres@victoria ~]$ initdb --locale en_US.UTF-8 -E UTF8 -D '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[postgres@victoria ~]$ exit
[victoria@victoria postgres]$ sudo vim /var/lib/postgres/data/postgresql.conf
  ## added line:
  data_directory = '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /var/lib/postgres/data   ## << Old dir; need to restart postgresql service
[postgres]# \q
[victoria@victoria postgres]$ sudo systemctl restart postgresql
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /mnt/Vancouver/programming/rdb/postgres/postgresdb/data
[postgres]# \q
[postgres@victoria ~]$ psql -f /tmp/db.out postgres
  SET
  SET
  SET
  CREATE ROLE
  ALTER ROLE
  [ ... SNIP! ... ]
[postgres@victoria ~]$ exit
## Done!  :-D

Beispiel

In meinem begleitenden Blog-Post, So verschieben Sie eine vorhandene PostgreSQL-Datenbank unter Arch Linux , finden Sie kommentierten Code und die Ausgabe.


Verweise

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.