PostgreSQL错误PANIC:找不到有效的检查点记录


76

当我加载postgres服务器(v9.0.1)时,我感到恐慌,无法启动它:

PANIC:找不到有效的检查点记录

我怎样才能解决这个问题?


请不要在问题本身中发布解决方案。不鼓励回答您自己的问题,但是您应该发布解决方案作为答案。这次,我已经解决了所有问题。您可以在方便时随意发布它作为答案。
亚当李尔

1
我真的很好奇,在安娜编辑出来之前答案是什么:-)
filiprem 2012年

如果这是在从属服务器/读取服务器上,并且在复制基础备份后已启动,请确保您具有在本地数据文件夹中创建基础备份时创建的标签文件。
Daniel Gee

Answers:


125

它正在事务日志中寻找可能不存在或已损坏的检查点记录。您可以通过运行以下命令确定是否是这种情况:

# Postgres >= 10
pg_resetwal DATADIR

# Postgres < 10
pg_resetxlog DATADIR

如果事务日志已损坏,您将看到类似以下的消息:

没有完全关闭数据库服务器。重置事务日志可能会导致数据丢失。如果仍要继续,请使用-f强制重置。

然后,您可以按照说明进行操作并-f强制执行更新:

# Postgres >= 10
pg_resetwal -f DATADIR

# Postgres < 10
pg_resetxlog -f DATADIR 

那应该重置事务日志,但是它可能使数据库处于不确定状态,如PostgreSQL文档中有关的说明pg_resetwal

如果pg_resetwal抱怨无法确定的有效数据 pg_control,则可以通过指定-f(force)选项强制其继续进行 。在这种情况下,将用合理的值代替丢失的数据。可以预期大多数字段都将匹配,但是下一个OID,下一个事务ID和纪元,下一个多事务ID和偏移量以及WAL起始位置字段可能需要手动协助。可以使用下面讨论的选项设置这些字段。如果您无法为所有这些字段确定正确的值,-f仍然可以使用,但是必须比平时更加​​怀疑已恢复的数据库:必须立即进行转储和重新加载。转储之前,请不要在数据库中执行任何数据修改操作,因为任何此类操作都可能使损坏更加严重。


1
通过pg_resetwal /usr/local/var/postgres/然后运行像postgres -D /usr/local/var/postgres我一样的postgres进行重置。
heisenBug

谢谢@heisenBug!也为我工作
卡卡·鲁托

22

我正在运行9.1.7,我发现成功运行了以下命令:

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

pg_resetxlog命令的最后一个参数应该是postgres在磁盘上存储数据库数据的位置。


9

如此处所示,不应运行pg_resetxlog。涉及此的答案是错误的建议。假设错误发生在复制/复制实例的上下文中,则该链接提供了更简洁的方式来执行复制/复制。pg_basebackup


3

您是否进行连续归档?如果您当时正在备份,则可能会比较谨慎地删除backup_label。 pg_resetxlog是一件严峻的事情。


1

就像日志说:找不到有效的检查点记录。Postgres在$ PGDATA / pg_xlog /目录下找不到正确的WAL。尝试使用pg_resetxlog

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.