So verschieben Sie ein PostgreSQL-Datenverzeichnis an einen neuen Speicherort unter Ubuntu 16.04

Einführung

Datenbanken wachsen mit der Zeit, wobei der Speicherplatz auf dem ursprünglichen Dateisystem manchmal größer wird. Sie können auch auf E / A-Konflikte stoßen, wenn sich diese auf derselben Partition wie der Rest des Betriebssystems befinden. RAID, Netzwerkblockspeicher und andere Geräte können Redundanz und andere wünschenswerte Funktionen bieten. Unabhängig davon, ob Sie mehr Speicherplatz hinzufügen, Möglichkeiten zur Leistungsoptimierung evaluieren oder andere Speicherfunktionen nutzen möchten, führt Sie dieses Lernprogramm durch die Verlagerung des PostgreSQL-Datenverzeichnisses.

Voraussetzungen

Um diesen Leitfaden zu vervollständigen, benötigen Sie:

In diesem Beispiel verschieben wir die Daten auf ein Blockspeichergerät, das mit/mnt/volume-nyc1-01 bereitgestellt wird. Wenn Sie Block Storage auf DigitalOcean verwenden, können Sie mitthis guide Ihr Volume bereitstellen, bevor Sie mit diesem Lernprogramm fortfahren.

Unabhängig davon, welchen zugrunde liegenden Speicher Sie verwenden, können Sie mit den folgenden Schritten das Datenverzeichnis an einen neuen Speicherort verschieben.

[[Schritt-1 - Verschieben des Postgresql-Datenverzeichnisses]] == Schritt 1 - Verschieben des PostgreSQL-Datenverzeichnisses

Um das Verschieben des PostgreSQL-Datenverzeichnisses vorzubereiten, überprüfen wir den aktuellen Speicherort, indem wir eine interaktive PostgreSQL-Sitzung starten. In der folgenden Zeile istpsql der Befehl zum Aufrufen des interaktiven Monitors, und-u postgres weist sudo an,psql als Postgres-Benutzer des Systems auszuführen:

sudo -u postgres psql

Sobald Sie den Monitor betreten haben, wählen Sie das Datenverzeichnis:

SHOW data_directory;
Output       data_directory
------------------------------
/var/lib/postgresql/9.5/main
(1 row)

Diese Ausgabe bestätigt, dass PostgreSQL für die Verwendung des Standarddatenverzeichnisses/var/lib/postgresql/9.5/main konfiguriert ist. Dies ist also das Verzeichnis, das verschoben werden muss. Wenn Sie das Verzeichnis auf Ihrem System bestätigt haben, geben Sie\q ein, um es zu beenden.

Um die Integrität der Daten zu gewährleisten, werden wir PostgreSQL herunterfahren, bevor wir das Datenverzeichnis tatsächlich ändern:

sudo systemctl stop postgresql

systemctl zeigt nicht das Ergebnis aller Serviceverwaltungsbefehle an. Verwenden Sie den folgenden Befehl, um zu überprüfen, ob Sie erfolgreich waren:

sudo systemctl status postgresql

Sie können das Herunterfahren bestätigen, wenn in der letzten Zeile der Ausgabe angegeben wird, dass der Server gestoppt ist:

Output. . .
Jul 22 16:22:44 ubuntu-512mb-nyc1-01 systemd[1]: Stopped PostgreSQL RDBMS.

Nachdem der Server heruntergefahren wurde, kopieren wir das vorhandene Datenbankverzeichnis mitrsync an den neuen Speicherort. Wenn Sie das Flag-a verwenden, bleiben die Berechtigungen und andere Verzeichniseigenschaften erhalten, während-v eine ausführliche Ausgabe bereitstellt, damit Sie den Fortschritt verfolgen können.

[.note] #Note: Stellen Sie sicher, dass das Verzeichnis keinen abschließenden Schrägstrich enthält, der hinzugefügt werden kann, wenn Sie die Tab-Vervollständigung verwenden. Bei einem abschließenden Schrägstrich speichertrsync den Inhalt des Verzeichnisses in den Mount-Punkt, anstatt ihn in ein Verzeichnis mitPostgreSQL zu übertragen:
#

Wir werden diersync aus dem Verzeichnispostgresql starten, um die ursprüngliche Verzeichnisstruktur an unserem neuen Speicherort nachzuahmen. Durch das Erstellen diesespostgresql-Verzeichnisses im Mount-Point-Verzeichnis und die Beibehaltung des Eigentums des PostgreSQL-Benutzers können Berechtigungsprobleme für zukünftige Upgrades vermieden werden. Das Versionsverzeichnis9.5 ist nicht unbedingt erforderlich, da wir den Speicherort explizit in der Dateipostgresql.confdefiniert haben, aber das Befolgen der Projektkonvention wird sicherlich nicht schaden, insbesondere wenn in Zukunft ein Bedarf besteht um mehrere Versionen von PostgreSQL auszuführen.

sudo rsync -av /var/lib/postgresql /mnt/volume-nyc1-01

Sobald der Kopiervorgang abgeschlossen ist, benennen wir den aktuellen Ordner mit der Erweiterung ".bak" um und behalten ihn bei, bis wir den erfolgreichen Umzug bestätigt haben. Durch die Umbenennung vermeiden wir Verwechslungen, die durch Dateien am neuen und am alten Speicherort entstehen können:

sudo mv /var/lib/postgresql/9.5/main /var/lib/postgresql/9.5/main.bak

Jetzt können wir uns der Konfiguration widmen.

[[Schritt 2 - Zeigen auf den neuen Datenort]] == Schritt 2 - Zeigen auf den neuen Datenort

PostgreSQL bietet verschiedene Möglichkeiten, Konfigurationswerte zu überschreiben. Standardmäßig istdata_directory in der Datei/etc/postgresql/9.5/main/postgresql.conf auf/var/lib/postgresql/9.5/main eingestellt. Bearbeiten Sie diese Datei, um das neue Datenverzeichnis wiederzugeben:

sudo nano /etc/postgresql/9.5/main/postgresql.conf

Suchen Sie die Zeile, die mitdata_directory beginnt, und ändern Sie den folgenden Pfad, um die neue Position wiederzugeben.

In unserem Fall sieht die aktualisierte Datei folgendermaßen aus:

/etc/postgresql/9.5/main/postgresql.conf

. . .
data_directory = '/mnt/volume-nyc1-01/postgresql/9.5/main'
. . .

[[Schritt-3 -—- Neustart-postgresql]] == Schritt 3 - Neustart von PostgreSQL

Wir sind bereit, PostgreSQL zu starten.

sudo systemctl start postgresql
sudo systemctl status postgresql

Starten Sie den PostgreSQL-Monitor, um sicherzustellen, dass das neue Datenverzeichnis tatsächlich verwendet wird.

sudo -u postgres psql

Schauen Sie sich den Wert für das Datenverzeichnis noch einmal an:

SHOW data_directory;
Output            data_directory
-----------------------------------------
/mnt/volume-nyc1-01/postgresql/9.5/main
(1 row)

Nachdem Sie PostgreSQL neu gestartet und bestätigt haben, dass der neue Speicherort verwendet wird, können Sie sicherstellen, dass Ihre Datenbank voll funktionsfähig ist. Nachdem Sie die Integrität vorhandener Daten überprüft haben, können Sie das Sicherungsdatenverzeichnis entfernen:

sudo rm -Rf /var/lib/postgresql/9.5/main.bak

Starten Sie PostgreSQL ein letztes Mal neu, um sicherzustellen, dass es wie erwartet funktioniert:

sudo systemctl restart postgresql
sudo systemctl status postgresql

Fazit:

Wenn Sie mitverfolgt haben, sollte Ihre Datenbank mit ihrem Datenverzeichnis am neuen Speicherort ausgeführt werden, und Sie haben einen wichtigen Schritt zur Skalierung Ihres Speichers ausgeführt. Vielleicht möchten Sie auch5 Common Server Setups For Your Web Application lesen, um Ideen zum Erstellen einer Serverinfrastruktur zu erhalten, mit deren Hilfe Sie Webanwendungen skalieren und optimieren können.