无法在 psql 中看到数据库,即使我可以在 PGDATA: main/base 文件夹中看到它们

问题描述 投票:0回答:1

我遇到了 postgres 问题

PANIC: could not locate a valid checkpoint record
这导致我运行
pg_resetwal
。我可以接受丢失 WAL 中的任何数据。

现在运行后我只能看到4 databases,即使我有several in main/base directory

我已经双重/三次检查了 datadir 路径是否正确。我已经在 postgres.conf 以及 psql 中检查过它。

我创建了一个新集群并将该部分设置到数据目录,但仍然不起作用。

我该如何恢复。

database postgresql data-recovery
1个回答
0
投票

当然,您似乎遇到了一个问题,即 PostgreSQL 在出现严重错误并且随后使用

pg_resetwal
重置事务日志后无法识别数据目录中的数据库文件。以下是帮助您恢复的综合指南:

1.确认数据目录

仔细检查您是否正在检查正确的数据目录。这可以通过检查

postgresql.conf
文件中的
data_directory
条目来验证。您已经检查过这一点,但必须排除任何印刷错误或意外配置。

2.检查启动错误

检查 PostgreSQL 服务器日志是否有重新启动服务器时出现的任何错误。这可能会揭示为什么某些数据库未被承认。与特定数据库或文件相关的错误可能对于指导您的恢复策略至关重要。

3.谨慎使用
pg_resetwal

您已经部署了

pg_resetwal
,这是为严重 WAL 错误保留的措施。验证它是否使用适当的参数执行:

pg_resetwal -D /path/to/datadir

密切注意出现的任何警告或错误,因为它们对于进一步故障排除至关重要。

4.直接数据库访问

尝试使用

psql
:

单独连接到每个数据库
psql -d database_name

如果您可以访问某些数据库,但不能访问其他数据库,则问题可能仅限于特定文件。

5.审核单个数据库文件

在 PostgreSQL 数据目录 (

PGDATA
) 中,数据库驻留在
base
下的子目录中,每个子目录均以其相应的 OID 命名。您可以通过在可访问的数据库上执行以下 SQL 查询来将这些 OID 与数据库名称关联起来:

SELECT oid, datname FROM pg_database;

6.考虑部分恢复

如果某些数据库没有受到损害,请立即使用

pg_dump
:

进行备份
pg_dump -d database_name -f backup_file.sql

对于无法识别的数据库,如果存在备份,现在是启动恢复的最佳时机。

7.探索高级恢复工具

如果重要数据仍然无法访问,请考虑使用先进的工具或专业服务进行数据恢复,例如:

  • pg_filedump:用于检查表文件是否损坏。
  • 数据恢复服务:精通纠正数据库损坏的专业服务。

8.采用并加强最佳实践

危机后,评估和完善数据库管理策略(包括定期备份、WAL 归档和复制)至关重要,以阻止或减少未来的中断。

寻求进一步帮助

如果上述策略没有产生结果,请考虑通过邮件列表或论坛与 PostgreSQL 社区互动,或者向经验丰富的数据库管理员寻求恢复建议。

数据恢复非常复杂,尤其是关键任务数据,因此聘请专业服务通常是最谨慎的做法。

© www.soinside.com 2019 - 2024. All rights reserved.