potgresql 启动失败 日志报错‘0/F43F3C8 处的记录长度不合法:想要 24,但得到的是 0‘ ’英文提示 invalid record length at 0/F43F3C8: wanted 24, got 0

使用bin目录下的这个命令pg_resetwal -f -D "data目录"

重置日志。然后启动服务就可以了。

对于9.6及以前版本,工具命令pg_resetwal 叫 pg_resetxlog,它的本职工作是清理不需要的WAL文件, 但除此以外还能干点别的。

进入postgresql安装路径下的 bin 文件夹,在这里打开命令行,执行下面的命令:

.\pg_resetxlog.exe -f ..\data

在日志重置后,再尝试启动数据库。即:进入postgresql安装路径下的 bin 文件夹,在这里打开命令行,执行下面的命令:

.\pg_ctl start -D ..\data

 

找不到有效的检查点记录

 

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

# Postgres >= 10
pg_resetwal DATADIR

# Postgres < 10
pg_resetxlog DATADIR

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

The database server was not shut down cleanly.  
Resetting the transaction log might cause data to be lost.  
If you want to proceed anyway, use `-f` to force reset.

然后,您可以按照说明运行以强制更新:-f

# Postgres >= 10
pg_resetwal -f DATADIR

# Postgres < 10
pg_resetxlog -f DATADIR 

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

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

posted @ 2023-04-14 16:10  Thenext  阅读(1233)  评论(0编辑  收藏  举报