2012-01-27 244 views
1

这是PostgreSQL的时候尝试断电后启动时会发生什么:修复损坏的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 

知道我不是运气不好,有一个命令,我可以用它来修复在这种情况下的数据库。只要数据库变得一致,交易的最后几个小时是否消失并不重要。

请告诉我该怎么做。

+0

属于dba.stackexchange.com – Aaron 2012-01-27 14:45:32

回答

3

取决于你愿意放弃多少数据。

您可以将zero_damaged_pages设置为在您的postgresql.conf配置文件中,然后尝试 - 但导致数据丢失。它可能工作或可能无法工作。

如果你想尝试,总是开始通过关闭Postgres数据库,并以它的一个完整的文件系统复制(如焦油)。因为它可能仍然是你拥有的最小的破碎版本。然后,一旦设置完成,立即运行pg_dump,擦除集群并恢复转储。并且绝对不要在zero_damaged_pages的默认情况下运行新群集,请记住将其关闭!

然后为新群集设置适当的时间点恢复备份。

1

从上次备份中恢复,然后从那里重新应用日志。

除非你有最后的备份和所有日志,那么你就搞砸了。

+0

我没有备份,但我知道可以做任何事情。 – 2012-01-27 15:22:23