2012-01-10 13 views
28

Quando carico il server Postgres (v9.0.1) ottengo un panico che gli impedisce di partenza:postgresql errore PANIC: impossibile individuare un record di checkpoint valido

PANIC: Impossibile trovare un posto di blocco valida record

Come posso risolvere questo?

+0

Si prega di non pubblicare la soluzione nella domanda stessa. Rispondere alle proprie domande non è scoraggiato, ma è necessario pubblicare soluzioni come risposte. Ho modificato la soluzione fuori dalla domanda questa volta. Sentiti libero di postare come risposta a tuo piacimento. –

+0

Sono davvero curioso di sapere quale sia stata la risposta prima che Anna lo correggesse :-) – filiprem

+0

Se si trova su un server slave/letto e si è avviato dopo aver copiato il backup di base, assicurarsi di avere il file di etichetta che è stato creato durante la creazione del backup di base nella cartella dati locale. –

risposta

55

Cerca un record di checkpoint nel log delle transazioni che probabilmente non esiste o è danneggiato. È possibile determinare se questo è il caso per esecuzione:

pg_resetxlog DATADIR 

Se il log delle transazioni è danneggiato, verrà visualizzato un messaggio del tipo:

Il server di database non è stato chiuso correttamente. La reimpostazione del log delle transazioni potrebbe causare la perdita dei dati. Se si desidera continuare con lo , utilizzare -f per forzare il ripristino.

È possibile seguire le istruzioni e correre con -f per forzare l'aggiornamento:

pg_resetxlog -f DATADIR 

Questo dovrebbe ripristinare il log delle transazioni, tuttavia, potrebbe lasciare il database in uno stato indeterminato come spiegato nella PostgreSQL documentation on pg_resetxlog :

Se pg_resetxlog lamenta che non può determinare dati validi per pg_control, è possibile forzarlo a proseguire comunque specificando l'-f (forza) s strega. In questo caso i valori plausibili saranno sostituiti dai dati mancanti. È probabile che la maggior parte dei campi corrisponda, ma potrebbe essere necessaria assistenza manuale per il prossimo OID, l'ID della transazione successiva e l'epoca, il successivo ID e l'offset multitransaction e i campi dell'indirizzo iniziale WAL. Questi campi possono essere impostati utilizzando gli interruttori discussi di seguito. Se non si è in grado di determinare i valori corretti per tutti questi campi, è ancora possibile utilizzare -f, ma il database ripristinato deve essere trattato con un sospetto ancora maggiore del solito: un'immediata discarica e ricarica è indispensabile. Non eseguire alcuna operazione di modifica dei dati nel database prima di eseguire il dump, poiché è probabile che qualsiasi azione di questo tipo peggiori il danneggiamento.

2

Effettuate l'archiviazione continua? Se si esegue il backup in quel momento, è possibile che sia più prudente rimuovere backup_label. pg_resetxlog è una cosa grave.

1

proprio come il log che dice: impossibile trovare un record di checkpoint valido.Postgres non riesce a trovare un WAL correttamente sotto la directory $ PGDATA/pg_xlog /. tenta di utilizzare pg_resetxlog

10

Io corro 9.1.7 e trovo eseguito il seguente successo:

/usr/lib/postgresql/9.1/bin/pg_resetxlog -f /var/lib/postgresql/9.1/main 

Il vostro ultimo argomento al comando pg_resetxlog dovrebbe essere la posizione sul disco in cui Postgres memorizza i dati del database .

6

Come indicated here pg_resetxlog non deve essere eseguito. Le risposte che si riferiscono a questo sono cattivi consigli.Supponendo che l'errore si sia verificato in un contesto di istanza di copia/replica, il collegamento fornisce un modo più succinto di fare copia/replica con pg_basebackup

Problemi correlati