Mise à jour PostgreSQL 9.4 vers 9.6 sur une Debian/Jessie

J’ai ouvert une instance Mastodon, sur un serveur dédié, il y a de ça quelques mois avec une version 1.1 à l’époque, qui depuis à été mise à jour successivement jusqu’à la très récente 2.4.5.

À l’origine, sur le serveur, j’ai installé une distribution Debian/Jessie (8), toujours en forme et qui fait le job. Au moment d’installer Mastodon j’avais pris ce qui venait côté PostgreSQL, soit la 9.4, or il se trouve que la prochaine version 2.5 de Mastodon, nécessite a minima une version 9.5 de PostgreSQL.

Je viens de tester la migration de 9.4 à 9.6, sur une machine virtuelle comprenant un serveur Apache-PHP + PostgreSQL 9.4, et une installation Dotclear 2.14.2 la-dessus.

Ensuite, après avoir fouillé à droite et à gauche les possibilité de migrer (sans oublier les données), j’ai finalement testé cette procédure, qui semble assez indolore (pour autant que je puisse en juger).

Note : toutes les commandes peuvent se faire en mode root, ou avec un préfixe sudo ; à vous de voir ce que vous préférez. Dans la suite je ne mentionnerai pas le préfixe sudo.

Ajout du dépôt PostgreSQL

Par défaut la distribution Debian/Jessie ne comporte pas de paquet au delà de la version 9.4 de PostgreSQL, il faut donc lui indiquer où récupérer ça en éditant le fichier /etc/apt/sources.list.d/pgdg.list et en y ajoutant ceci :

deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main

Ensuite on ajoute la clé :

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Suivi d’une mise à jour pour reconstruire l’index :

apt-get update

Installation de la version 9.6 de PostgreSQL

Avant tout, sachez que la commande pg_lsclusters permet de lister les «clusters» PostgreSQL installés :

pg_lsclusters

Qui retourne dans mon cas ceci — un seul cluster, 9.4, en train de tourner, et heureusement vu que le café des blogueurs s’en sert :

Ver Cluster Port Status Owner    Data directory               Log file
9.4 main    5432 online postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log

On l’utilisera par la suite pour vérifier l’état des clusters.

Lancement de l’installation de la version 9.6 de PostgreSQL :

apt-get install postgresql-9.6 postgresql-contrib-9.6

Rien de particulier sauf qu’une fois installé, vous obtenez deux clusters, 9.4 et 9.6, en train de tourner (commande pg_lsclusters) :

Ver Cluster Port Status Owner    Data directory               Log file
9.4 main    5432 online postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log
9.6 main    5433 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log

Notez les numéros respectifs des ports, 5432 (port PostgreSQL par défaut) pour la 9.4, 5433 pour la 9.6.

Note : Côté applicatif c’est toujours PostgreSQL 9.4 qui sert les données sur le port par défaut, donc Mastodon est censé continuer de fonctionner sans sourciller.

Migration du cluster 9.4 vers 9.6

Il s’agit ici de faire migrer la configuration et les données utilisées par la 9.4 vers la 9.6.

Pour cela on commence par supprimer le cluster 9.6, la migration se chargeant de le recréer à l’issue du traitement :

pg_dropcluster 9.6 main --stop

Un pg_lsclusters nous donne alors :

Ver Cluster Port Status Owner    Data directory               Log file
9.4 main    5432 online postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log

Il est temps de lancer la migration :

pg_upgradecluster -v 9.6 9.4 main

Qui va dupliquer la configuration et les données et recréer le cluster 9.6 — la configuration et es données de la 9.4 ne sont pas supprimées pendant cette migration. De plus le port d’écoute de l’ancienne 9.4 est affecté à la nouvelle 9.6 tandis qu’un autre port est attribué à la 9.4. Enfin le cluster 9.4 est stoppé.

Confirmation avec un pg_lsclusters :

Ver Cluster Port Status Owner    Data directory               Log file
9.4 main    5433 down   postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log

C’est à ce moment qu’il faut vérifier que tout fonctionne côté applicatif puisque c’est dorénavant la 9.6 qui écoute sur le port habituel !

Suppression de PostgreSQL 9.4

Maintenant que la 9.6 tourne correctement, on peut supprimer le custer 9.4, qui va supprimer la configuration et les données au passage :

pg_dropcluster 9.4 main

Résultat avec un pg_lsclusters :

Ver Cluster Port Status Owner    Data directory               Log file
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log

Et les données de la 9.4 ont disparu.

Reste plus qu’à supprimer les paquets de la 9.4 qui ne servent plus à rien :

apt-get --purge remove postgresql-client-9.4 postgresql-9.4

Et voilà \o/


Référence :

Ajouter un commentaire

Les champs suivis d'un * sont obligatoires

Les commentaires peuvent être formatés en utilisant la syntaxe Markdown Extra.

Ajouter un rétrolien

URL de rétrolien : https://open-time.net/trackback/13920

Haut de page