Einführung
Datenbanken wachsen mit der Zeit, wobei der Speicherplatz auf dem ursprünglichen Dateisystem manchmal größer wird. Wenn sie sich auf derselben Partition wie der Rest des Betriebssystems befinden, kann dies möglicherweise auch zu E / A-Konflikten führen.
RAID, Netzwerkblockspeicher und andere Geräte können Redundanz bieten und die Skalierbarkeit sowie andere wünschenswerte Funktionen verbessern. 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:
-
Ein Ubuntu 18.04-Server mit einem Nicht-Root-Benutzer mit
sudo
-Berechtigungen. Weitere Informationen zum Einrichten eines Benutzers mit diesen Berechtigungen finden Sie in unseremInitial Server Setup with Ubuntu 18.04-Handbuch. -
PostgreSQL auf Ihrem Server installiert. Wenn Sie dies noch nicht eingerichtet haben, kann Ihnen die AnleitungHow To Install and Use PostgreSQL on Ubuntu 18.04helfen.
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
Bevor wir mit dem Verschieben des PostgreSQL-Datenverzeichnisses beginnen, überprüfen wir den aktuellen Speicherort, indem wir eine interaktive PostgreSQL-Sitzung starten. Im folgenden Befehl istpsql
der Befehl zum Aufrufen des interaktiven Monitors und-u postgres
weistsudo
an,psql
alspostgres-Benutzer des Systems auszuführen:
sudo -u postgres psql
Verwenden Sie nach dem Öffnen der PostgreSQL-Eingabeaufforderung den folgenden Befehl, um das aktuelle Datenverzeichnis anzuzeigen:
SHOW data_directory;
Output data_directory
------------------------------
/var/lib/postgresql/10/main
(1 row)
Diese Ausgabe bestätigt, dass PostgreSQL für die Verwendung des Standarddatenverzeichnisses/var/lib/postgresql/10/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 und drücken SieENTER
, um die PostgreSQL-Eingabeaufforderung zu schließen.
Um die Integrität der Daten sicherzustellen, stoppen Sie PostgreSQL, bevor Sie Änderungen am Datenverzeichnis vornehmen:
sudo systemctl stop postgresql
systemctl
zeigt nicht das Ergebnis aller Serviceverwaltungsbefehle an. Verwenden Sie den folgenden Befehl, um zu überprüfen, ob Sie den Dienst erfolgreich beendet haben:
sudo systemctl status postgresql
Die letzte Zeile der Ausgabe sollte Ihnen mitteilen, dass PostgreSQL gestoppt wurde:
Output. . .
Jul 12 15:22:44 ubuntu-512mb-nyc1-01 systemd[1]: Stopped PostgreSQL RDBMS.
Nachdem der PostgreSQL-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. Wir werdenrsync
aus dem Verzeichnispostgresql
starten, um die ursprüngliche Verzeichnisstruktur am 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.
[.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. Wenn Sie einen abschließenden Schrägstrich einfügen, speichertrsync
den Inhalt des Verzeichnisses auf dem Mount-Punkt, anstatt über das Verzeichnis selbst zu kopieren.
#
Das Versionsverzeichnis10
ist nicht unbedingt erforderlich, da wir den Speicherort explizit in der Dateipostgresql.conf
definiert haben, aber das Befolgen der Projektkonvention wird sicherlich nicht schaden, insbesondere wenn in der Datei ein Bedarf besteht Zukunft, 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 bestätigt haben, dass der Umzug erfolgreich war. Auf diese Weise können Sie Verwirrungen vermeiden, die dadurch entstehen können, dass Verzeichnisse mit ähnlichen Namen sowohl am neuen als auch am alten Speicherort vorhanden sind:
sudo mv /var/lib/postgresql/10/main /var/lib/postgresql/10/main.bak
Jetzt können wir PostgreSQL so konfigurieren, dass es an seinem neuen Speicherort auf das Datenverzeichnis zugreift.
[[Schritt 2 - Zeigen auf den neuen Datenort]] == Schritt 2 - Zeigen auf den neuen Datenort
Standardmäßig istdata_directory
in der Datei/etc/postgresql/10/main/postgresql.conf
auf/var/lib/postgresql/10/main
eingestellt. Bearbeiten Sie diese Datei, um das neue Datenverzeichnis wiederzugeben:
sudo nano /etc/postgresql/10/main/postgresql.conf
Suchen Sie die Zeile, die mitdata_directory
beginnt, und ändern Sie den folgenden Pfad, um die neue Position wiederzugeben. Im Kontext dieses Tutorials sieht die aktualisierte Direktive folgendermaßen aus:
/etc/postgresql/10/main/postgresql.conf
. . .
data_directory = '/mnt/volume_nyc1_01/postgresql/10/main'
. . .
Speichern und schließen Sie die Datei, indem SieCTRL + X
,Y
und dannENTER
drücken. Dies ist alles, was Sie tun müssen, um PostgreSQL für die Verwendung des neuen Datenverzeichnisses zu konfigurieren. An dieser Stelle müssen Sie nur den PostgreSQL-Dienst erneut starten und prüfen, ob er tatsächlich auf das richtige Datenverzeichnis verweist.
[[Schritt-3 -—- Neustart-postgresql]] == Schritt 3 - Neustart von PostgreSQL
Nachdem Sie die Direktivedata-directory
in der Dateipostgresql.conf
geändert haben, starten Sie den PostgreSQL-Server mitsystemctl
:
sudo systemctl start postgresql
Um zu bestätigen, dass der PostgreSQL-Server erfolgreich gestartet wurde, überprüfen Sie seinen Status erneut mitsystemctl
:
sudo systemctl status postgresql
Wenn der Dienst ordnungsgemäß gestartet wurde, wird am Ende der Ausgabe dieses Befehls die folgende Zeile angezeigt:
Output. . .
Jul 12 15:45:01 ubuntu-512mb-nyc1-01[1]: Started PostgreSQL RDBMS.
. . .
Öffnen Sie abschließend die PostgreSQL-Eingabeaufforderung, um sicherzustellen, dass das neue Datenverzeichnis tatsächlich verwendet wird.
sudo -u postgres psql
Überprüfen Sie den Wert für das Datenverzeichnis erneut:
SHOW data_directory;
Output data_directory
-----------------------------------------
/mnt/volume_nyc1_01/postgresql/10/main
(1 row)
Dies bestätigt, dass PostgreSQL den neuen Speicherort für das Datenverzeichnis verwendet. Nehmen Sie sich anschließend einen Moment Zeit, um sicherzustellen, dass Sie auf Ihre Datenbank zugreifen und mit den darin enthaltenen Daten interagieren können. Nachdem Sie die Integrität vorhandener Daten überprüft haben, können Sie das Sicherungsdatenverzeichnis entfernen:
sudo rm -Rf /var/lib/postgresql/10/main.bak
Damit haben Sie Ihr PostgreSQL-Datenverzeichnis erfolgreich an einen neuen Speicherort verschoben.
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.