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

De Get Docs
Aller à :navigation, rechercher

Introduction

Les bases de données se développent au fil du temps, dépassant parfois l'espace sur leur système de fichiers d'origine. Lorsqu'ils sont situés sur la même partition que le rest du système d'exploitation, cela peut potentiellement entraîner des conflits d'E/S.

Le RAID, le stockage de blocs 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, évaluiez des moyens d'optimiser les performances ou cherchiez à tirer parti d'autres fonctionnalités de stockage, ce didacticiel vous guidera tout au long du déplacement du répertoire de données de PostgreSQL.

Conditions préalables

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

Les exemples de ce didacticiel impliquent le déplacement des données vers un périphérique de stockage de blocs monté à /mnt/volume_nyc1_01. Si vous utilisez Block Storage sur DigitalOcean, lisez notre documentation sur Comment créer et configurer des volumes à utiliser avec des droplets pour vous guider dans le montage de votre volume avant de poursuivre ce didacticiel.

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

É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 PostgreSQL interactive. Dans la commande suivante, psql est la commande pour entrer dans le moniteur interactif et -u postgres raconte sudo éxécuter psql en tant qu'utilisateur postgres du système :

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/14/main
(1 row)

Cette sortie confirme que PostgreSQL est configuré pour utiliser le répertoire de données par défaut, /var/lib/postgresql/14/main, c'est donc le répertoire que vous devez déplacer. Une fois que vous avez confirmé le répertoire sur votre système, vous pouvez fermer le psql invite en exécutant le \q méta-commande :

\q

Pour garantir 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 sortie devrait vous dire que PostgreSQL est inactive (dead), ce qui signifie qu'il a été arrêté :

Output○ postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor>
     Active: inactive (dead) since Thu 2022-06-30 18:46:35 UTC; 27s ago
    Process: 4588 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 4588 (code=exited, status=0/SUCCESS)
        CPU: 1ms

Maintenant que le serveur PostgreSQL n'est plus en cours d'exécution, copiez le répertoire de base de données existant vers le nouvel emplacement avec rsync. En utilisant le -a flag préserve les autorisations et les autres propriétés du répertoire, tandis que -v fournit une sortie détaillée pour vous aider à suivre la progression. Vous allez commencer le rsync du postgresql répertoire afin d'imiter la structure de répertoire d'origine dans le nouvel emplacement. En créant ça postgresql dans le répertoire du point de montage et en conservant la propriété par l'utilisateur PostgreSQL, vous pouvez éviter les problèmes d'autorisations pour les futures mises à niveau.

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


Le répertoire des versions, 14, n'est pas strictement nécessaire puisque vous avez défini l'emplacement explicitement dans le postgresql.conf file, mais suivre la convention de projet ne fera certainement pas de mal, surtout s'il est nécessaire à l'avenir d'exécuter plusieurs versions de PostgreSQL :

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

Une fois la copie terminée, renommez le dossier en cours avec un .bak extension et conservez-la jusqu'à ce que vous ayez confirmé que le déplacement a réussi. Cela aidera à éviter toute confusion pouvant résulter de la présence de répertoires portant le même nom à la fois dans le nouvel et l'ancien emplacement :

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

Vous êtes maintenant prêt à configurer PostgreSQL pour accéder au répertoire de données dans son nouvel emplacement.

Étape 2 - Pointant vers le nouvel emplacement des données

Par défaut, le data_directory la directive de configuration est définie sur /var/lib/postgresql/14/main dans le /etc/postgresql/14/main/postgresql.conf dossier. Modifiez ce fichier pour refléter le nouveau répertoire de données :

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

Trouvez la ligne qui commence par data_directory et modifiez le chemin qui suit pour refléter le nouvel emplacement. Dans le cadre de ce tutoriel, la directive mise à jour sera écrite comme suit :

/etc/postgresql/14/main/postgresql.conf

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

Enregistrez et fermez le fichier en appuyant sur CTRL + X, Y, alors ENTER. C'est tout ce que vous devez faire pour configurer PostgreSQL pour utiliser 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 vers le bon répertoire de données.

Étape 3 - Redémarrer PostgreSQL

Après avoir changé le data-directory directive dans le postgresql.conf fichier, allez-y et démarrez le serveur PostgreSQL en utilisant systemctl:

sudo systemctl start postgresql

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

sudo systemctl status postgresql

Si le service a démarré correctement, le Active la ligne dira active (exited) dans la sortie de la commande :

Output● postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor>
     Active: active (exited) since Thu 2022-06-30 18:50:18 UTC; 3s ago
    Process: 4852 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 4852 (code=exited, status=0/SUCCESS)
        CPU: 1ms

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/14/main
(1 row)

Cela confirme que PostgreSQL utilise le nouvel emplacement du répertoire de données. Ensuite, prenez un moment pour vous assurer que vous pouvez accéder à votre base de données et interagir avec les données qu'elle 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/14/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 faire évoluer votre stockage. Vous pouvez également consulter 5 configurations de serveur communes pour votre application Web 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.