需要把 PostgreSQL 恢复到误删数据、错误更新或故障发生前的某个时间点。PITR 依赖基础备份和连续 WAL 归档,适合对 RPO 要求较高的生产库。
psql -c "ALTER SYSTEM SET wal_level = replica;"
psql -c "ALTER SYSTEM SET archive_mode = on;"
psql -c "ALTER SYSTEM SET archive_command = 'pgbackrest --stanza=main archive-push %p';"
psql -c "SELECT pg_reload_conf();"
pgbackrest --stanza=main stanza-create
pgbackrest --stanza=main check
pgbackrest --stanza=main backup --type=full
pgbackrest info
psql -c "SELECT archived_count, failed_count, last_archived_wal FROM pg_stat_archiver;"
pgbackrest --stanza=main check
psql -c "SELECT pg_create_restore_point('before_batch_update');"
pg_ctl -D /var/lib/postgresql/data stop -m fast
pgbackrest --stanza=main --delta restore
cat > /var/lib/postgresql/data/postgresql.auto.conf <<'EOF'
restore_command = 'pgbackrest --stanza=main archive-get %f "%p"'
recovery_target_time = '2026-10-18 02:30:00+08'
recovery_target_action = 'promote'
EOF
touch /var/lib/postgresql/data/recovery.signal
pg_ctl -D /var/lib/postgresql/data start
psql -c "SELECT pg_is_in_recovery();"
psql -c "SELECT * FROM critical_table LIMIT 10;"
pgbackrest info 显示基础备份和 WAL 归档完整。pg_stat_archiver 的 failed_count 为 0。pg_is_in_recovery() 返回 f。archive_command 失败但没人监控,WAL 堆积或丢失。recovery.signal 或 restore_command 配错,数据库反复重启。pgbackrest — 基础备份、WAL 归档和恢复pg_ctl — 启停数据库psql — 创建还原点和验证数据pg_stat_archiver — 归档状态wal-g — 另一种 WAL 备份工具