You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL 10无法启动:主/副检查点无效,求无备份恢复方案

PostgreSQL 10 检查点错误修复方案(无需备份/备份恢复)

一、无需备份的应急修复步骤

注意:以下操作存在数据丢失风险,仅在无备份可用时尝试,操作前务必完整拷贝数据目录(默认路径/var/lib/postgresql/10/main)到安全存储位置。

  1. 修改配置启用强制恢复

    • 编辑配置文件:sudo vi /etc/postgresql/10/main/postgresql.conf
    • 添加或修改参数:
      recovery_target_time = '2023-10-26 07:17:31'  # 填写日志中"database system is shut down"对应的时间
      recovery_target_action = 'promote'
      
    • 若上述参数无效,尝试临时添加:
      ignore_system_indexes = on
      
  2. 单用户模式修复索引

    • 终止所有PostgreSQL进程:sudo pkill -9 postgres
    • 切换至postgres用户:sudo su - postgres
    • 启动单用户模式:postgres --single -D /var/lib/postgresql/10/main
    • 进入后执行索引重建:REINDEX DATABASE your_db_name;(替换为你的实际数据库名),输入\q退出。
  3. 强制启动数据库

    • 执行启动命令:sudo pg_ctl -D /var/lib/postgresql/10/main start -m fast
    • 启动成功后立即执行全量备份:pg_dumpall -f /safe/path/full_backup.sql

二、基于备份的安全恢复实践

若有可用备份,优先采用此方案:

  1. 停止PostgreSQL服务

    • sudo systemctl stop postgresql
  2. 清理损坏的数据目录

    • sudo rm -rf /var/lib/postgresql/10/main/*
  3. 恢复全量备份

    • 切换至postgres用户:sudo su - postgres
    • 导入备份:psql -f /path/to/your/full_backup.sql postgres
  4. 应用增量WAL日志(若启用归档)

    • 将WAL归档文件拷贝至指定目录,修改postgresql.conf中的restore_command指向归档路径,启动数据库自动完成增量恢复。
  5. 验证数据完整性

    • 启动服务:sudo systemctl start postgresql
    • 连接数据库,通过查询关键表数据(如SELECT count(*) FROM your_table;)确认数据完整。

三、后续预防措施

  • 修改pg_hba.conf后,优先使用pg_ctl reload或sudo systemctl reload postgresql重载配置,无需重启服务。
  • 如需重启,先执行SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid();终止所有连接,再执行优雅关闭:sudo systemctl stop postgresql。
  • 配置定期自动全量备份,启用WAL归档,确保数据可恢复。

内容的提问来源于stack exchange,提问作者syer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:00:27