Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Nous sommes en PostgreSQL 8.2.3.
Nous archivons nos journaux avec la commande suivante :
archive_command = 'cp "%p" /home10/postgres/archive/"%f"'
Il arrive que le /home10 soit full sur certains de nos serveurs. Nous avons alors constaté que les journaux sont sauvegardés dans le repertoire pg_xlog.
Une fois que l'espace est libre sur le /home10, nous voulons que PostgreSQL copie à nouveau les journaux dans /home10
Malgrès un pg_resetxlog, nous n'arrivons pas à modifier la destination d'archivage des fichiers, Postgres continue à les stocker dans /home5/postgres/pg_xlog
Nous sommes alors obligés de désinstaller complétement Postgres et faire un dump / restore de la base.
Merci d'avance pour votre aide,
Cordialement,
Vincent Moreau
Adeo Services
Hors ligne
Oula, un pg_resetxlog supprime les logs, il ne les redirige pas.
Les logs sont créés/écrit dans le répertoire pg_xlog. Ils sont ensuite archivés si nécessaire (autrement dit si archive_command est renseigné). Enfin, ils sont supprimés quand PostgreSQL n'en a plus besoin. Il ne faut surtout pas les supprimer manuellement, ce que fait pg_resetxlog.
Si le répertoire d'archivage est rempli, PostgreSQL conserve les journaux de transaction en attendant de pouvoir de nouveau les archiver. Si vous voulez changer le répertoire d'archivage, vous modifiez le paramètre archive_command pour que la copie se fasse ailleurs et vous rechargez la configuration (option reload).
Guillaume.
Hors ligne
Bonjour Guillaume,
Merci pour cette réponse.
En fait, je pense que le problème vient du fait que le process archiver n'est pas lancé :
ps -ef | grep -i post
postgres 24615 1 0 Sep22 ? 00:00:01 /usr/bin/postmaster -p 5432 -D /home4/postgres
postgres 24618 24615 0 Sep22 ? 00:00:04 postgres: logger process
postgres 24620 24615 0 Sep22 ? 00:00:45 postgres: writer process
postgres 24622 24615 0 Sep22 ? 00:00:00 postgres: stats collector process
J'ai vérifié le fichier postgresql.conf, j'ai bien la ligne
archive_command = 'cp "%p" /home10/postgres/archive/"%f"'
Comment peut on lancer ce process ?
Cordialement,
Vincent
Hors ligne
Bonjour,
Le processus d'archivage n'est pas lancé en permanence. Et en fait, il n'y a pas réellement de processus d'archivage. Lorsqu'un journal de transaction (WAL) est terminé, PostgreSQL lance la commande donnée par le paramètre archive_command. Si cette commande renvoie le code retour 0, il suppose que la commande s'est bien terminée et flag ce fichier comme étant prêt à être ré-utilisé. Si la commande renvoie n'importe quel autre code de retour, PostgreSQL attend un peu et relance un peu plus tard la commande d'archivage.
Pour savoir si l'archivage se passe bien, vérifiez les journaux applicatifs (traces) de PostgreSQL.
Guillaume.
Hors ligne
Effectivement, j'avais les erreurs suivantes dans mon log :
2008-09-24 00:12:58 CEST [7633] FATAL: could not open archive status directory "pg_xlog/archive_status": No such file or directory
2008-09-24 00:12:58 CEST [24615] LOG: archiver process (PID 7633) exited with exit code 1
j'ai donc recréé le repertoire archive_status et tout est rentré dans l'ordre !
Encore une fois, un grand merci pour votre expertise
Cordialement,
Vincent
Hors ligne
Ça paraît logique. Le répertoire archive_status est un répertoire où PostgreSQL enregistre des fichiers vides dont le nom indique le journal de transactions disponible prêt pour être archivé. Donc, sans ce répertoire, le processus chargé de lancer la commande d'archivage ne voyait aucun journal à archiver. Les journaux se sont donc entassés dans pg_xlog et l'archivage ne fonctionnait pas.
Content que votre problème soit résolu.
Guillaume.
Hors ligne
Pages : 1