PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 18/05/2012 14:32:19

Jibc
Membre

Message "It looks like you need to initdb"

Bonjour,


Avant tout, voici les infos de version de notre environnement :
PostgreSQL : 8.4
Taille de la base : 250 Go
Serveur Red Hat 5.3
Autre un information : Je n'y connais quasiment rien à l'administration PostgreSQL. Ceux qui ont fait notre install sont partis depuis bien longtemps et n'ont pas laissé beaucoup de doc. Donc on se débrouille avec les moyens du bord, comme on dit.


Le problème : impossibilité de démarrer la base. Message obtenu :
FATAL:  database files are incompatible with server
DETAIL:  The database cluster was initialized with PG_CONTROL_VERSION 822, but the server was compiled with PG_CONTROL_VERSION 843.
HINT:  It looks like you need to initdb.


L'historique :
Suite à un problème de saturation sur le serveur de base de données, j'ai perdu la connexion à la base.
Pour libérer de la place, j'ai supprimé des fichiers dans $PGDATA/pg_log.
Cela n'a pas suffi, je ne pouvais toujours pas me connecter à la base (bon, à cet endroit, j'aurais dû tenter de démarrer la base, et j'aurais sans doute évité les ennuis suivants).
J'ai déplacé les fichiers $PGDATA/pg_xlog à un autre endroit (et c'est là que normalement, tout le monde se dit : "Quel boulet..." Je sais.)
Suite à cela, impossible de redémarrer la base. Message :
LOG: logger shutting down
Je remets les logs dans $PGDATA/pg_xlog , je redémarre la base, même message.
Ni une, ni deux, je lance la commande :
pg_resetxlog -f /app/marjorie/pgsql/data (encore une grosse connerie sans doute)
Impossibilité de redémarrer la base, message :


FATAL:  database files are incompatible with server
DETAIL:  The database cluster was initialized with PG_CONTROL_VERSION 822, but the server was compiled with PG_CONTROL_VERSION 843.
HINT:  It looks like you need to initdb.


J'arrête là le massacre et je vous demande de l'aide.


Merci d'avance


Jibc

Dernière modification par Jibc (18/05/2012 14:46:30)

Hors ligne

#2 18/05/2012 14:46:49

rjuju
Administrateur

Re : Message "It looks like you need to initdb"

Bonjour,
d'après votre message d'erreur il y a eu une mise à jour des binaires de postgresql entre temps.
Les fichiers de stockage postgresql sont incompatible entre chaque version majeure, et pour migrer de l'une à l'autre il faut faire un dump et un restore. Dans votre cas les données sont pour une version majeure 8.2 et vos exécutables en 8.4.
Il faudrait voir s'il y a toujours les exécutables de la 8.2, sinon les réinstaller, et ensuite démarrer votre serveur avec ceux de la 8.2
Si les 2 version sont déjà présentes, il faut voir dans les variables d'environnement, /usr/bin ou autre (je ne connais pas la gestion de red hat à ce niveau) pour configurer votre serveur afin qu'il utilise par défaut la version 8.2

Dernière modification par rjuju (18/05/2012 14:53:36)

Hors ligne

#3 18/05/2012 15:11:30

Jibc
Membre

Re : Message "It looks like you need to initdb"

Merci de votre message.
La base fonctionnait bien ce matin, et rien n'a été installé depuis plus d'1 an sur cette version de base de données.
Je ne connais pas tout l'historique du projet (et les gens qui en savent un peu plus là dessus sont absents aujourd'hui), mais je comprends qu'un changement de version a été fait, peut-être de manière impropre.


Apparemment, la version des binaires est 8.2.13 et non 8.4.
$ initdb --version
initdb (PostgreSQL) 8.2.13
$ pg_ctl --version
pg_ctl (PostgreSQL) 8.2.13
$ pg_resetxlog  --version
pg_resetxlog (PostgreSQL) 8.2.13


Par contre :
$ cat /app/pgsql/data/PG_VERSION
8.4

Hors ligne

#4 18/05/2012 15:32:10

rjuju
Administrateur

Re : Message "It looks like you need to initdb"

Dans ce cas il y a peut-être des exécutables en 8.4 sur votre serveur à utiliser ?

Hors ligne

#5 18/05/2012 15:39:39

Jibc
Membre

Re : Message "It looks like you need to initdb"

Oui, c'est juste. Je n'avais pas fait attention, mais les binaires qui sont dans /usr/bin/ sont en 8.2 mais ceux qui sont dans /app/pgsql/bin sont en 8.4 :
$ /app/marjorie/pgsql/bin/pg_ctl --version
pg_ctl (PostgreSQL) 8.4.5


Par défaut, évidemment, quand on appelle un binaire en chemin relatif, il prend celui de /usr/bin.
Or, lorsque j'ai appelé pg_resetxlog, je n'ai pas utilisé le chemin absolu. Il a donc pris la version 8.2 et je lui ai indiqué un chemin PGDATA en version 8.4.


Pensez-vous qu'il suffit de relancer la commande pg_resetxlog en utilisant bien la bonne version cette fois ?

Hors ligne

#6 18/05/2012 15:57:24

Jibc
Membre

Re : Message "It looks like you need to initdb"

Bon, j'ai pris mon courage à 2 mais et j'ai lancé le pg_resetxlog en version 8.4...
Et là c'est bon, le redémarrage de la base a fonctionné. C'est tout bon.


Merci rjuju pour m'avoir aiguillé sur la bonne voie !

Hors ligne

#7 18/05/2012 16:25:31

Marc Cousin
Membre

Re : Message "It looks like you need to initdb"

À ta place, je ferais quand même un export de mon instance, une sauvegarde, une nouvelle instance et une restauration.

Parce que le resetxlog, ce n'est pas anodin en termes d'intégrité de la base (il se peut que des blocs, suite à ça, n'aient pas reçu le rejeu de ce qui était contenu dans les xlog supprimés).


Marc.

Hors ligne

#8 18/05/2012 21:21:24

gleu
Administrateur

Re : Message "It looks like you need to initdb"

Pour simplifier ce que vient de dire Marc, en utilisant pg_resetxlog, vous avez peut-être corrompu votre base. Donc, comme lui, je vous recommande de sauvegarder votre, la recréer et la restaurer.


Guillaume.

Hors ligne

Pied de page des forums