Comment déplacer un répertoire de données PostgreSQL vers un nouvel emplacement sur Ubuntu 18.04

introduction

Les bases de données s'agrandissent avec le temps, dépassant parfois l'espace de leur système de fichiers d'origine. Lorsqu'ils se trouvent sur la même partition que le reste du système d'exploitation, cela peut également potentiellement conduire à des conflits d'E / S.

Le RAID, le stockage de bloc réseau et d'autres périphériques peuvent offrir une redondance et améliorer l'évolutivité, ainsi que d'autres fonctionnalités souhaitables. Que vous ajoutiez plus d’espace, que vous évaluiez des moyens d’optimiser les performances ou que vous cherchiez à tirer parti d’autres fonctionnalités de stockage, ce didacticiel vous guidera lors du déplacement du répertoire de données de PostgreSQL.

Conditions préalables

Pour compléter ce guide, vous aurez besoin de:

Dans cet exemple, nous déplaçons les données vers un périphérique de stockage par blocs monté à/mnt/volume_nyc1_01. Si vous utilisez Block Storage sur DigitalOcean,this guide peut vous aider à monter votre volume avant de poursuivre ce didacticiel.

Indépendamment du stockage sous-jacent que vous utilisez, les étapes suivantes peuvent vous aider à déplacer le répertoire de données vers un nouvel emplacement.

[[step-1 -—- moving-the-postgresql-data-directory]] == Étape 1 - Déplacement du répertoire de données PostgreSQL

Avant de commencer à déplacer le répertoire de données de PostgreSQL, vérifions l’emplacement actuel en démarrant une session interactive PostgreSQL. Dans la commande suivante,psql est la commande permettant d’entrer dans le moniteur interactif et-u postgres indique àsudo d’exécuterpsql en tant qu’utilisateur du systèmepostgres:

sudo -u postgres psql

Une fois l’invite PostgreSQL ouverte, utilisez la commande suivante pour afficher le répertoire de données actuel:

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

Cette sortie confirme que PostgreSQL est configuré pour utiliser le répertoire de données par défaut,/var/lib/postgresql/10/main, donc c'est le répertoire que nous devons déplacer. Une fois que vous avez confirmé le répertoire sur votre système, tapez\q et appuyez surENTER pour fermer l'invite PostgreSQL.

Pour assurer l’intégrité des données, arrêtez PostgreSQL avant d’apporter des modifications au répertoire de données:

sudo systemctl stop postgresql

systemctl n'affiche pas le résultat de toutes les commandes de gestion des services. Pour vérifier que vous avez bien arrêté le service, utilisez la commande suivante:

sudo systemctl status postgresql

La dernière ligne de la sortie devrait vous indiquer que PostgreSQL a été arrêté:

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

Maintenant que le serveur PostgreSQL est arrêté, nous allons copier le répertoire de base de données existant vers le nouvel emplacement avecrsync. L'utilisation de l'indicateur-a préserve les autorisations et les autres propriétés du répertoire, tandis que-v fournit une sortie détaillée afin que vous puissiez suivre la progression. Nous allons démarrer lesrsync à partir du répertoirepostgresql afin de reproduire la structure de répertoires d'origine dans le nouvel emplacement. En créant ce répertoirepostgresql dans le répertoire du point de montage et en conservant la propriété de l'utilisateur PostgreSQL, nous pouvons éviter les problèmes d'autorisations pour les futures mises à niveau.

[.note] #Note: Assurez-vous qu'il n'y a pas de barre oblique à la fin du répertoire, qui peut être ajoutée si vous utilisez l'achèvement par tabulation. Si vous incluez une barre oblique à la fin,rsync videra le contenu du répertoire dans le point de montage au lieu de le copier sur le répertoire lui-même.
#

Le répertoire de version,10, n'est pas strictement nécessaire puisque nous avons défini l'emplacement explicitement dans le fichierpostgresql.conf, mais suivre la convention du projet ne fera certainement pas de mal, surtout s'il y a un besoin dans le futur pour exécuter plusieurs versions de PostgreSQL:

sudo rsync -av /var/lib/postgresql /mnt/volume_nyc1_01

Une fois la copie terminée, nous renommerons le dossier actuel avec une extension.bak et le conserverons jusqu'à ce que nous ayons confirmé que le déplacement a réussi. Cela aidera à éviter la confusion qui pourrait résulter de la présence de répertoires portant le même nom dans le nouvel et l'ancien emplacement:

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

Nous sommes maintenant prêts à configurer PostgreSQL pour accéder au répertoire de données à son nouvel emplacement.

[[step-2 -—- pointer-vers-le-nouvel-emplacement-de-données]] == Étape 2 - Pointage vers le nouvel emplacement de données

Par défaut, ledata_directory est défini sur/var/lib/postgresql/10/main dans le fichier/etc/postgresql/10/main/postgresql.conf. Editez ce fichier pour refléter le nouveau répertoire de données:

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

Trouvez la ligne qui commence pardata_directory et changez le chemin qui suit pour refléter le nouvel emplacement. Dans le contexte de ce tutoriel, la directive mise à jour ressemblera à ceci:

/etc/postgresql/10/main/postgresql.conf

. . .
data_directory = '/mnt/volume_nyc1_01/postgresql/10/main'
. . .

Enregistrez et fermez le fichier en appuyant surCTRL + X,Y, puisENTER. C’est tout ce dont vous avez besoin pour configurer PostgreSQL afin qu’il utilise le nouvel emplacement du répertoire de données. Il ne reste plus qu’à redémarrer le service PostgreSQL et à vérifier qu’il pointe bien sur le bon répertoire de données.

[[step-3 -—- restarting-postgresql]] == Étape 3 - Redémarrage de PostgreSQL

Après avoir modifié la directivedata-directory dans le fichierpostgresql.conf, continuez et démarrez le serveur PostgreSQL en utilisantsystemctl:

sudo systemctl start postgresql

Pour confirmer que le serveur PostgreSQL a démarré avec succès, vérifiez son état en utilisant à nouveausystemctl:

sudo systemctl status postgresql

Si le service a démarré correctement, vous verrez la ligne suivante à la fin du résultat de cette commande:

Output. . .
Jul 12 15:45:01  ubuntu-512mb-nyc1-01[1]: Started PostgreSQL RDBMS.
. . .

Enfin, pour vous assurer que le nouveau répertoire de données est bien utilisé, ouvrez l'invite de commande PostgreSQL.

sudo -u postgres psql

Vérifiez à nouveau la valeur du répertoire de données:

SHOW data_directory;
Output            data_directory
-----------------------------------------
/mnt/volume_nyc1_01/postgresql/10/main
(1 row)

Cela confirme que PostgreSQL utilise le nouvel emplacement du répertoire de données. Ensuite, prenez un moment pour vous assurer d’être en mesure d’accéder à votre base de données et d’interagir avec les données qu’il contient. Une fois que vous avez vérifié l’intégrité des données existantes, vous pouvez supprimer le répertoire de données de sauvegarde:

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

Avec cela, vous avez déplacé avec succès votre répertoire de données PostgreSQL vers un nouvel emplacement.

Conclusion:

Si vous avez suivi, votre base de données devrait fonctionner avec son répertoire de données dans le nouvel emplacement et vous avez franchi une étape importante pour pouvoir redimensionner votre stockage. Vous pouvez également consulter5 Common Server Setups For Your Web Application pour des idées sur la façon de créer une infrastructure de serveur pour vous aider à faire évoluer et optimiser les applications Web.

Related