Comment déplacer un répertoire de données PostgreSQL vers un nouvel emplacement sur Ubuntu 16.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. Vous pouvez également rencontrer des conflits d’entrées / sorties s’ils se trouvent sur la même partition que le reste du système d’exploitation. Le RAID, le stockage de bloc réseau et d'autres périphériques peuvent offrir une redondance et 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.

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.

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

Pour préparer le déplacement du répertoire de données de PostgreSQL, vérifions l’emplacement actuel en lançant une session interactive PostgreSQL. Dans la ligne ci-dessous,psql est la commande pour entrer dans le moniteur interactif, et-u postgres dit à sudo d’exécuterpsql en tant qu’utilisateur postgres du système:

sudo -u postgres psql

Une fois que vous avez entré le moniteur, sélectionnez le répertoire de données:

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

Cette sortie confirme que PostgreSQL est configuré pour utiliser le répertoire de données par défaut,/var/lib/postgresql/9.5/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 pour quitter.

Pour assurer l’intégrité des données, nous arrêterons 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 réussi, utilisez la commande suivante:

sudo systemctl status postgresql

Vous pouvez confirmer sa fermeture si la dernière ligne de la sortie vous indique que le serveur est arrêté:

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

Maintenant que le serveur 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.

[.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. Lorsqu'il y a une barre oblique à la fin,rsync videra le contenu du répertoire dans le point de montage au lieu de le transférer dans un répertoire contenantPostgreSQL:
#

Nous allons démarrer lesrsync à partir du répertoirepostgresql afin de reproduire la structure de répertoire d'origine dans notre 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. Le répertoire de version,9.5 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 en cours avec une extension .bak et le conserverons jusqu'à confirmation du déplacement réussi. En le renommant, nous éviterons la confusion qui pourrait résulter de fichiers situés à la fois dans le nouvel et dans l'ancien emplacement:

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

Nous sommes maintenant prêts à porter notre attention sur la configuration.

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

PostgreSQL dispose de plusieurs façons pour remplacer les valeurs de configuration. Par défaut, ledata_directory est défini sur/var/lib/postgresql/9.5/main dans le fichier/etc/postgresql/9.5/main/postgresql.conf. Editez ce fichier pour refléter le nouveau répertoire de données:

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

Trouvez la ligne qui commence pardata_directory et changez le chemin qui suit pour refléter le nouvel emplacement.

Dans notre cas, le fichier mis à jour ressemble à la sortie ci-dessous:

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

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

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

Nous sommes prêts à démarrer PostgreSQL.

sudo systemctl start postgresql
sudo systemctl status postgresql

Pour vous assurer que le nouveau répertoire de données est bien utilisé, démarrez le moniteur PostgreSQL.

sudo -u postgres psql

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

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

Maintenant que vous avez redémarré PostgreSQL et confirmé qu’il utilise le nouvel emplacement, profitez-en pour vous assurer que votre base de données est entièrement fonctionnelle. 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/9.5/main.bak

Redémarrez une dernière fois PostgreSQL pour vous assurer que tout fonctionne comme prévu:

sudo systemctl restart postgresql
sudo systemctl status postgresql

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