DB
PostgreSQL 복구 연습에서 pg_dump 파일만 믿고 놓친 세 가지
백업 파일은 있었지만 실제 복원에서 권한과 확장을 확인하게 된 회고.
파일이 있다고 복구 가능한 건 아니었다
매일 DB 백업을 만들면서도 복원은 해 본 적이 없었다. 테스트 DB에 연습 복원을 하자 권한 오류로 멈췄고, 다음에는 확장이 없었다. 파일 크기가 정상이라는 것만으로 백업이 완성되지 않는다는 것을 알았다.
목록을 보고 빈 DB에 복원
custom format은 복원 전 내용을 볼 수 있어 좋았다. 운영 DB 대신 별도 이름을 사용했다.
pg_dump -Fc -d app_production -f backups/app.dump
pg_restore -l backups/app.dump | less
createdb app_restore_check
pg_restore --no-owner --no-privileges -d app_restore_check backups/app.dump
운영 계정의 소유자 정보를 로컬 사용자로 복원하자 must be member of role 오류가 났다. 검증 환경에는 소유권과 권한을 제외하는 옵션이 더 맞았다.
성공 메시지 뒤에 확인한 것
핵심 테이블 행 수와 마이그레이션을 확인하고 앱도 연결해 봤다. 특히 uuid 확장이 없는 환경이면 스키마 단계부터 실패할 수 있다.
psql -d app_restore_check -c 'SELECT count(*) FROM users;'
psql -d app_restore_check -c 'SELECT * FROM _prisma_migrations ORDER BY finished_at DESC LIMIT 3;'
복구 연습 체크리스트
- 운영과 다른 빈 DB를 만든다.
- 덤프 목록과 확장을 확인한다.
- 핵심 데이터와 앱 연결을 검사한다.
- 걸린 시간과 오류를 기록한다.
백업 성공 로그보다 실제 복구 날짜를 남기는 편이 더 믿을 만했다.