백업 — 지운 데이터를 되돌린다 · 베이스 + WAL · 실습
사고 30초 전으로
목표
DELETE 를 잘못 돌린 뒤 사고 30초 전으로 되돌리는 일을 실제로 합니다.
환경
이 파드에는 PostgreSQL 16 이 이미 떠 있습니다(5432, DB labdb, 사용자lab — 슈퍼유저입니다). 복구본은 같은 파드 안에 5433 으로 따로
띄웁니다.
export PATH=/usr/lib/postgresql/16/bin:$PATHexport PGDATA=/var/lib/postgresql/datapsql -h 127.0.0.1 -U lab -d labdb작업 디렉터리
/root/work/wal 아카이브된 WAL/root/work/base 베이스 백업 (원본 — 건드리지 않는다)/root/work/restore 복구본 (base 를 복사해서 만든다)단계
1. archive_mode = on + 재시작
2. pg_basebackup → /root/work/base
3. 데이터 2행 + 목표 시각 → 03-target.txt
4. delete from ops_note + pg_switch_wal()
5. restore 디렉터리 + recovery.signal
6. 5433 으로 띄워 확인 (2행이어야 함)
7. pg_dump 와 비교 → 07-dump.txt
8. 정리 → 08-notes.md
반드시 지킬 것
- 원본 위에 복구하지 않습니다. 다른 디렉터리, 다른 포트.
- 복구본 설정에
archive_mode = off를 넣으세요. 안 넣으면 - 4단계에서
pg_switch_wal()을 잊지 마세요. 아카이빙은 다 쓴
복구본이 원본의 아카이브를 덮어씁니다.
세그먼트만 복사하므로, 마지막 변경이 아직 안 넘어가 있습니다.
단계 8개
- WAL 아카이빙을 켠다
- 베이스 백업을 뜬다
- 되돌아갈 시각을 남긴다
- 사고를 낸다
- 복구본을 만든다
- 지운 데이터가 살아 있는지 본다
- 논리 백업으로는 왜 안 되는지 본다
- 무엇이 없었으면 못 돌아왔는지