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

时间:2012-01-10 06:36:30

标签: postgresql postgresql-9.0

当我加载postgres服务器(v9.0.1)时,我得到一个恐慌,阻止它启动:

  

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

我该如何解决这个问题?

6 个答案:

答案 0 :(得分:76)

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

# Postgres < 10.0
pg_resetxlog DATADIR

# Postgres >= 10.0
pg_resetwal DATADIR

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

  

数据库服务器没有干净地关闭。重置   事务日志可能会导致数据丢失。如果你想继续   无论如何,使用-f强制重置。

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

# Postgres < 10.0
pg_resetxlog -f DATADIR 

# Postgres >= 10.0
pg_resetwal -f DATADIR

这应该重置事务日志,但是它可能会使您的数据库处于不确定状态,如PostgreSQL documentation on pg_resetxlog中所述:

  

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

答案 1 :(得分:15)

我正在运行9.1.7,我发现成功运行了以下内容:

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

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

答案 2 :(得分:8)

不应运行indicated here pg_resetxlog。提到这个问题的答案是不好的建议。假设在复制/复制实例的上下文中发生错误,该链接提供了一种使用pg_basebackup进行复制/复制的更简洁方式

答案 3 :(得分:3)

你做连续归档吗?如果您当时正在备份,您可能会发现删除backup_label更为谨慎。 pg_resetxlog是一件非常严厉的事情。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

我在这里遇到了一个 Docker Postgresql-13,它没有再次启动。 我通过查找卷(用于数据)并运行来修复它

位于卷数据文件夹中,例如/var/lib/docker/volumes/c4c8d637d9eee086265d732b2974690b731abcb23f47ca61bf75fe28526e31ce/_data

作为目录的所有者运行(对我来说它是 systemd-coredump 用户)

sudo -u systemd-coredump /usr/lib/postgresql/13/bin/pg_resetwal -f .

确保您需要安装相同的 Postgresql 版本(如果 pg_resetwal 不是卷的一部分)

工作