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_resetwal
pg_control
-f
-f