it-swarm.com.de

Verschieben von Postgresql-Daten auf ein anderes Laufwerk

Ich verwende AWS als meine 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, sodass ich die alten Daten löschen kann, wenn dies die Übertragung zu diesem Zeitpunkt erleichtert. Was ist der beste Weg, dies zu tun?

Ist der PostgreSQL-Tablespace etwas, das ich mir ansehen sollte?

21
codecool

Folgendes sollte es tun:

  1. Fahren Sie PostgreSQL herunter
  2. Stellen Sie sicher, dass PostgreSQL nicht mehr ausgeführt wird
  3. Überprüfen Sie, ob 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 Umgebungsvariable PGDATA 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 ausgeführt haben.
  7. Starten Sie den Dienst
  8. Wenn alles gut läuft, können Sie das alte Verzeichnis löschen.
20
  1. Beenden Sie den Postgresql-Dienst
  2. cp -a Quell_Datenverzeichnis Ziel_Datenverzeichnis
  3. chown -R postgres_user/destination_data_directory
  4. export PGDATA = destination_data_directory
  5. Ändern des Datenverzeichnisses in destination_data_directory in postgresql.conf
  6. pg_ctl start
4
adi

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

pg_dumpall ist ein Dienstprogramm zum Schreiben (Dumping) aller PostgreSQL-Datenbanken eines Clusters in eine Skriptdatei. ... Dies geschieht durch Aufrufen von pg_dump für jede Datenbank im Cluster. ...

Zum Beispiel:

## 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 Datei postgresql.conf
  • 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, während ich fortfahre.

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

Beispiel

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


Referenzen

0
Victoria Stuart