主要检查点记录中的资源管理器ID无效。

3
我已经将我的Airbyte镜像从 0.35.2-alpha 更新到 0.35.37-alpha 。 [在kubernetes上运行]
当系统升级后,db pod无法终止,于是我[犯了一个可怕的错误]删除了pod。 当它重新启动时,我收到一个错误 -
PostgreSQL Database directory appears to contain a database; Skipping initialization

2022-02-24 20:19:44.065 UTC [1] LOG:  starting PostgreSQL 13.6 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.3.1_git20211027) 10.3.1 20211027, 64-bit
2022-02-24 20:19:44.065 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2022-02-24 20:19:44.065 UTC [1] LOG:  listening on IPv6 address "::", port 5432
2022-02-24 20:19:44.071 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2022-02-24 20:19:44.079 UTC [21] LOG:  database system was shut down at 2022-02-24 20:12:55 UTC
2022-02-24 20:19:44.079 UTC [21] LOG:  invalid resource manager ID in primary checkpoint record
2022-02-24 20:19:44.079 UTC [21] PANIC:  could not locate a valid checkpoint record
2022-02-24 20:19:44.530 UTC [1] LOG:  startup process (PID 21) was terminated by signal 6: Aborted
2022-02-24 20:19:44.530 UTC [1] LOG:  aborting startup due to startup process failure
2022-02-24 20:19:44.566 UTC [1] LOG:  database system is shut down

我很确定WAL文件已经损坏了,但是我不知道该如何修复它。


这就是你备份的原因。 - Laurenz Albe
1个回答

5
<警告> - 存在数据丢失的风险
这是一个测试系统,因此我不担心丢失最新交易记录,并且没有备份。
首先,我重写了容器命令来使容器保持运行状态,但不尝试启动postgres。
...
    spec:
      containers:
        - name: airbyte-db-container
          image: airbyte/db
          command: ["sh"]
          args: ["-c", "while true; do echo $(date -u) >> /tmp/run.log; sleep 5; done"]
...

并在 Pod 上生成了一个 shell -

kubectl exec -it -n airbyte airbyte-db-xxxx -- sh

运行pg_reset_wal命令。
# dry-run first
pg_resetwal --dry-run /var/lib/postgresql/data/pgdata

成功!

pg_resetwal /var/lib/postgresql/data/pgdata
Write-ahead log reset

随后在容器中删除了临时命令,PostgreSQL 就能正确启动了!


1
“pg_resetwal”有时可能存在风险。曾经它破坏了我的数据库中的一些事务,尽管数据库看起来完全正常,但实际上并非如此。因此,在运行此命令之前,请务必创建备份。 - t7e

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接