Восстановление поврежденной базы данных postgresql - PullRequest
1 голос
/ 27 января 2012

Вот что происходит, когда postgresql пытается запустить после сбоя питания:

2012-01-27 18:00:44 MSK LOG:  database system was interrupted while in recovery at 2012-01-27 18:00:16 MSK
2012-01-27 18:00:44 MSK HINT:  This probably means that some data is corrupted and you will have to use the last backup for recovery.
2012-01-27 18:00:44 MSK LOG:  database system was not properly shut down; automatic recovery in progress
2012-01-27 18:00:44 MSK LOG:  consistent recovery state reached at 17/762C39B8
2012-01-27 18:00:44 MSK LOG:  redo starts at 17/761F6A40
2012-01-27 18:00:44 MSK FATAL:  invalid page header in block 311757 of relation base/26976/27977
2012-01-27 18:00:44 MSK CONTEXT:  xlog redo insert: rel 1663/26976/27977; tid 311757/44
2012-01-27 18:00:44 MSK LOG:  startup process (PID 392) exited with exit code 1
2012-01-27 18:00:44 MSK LOG:  aborting startup due to startup process failure

Я знаю Мне не повезло, и есть команда, которую я могу использовать длявосстановить базу данных в этой ситуации.Неважно, исчезнут ли последние несколько часов транзакций, пока база данных станет согласованной.

Пожалуйста, посоветуйте мне, что делать в этой ситуации.

Ответы [ 2 ]

3 голосов
/ 27 января 2012

Зависит от того, сколько вы готовы отказаться от данных.

Вы можете включить zero_damaged_pages в вашем файле конфигурации postgresql.conf, а затем попробовать - но это будет вызывать потерю данных.Это может работать или не работать.

Если вы хотите попробовать это, всегда начните с закрытия базы данных postgres и получения полной ее копии файловой системы (например, tar).Потому что это может быть наименее испорченная версия, которая у вас есть.Затем, установив его, сразу запустите pg_dump, сотрите кластер и восстановите дамп.И абсолютно не запускайте новый кластер с включенным zero_damaged_pages по умолчанию, не забудьте выключить его!

И затем настроить правильное резервное копирование на момент восстановления для нового кластера.

1 голос
/ 27 января 2012

Восстановите из последней резервной копии, затем повторно примените журналы оттуда.

Если у вас нет последней резервной копии и всех журналов с тех пор, вы облажались.

...