DBAtlas · 데이터베이스 운영 아틀라스

pgBackRest delta restore로 standby 빠르게 재구축

PostgreSQL백업 및 PITR

명령어

sudo systemctl stop postgresql-16
# Keeps the existing PGDATA and fetches only differing files; writes standby.signal:
sudo -u postgres pgbackrest --stanza=<stanza> --delta --type=standby "--recovery-option=primary_conninfo=host=<primary_host> port=5432 user=replicator application_name=<standby_name>" restore
sudo systemctl start postgresql-16
psql -X -c "SELECT status, sender_host FROM pg_stat_wal_receiver;"

하는 일

--delta는 기존 PGDATA의 파일을 백업과 비교하여(크기/타임스탬프 및 checksum) 다른 파일만 복사한다. --type=standby는 standby.signal을 기록하고 recovery-option은 primary_conninfo를 추가한다. standby는 먼저 아카이브로 따라잡은 후 streaming으로 전환한다.

사용 시점

뒤처지거나 timeline이 분기된 standby, 또는 pg_rewind가 실패한 이전 primary를 전체 복사 없이 다시 replica로 만들 때.

주의

delta는 대상 디렉터리에서 다르거나 추가된 파일을 백업의 파일로 교체/제거한다. 잘못된 서버에서 실행하면 그 서버의 데이터가 파괴된다. pgBackRest는 실행 중인 PostgreSQL 위로 복원하는 것을 거부하지만 서비스가 중지되었는지 직접 확인한다. 비밀번호는 primary_conninfo가 아니라 .pgpass에 둔다.

DBAtlas에서 열기 →

관련 항목