我遇到了 postgres 问题
PANIC: could not locate a valid checkpoint record
这导致我运行 pg_resetwal
。我可以接受丢失 WAL 中的任何数据。
我已经双重/三次检查了 datadir 路径是否正确。我已经在 postgres.conf 以及 psql 中检查过它。
我创建了一个新集群并将该部分设置到数据目录,但仍然不起作用。
我该如何恢复。
当然,您似乎遇到了一个问题,即 PostgreSQL 在出现严重错误并且随后使用
pg_resetwal
重置事务日志后无法识别数据目录中的数据库文件。以下是帮助您恢复的综合指南:
仔细检查您是否正在检查正确的数据目录。这可以通过检查
postgresql.conf
文件中的 data_directory
条目来验证。您已经检查过这一点,但必须排除任何印刷错误或意外配置。
检查 PostgreSQL 服务器日志是否有重新启动服务器时出现的任何错误。这可能会揭示为什么某些数据库未被承认。与特定数据库或文件相关的错误可能对于指导您的恢复策略至关重要。
pg_resetwal
您已经部署了
pg_resetwal
,这是为严重 WAL 错误保留的措施。验证它是否使用适当的参数执行:
pg_resetwal -D /path/to/datadir
密切注意出现的任何警告或错误,因为它们对于进一步故障排除至关重要。
尝试使用
psql
: 单独连接到每个数据库
psql -d database_name
如果您可以访问某些数据库,但不能访问其他数据库,则问题可能仅限于特定文件。
在 PostgreSQL 数据目录 (
PGDATA
) 中,数据库驻留在 base
下的子目录中,每个子目录均以其相应的 OID 命名。您可以通过在可访问的数据库上执行以下 SQL 查询来将这些 OID 与数据库名称关联起来:
SELECT oid, datname FROM pg_database;
如果某些数据库没有受到损害,请立即使用
pg_dump
: 进行备份
pg_dump -d database_name -f backup_file.sql
对于无法识别的数据库,如果存在备份,现在是启动恢复的最佳时机。
如果重要数据仍然无法访问,请考虑使用先进的工具或专业服务进行数据恢复,例如:
危机后,评估和完善数据库管理策略(包括定期备份、WAL 归档和复制)至关重要,以阻止或减少未来的中断。
如果上述策略没有产生结果,请考虑通过邮件列表或论坛与 PostgreSQL 社区互动,或者向经验丰富的数据库管理员寻求恢复建议。
数据恢复非常复杂,尤其是关键任务数据,因此聘请专业服务通常是最谨慎的做法。