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:
-
An Ubuntu 16.04 server with a non-root user with
sudo
privileges. Vous pouvez en savoir plus sur la façon de configurer un utilisateur avec ces privilèges dans notre guideInitial Server Setup with Ubuntu 16.04. -
A PostgreSQL server. Si vous n'en avez pas déjà configuré, le guideHow To Install and Use PostgreSQL on Ubuntu 16.04 peut vous aider.
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.