opengauss:HINT: If you are not restoring from a backup, try removing the file “.../backup_label“`**
残留导致恢复流程去找“必需的检查点/WAL”而找不到,于是崩溃退出。:它调用这些标准工具(basebackup / rewind)来拉副本,本身。:告警模块配置/环境变量缺失,不影响 DB 启动,可后续按运维规范补齐。(目录残缺或曾经执行过 basebackup/rewind 被中断),,重新 basebackup 同步回来,自动处理。如果备份/恢复被中断、WAL 缺失,,再让 Pod 重建/再执
目录标题
问题
关键信息都在这几行:
failed to open feature control file: gaussdb.version(不是致命,包里没这个文件/路径不对)Error when reading postmaster.opts: No such file or directory(非致命,正常由启动过程生成)The core dump path is an invalid directory(coredump 路径配置错误,非致命)FATAL: could not locate required checkpoint recordHINT: If you are not restoring from a backup, try removing the file ".../backup_label"
结论:这个实例的 PGDATA 处于“未完成的备份/拉起”状态(目录残缺或曾经执行过 basebackup/rewind 被中断),backup_label 残留导致恢复流程去找“必需的检查点/WAL”而找不到,于是崩溃退出。配合你之前的 pg_control 异常、postmaster.opts 缺失,以及 K8s 环境,很像是:副本在拉起或被重建时,卷挂载/IO 异常或被中断 → 目录不一致。
怎么修
你这是副本/Replica 节点(从截图 host 看是 ...-2-0)
最稳妥:直接重建副本,不要在坏目录里做手工修复。
# 仅对副本执行(不要指向 Leader)
patronictl -c /etc/patroni.yml reinit --force opengauss-c76f944a opengauss-c76f944a-2-0
# 观察
patronictl -c /etc/patroni.yml list
--force 会让 Patroni 清空 $PGDATA,重新 basebackup 同步回来,自动处理 backup_label 残留问题。
若 DCS 里 -2-0 是僵尸条目,可先
patronictl remove ... -2-0,再让 Pod 重建/再执行 reinit。
如果你暂时不走 Patroni(或需要先手工把目录“解卡”)
仅用于排障验证,更推荐直接 reinit。
export PGDATA=/pgdata/data/opengauss-83434b30
# 1) 看看是否有残留的备份标记
ls -l $PGDATA/backup_label $PGDATA/tablespace_map 2>/dev/null
# 2) 不在做恢复/不是在从备份还原,就移走它们
[ -f $PGDATA/backup_label ] && mv $PGDATA/backup_label $PGDATA/backup_label.bak.$(date +%F-%T)
[ -f $PGDATA/tablespace_map ] && mv $PGDATA/tablespace_map $PGDATA/tablespace_map.bak.$(date +%F-%T)
# 3) 确认 WAL 目录存在且非空(pg_wal/pg_xlog 取决于版本)
ls -lh $PGDATA/pg_wal 2>/dev/null || ls -lh $PGDATA/pg_xlog 2>/dev/null
- 如果移走
backup_label后仍报 “could not locate required checkpoint record”,说明 WAL/控制信息已不一致。
副本场景不要硬修(gs_resetxlog/pg_resetwal),直接清空并用 basebackup 重建更安全。
如果这是主库且没有可用备份(万不得已)
- 先完整备份坏目录(以便回滚),再尝试
gs_resetxlog/pg_resetwal -f $PGDATA重置 WAL/重建pg_control,能起则立即全量导出并重建所有备库。 - 但只在没有更好选择时这样做,风险较高。
伴随告警如何处理(非致命,可顺手修)
-
Get ENV GS_CLUSTER_NAME failed / AlarmItem file:告警模块配置/环境变量缺失,不影响 DB 启动,可后续按运维规范补齐。 -
The core dump path is an invalid directory:把coredump_path(postgresql.conf或gs_guc set)指向一个存在且可写的目录,例如:gs_guc set -D $PGDATA -c "coredump_path='/pgdata/core'" mkdir -p /pgdata/core && chown -R gaussdb:gaussdb /pgdata/core -
gaussdb.version缺失:打包/路径问题,通常不影响功能。
避免再次发生
- 副本一律用
patronictl reinit --force重建,不要在坏目录里 reset。 - 确认 PVC 只挂载一个 Pod(RWO),排除 Multi-Attach;卷挂载失败时避免在“空目录”上误初始化。
- 避免 NFS 作为数据盘;如必须,使用
hard等安全挂载参数并监控 I/O。 - 监控卷空间/只读重挂载;避免暴力杀进程/断电。
一条你现在可以直接用的命令
(目标就是你截图里的 ...-2-0 这个副本)
patronictl -c /etc/patroni.yml reinit --force opengauss-c76f944a opengauss-c76f944a-2-0
执行后把 patronictl list 的最新输出贴我,我帮你确认是否已回到 running (Replica)。
backup_label目录是 patronictl 自己的逻辑吗?
不是的。backup_label 不是 Patroni 的逻辑,而是 PostgreSQL/openGauss 内核自己的文件(而且是文件,不是目录),位于 $PGDATA/backup_label。
它的作用/来源:
-
在做 basebackup(如
gs_basebackup/pg_basebackup)或老式pg_start_backup/pg_stop_backup备份流程时生成,写入起始检查点/LSN、时间线、系统ID等信息,供恢复启动时定位必需的检查点与 WAL。 -
正常恢复到一致点后,内核会自动移除这个文件;如果备份/恢复被中断、WAL 缺失,
backup_label残留,就会出现你看到的FATAL: could not locate required checkpoint recordHINT: If you are not restoring from a backup, try removing .../backup_label
Patroni 只是编排:它调用这些标准工具(basebackup / rewind)来拉副本,本身不会创建 backup_label。你在副本上看到它,多半是上一次拉库被中断或卷/IO异常导致残留。
✅ 实操建议(副本)
用 Patroni 直接重建副本最安全:
patronictl reinit --force <cluster_name> <replica_member>
不要在副本里用 pg_resetwal 之类硬修。只有在单机主库又无备份这类无退路场景,才考虑手动移走 backup_label 或 reset(高风险)。
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐



所有评论(0)