Réparer un PostgreSQL qui ne s'y retrouve plus dans ses pg_xlog
Par zokar le mercredi, décembre 21 2011, 12:00 - Sysadmin - Lien permanent
Petit billet pour vous expliquer comment faire repartir un PostgreSQL qui se plante sur la reprise des WAL
Tout d'abord, plantons le décors...
Un PostgreSQL qui tournait avec un Slony pour gérer sa réplication a été modifié pour tester la Streaming Replication (réplication embarquée dans PostgreSQL), et qui va aujourd'hui revenir sur Slony.
Il a été arrêté puis redémarré, le répertoire pg_xlog a été déplacé car augmentant beaucoup trop en taille et la partition dédiée était trop petite. Bref, le gros fouttoir.
Et forcément, après avoir remis en place la réplication par Slony, remis les répertoires au bon endroit en prenant soin de bien copier les logs de l'ancien dossier, on relance Postgres et la... c'est le drame.
root@ma_db:~> /etc/init.d./postgresql start Starting PostgreSQL 8.3 database server: main * The PostgreSQL server failed to start. Please check the log output [FAIL]
On matte donc les logs et la... Ô drame, ô désespoir :
Dec 21 11:32:41 dbname postgres[4384]: [2-1] 2011-12-21 11:32:41.423 CET 4384 LOG: invalid record length at 500C/5EFFF2B8 Dec 21 11:32:41 dbname postgres[4384]: [3-1] 2011-12-21 11:32:41.423 CET 4384 LOG: invalid primary checkpoint record Dec 21 11:32:41 dbname postgres[4384]: [4-1] 2011-12-21 11:32:41.423 CET 4384 LOG: invalid resource manager ID in secondary checkpoint record Dec 21 11:32:41 dbname postgres[4384]: [5-1] 2011-12-21 1132:41.423 CET 4384 PANIC: could not locate a valid checkpoint record Dec 21 11:32:41 dbname postgres[4383]: [1-1] 2011-12-21 11:32:41.424 CET 4383 LOG: startup process (PID 4384) was terminated by signal 6: Aborted Dec 21 11:32:41 dbname postgres[4383]: [2-1] 2011-12-21 11:32:41.424 CET 4383 LOG: aborting startup due to startup process failure
Après avoir cherché plusieurs minutes, et n'ayant pas peur de la perte de données, j'ai exécuté :
root@ma_db:~> su - postgres postgres@ma_db:~> cd /usr/lib/postgresql/9.0/bin/ postgres@ma_db:/usr/lib/postgresql/9.0/> ./pg_resetxlog -f /var/lib/postgresql/9.0/main
Et voila !
C'est tout réparé :D
Bonne journée et à bientôt
Commentaires
Je me permet de te donnée mon mail par ici car je n'est pas trouvé de formulaire de contact sur ton site
Cordialement