원본 옆에 복원된 상점 열기

PostgreSQLBeginner
지금 연습하기

소개

PAPER & FORM에는 주문 네 개가 있지만 저장된 백업은 R-103에서 끝납니다. 원본 옆에 이전 상태를 열고 주문 명세를 읽으며 복원된 서비스가 독립적으로 새 테스트 주문을 받는지 입증해야 합니다.

이 실습은 독립적으로 시작합니다. 원본 데이터베이스와 backups/cutoff.dump에는 이전 안내형 실습과 같은 세 주문의 복구 시점이 준비되어 있습니다. 기본적인 터미널 사용이 필요하며 데이터베이스와 연결 개념을 다시 설명합니다. 명령은 Workstation, 원본 서비스는 Original Shop, 테스트 대상은 Restored Copy를 사용하세요.

복원하거나 초기화할 수 있는 것은 폐기 가능한 shop_copy 데이터베이스뿐입니다. 원본, 제공 프로그램, 백업, 무관한 uploads/ 파일을 보존하세요. 모든 데이터는 가상이며 결제나 이메일 동작은 없습니다. 하나의 교육 인스턴스에 있는 두 데이터베이스로 논리 내보내기와 격리를 보여 주며 완전한 재해 복구, 하드웨어 이중화, PITR는 제공하지 않습니다.

독립적인 빈 대상에만 복원하기

이 단계에서는 기준 주문의 작동하는 사본을 엽니다. 먼저 Original Shop에서 Orders를 여세요. R-101부터 R-104까지 네 레코드가 있습니다. R-103에는 Rae의 Print pair 두 개와 합계 $36.00가 있습니다. R-104는 Sol의 주문으로 저장 시점 이후 추가되었습니다. 원본에는 남아야 하지만 복원할 아카이브에는 없어야 합니다.

Restored Copy를 엽니다. 녹슨 붉은색 배너에 shop_copy가 표시됩니다. 홈페이지는 열리지만 Orders는 독립 데이터베이스가 비었다고 설명합니다. 홈페이지 응답만으로 복원된 상점을 입증할 수 없습니다.

Workstation으로 전환합니다. pwd는 현재 디렉터리를 표시합니다.

pwd
/home/labex/project/shop-backup

./shopctl identity는 실제 연결을 읽습니다. 저장된 서비스가 데이터베이스, 호스트, 포트, 계정을 고릅니다. shop-source는 읽기 전용 d09_reader로 shop_source에 연결하고 shop-copy는 쓰기 가능한 d09_copy로 shop_copy에 연결합니다. 서버는 127.0.0.1:5432로 같지만 사본 역할은 원본에 연결할 수 없습니다.

./shopctl identity

pg_restore --list는 데이터베이스에 쓰지 않고 사용자 지정 아카이브를 읽습니다. 원본 이름과 orders, order_items 항목을 확인하세요.

pg_restore --list backups/cutoff.dump

데이터베이스는 구조화된 레코드를 저장하며 품목 행은 부모 주문에 연결됩니다. 사용자 지정 아카이브에는 정의, 데이터, 새 식별자를 위한 시퀀스, 연결을 보존하는 제약 조건이 포함됩니다. 바이너리 파일을 psql로 보내는 것이 아니라 pg_restore로 복원합니다. 준비된 덤프와 복원 클라이언트는 모두 PostgreSQL 14입니다.

도우미의 empty 동작은 실제 대상 정보를 출력하고 사용자 테이블이나 시퀀스가 있는 데이터베이스를 거부합니다. 비어 있지 않은 대상에는 보존할 작업이 있을 수 있습니다. --clean이나 --create는 쓰지 마세요. 기존 객체를 삭제하거나 아카이브의 원래 데이터베이스 이름을 사용할 수 있습니다.

다음 명령의 &&는 빈 대상 검사가 성공해야 오른쪽을 실행합니다. --dbname=service=shop-copy는 독립 대상을 명시합니다. --no-owner --no-privileges는 원본 계정과 권한의 가져오기를 피합니다. --single-transaction은 가져오기를 하나의 단위로 처리해 실패 시 롤백합니다. --exit-on-error는 첫 데이터베이스 오류에서 멈춥니다. 보호 명령 전체를 실행하세요.

./shopctl empty && pg_restore --dbname=service=shop-copy --no-owner --no-privileges --single-transaction --exit-on-error backups/cutoff.dump

대상 정보 다음에 EMPTY: restore may proceed가 나옵니다. 성공한 pg_restore는 대개 아무것도 출력하지 않습니다. 재시도 시 REFUSED: target is not empty가 뜬다면 이전 가져오기가 이미 성공했을 수 있습니다. 초기화하기 전에 사본을 먼저 읽으세요.

records copy는 실제 연결된 주문과 품목 행을 읽습니다.

./shopctl records copy

R-101, R-102, R-103과 합계 $98.00가 있어야 하고 R-104는 없어야 합니다. Restored Copy에서 Orders, R-103, 영수증을 엽니다. Print pair 두 개와 $36.00가 있어야 합니다. Original Shop도 다시 확인하세요. Sol의 R-104와 전체 합계 $124.00가 남아 있습니다.

잘못된 아카이브를 썼거나 복원 실패를 다시 시도하려면 이 과정의 폐기 가능한 대상만 초기화하세요. 도우미는 대상 정보를 보여 주고 정확한 이름을 요구합니다. 다음은 선택적 복구 명령이며 성공 후 매번 실행하는 단계가 아닙니다.

./shopctl reset-copy shop_copy

shop_copy만 폐기합니다. 이후 위의 보호된 복원을 다시 하세요. 원본을 초기화하거나 삭제하지 말고 광범위한 데이터베이스 정리 명령도 쓰지 마세요. 검사는 실제 사본을 관찰할 뿐 대신 복원하지 않습니다.

원본을 바꾸지 않고 사본에 쓸 수 있음을 입증하기

이 단계에서는 사본에 실제로 씁니다. 읽기 전용 표시가 정확해도 복원된 시퀀스, 관계, 쓰기 연결이 고장일 수 있습니다. 독립 사본에 실제 테스트 주문을 만들고 두 상점을 비교합니다. Restored Copy에서 Collection을 열어 양식으로 내려갑니다. 제출 전 Writing to: shop_copy · RESTORED COPY와 녹슨 붉은색 배너를 읽으세요. 이 테스트를 Original Shop에 제출하지 마세요.

다음을 정확히 사용합니다.

필드 값
Reference R-901
Name Copy test
Item Print pair
Quantity 1

Place order ↗를 선택합니다. R-901은 품목 한 개, 합계 $18.00입니다. 영수증을 다운로드해 shop_copy가 적혀 있는지 확인하세요. 새 주문은 복원된 시퀀스와 외래 키 관계를 사용하며 미리 작성된 페이지를 넣은 것이 아닙니다. 같은 번호를 다시 제출하면 두 번째 주문 대신 Already recorded가 나옵니다.

같은 사본의 Orders를 엽니다. R-101, R-102, R-103, R-901이 있고 R-104는 없어야 합니다. Original Shop의 Orders에는 R-101부터 R-104가 남고 R-901은 없습니다. 두 앱이 같은 데이터베이스에 쓴다면 배너만 달라서는 충분하지 않습니다.

Workstation에서 두 연결 정보를 표시하고 실제 데이터 집합을 읽습니다.

./shopctl identity
./shopctl records copy
./shopctl records source

사본은 합계 $116.00, 원본은 여전히 $124.00입니다. 모든 행이 영원히 같아야 한다고 비교하면 안 됩니다. R-104는 이후 원본에만, R-901은 복원 사본에만 속합니다. 공유하는 기준 레코드와 각 측에 허용된 차이를 비교하세요.

원본 양식은 R-901을 쓰지 않고 거부합니다. 탭을 잘못 선택했다면 Check the destination을 읽고 Restored Copy로 바꿔 제출하세요. 모르는 번호도 거부하므로 양식을 고쳐 재시도합니다. 기존 R-901의 이름, 품목, 수량이 틀렸다면 ./shopctl correct copy R-901가 실제 대상을 보여 주고 해당 테스트만 Copy test / Print pair / 1로 바꿉니다. 다른 사본 주문과 원본의 모든 데이터는 그대로입니다. 폐기 가능한 사본만 처음부터 다시 할 필요가 있다면 단계 1의 정확한 reset-copy shop_copy 복구를 사용하고 재복원한 다음 테스트 주문을 한 번만 추가하세요.

최종 검사는 두 실제 데이터베이스와 사이트를 읽고 무관한 업로드를 보존하며 별도 폐기 가능 데이터베이스에서 아카이브를 시험합니다. 테스트 주문을 만들거나 사본을 고쳐 주지 않습니다. 이제 백업에는 완전한 데이터, 명확한 기준점, 독립적이고 쓰기 가능한 복원의 증거가 있습니다.

요약

실제 원본과 대상을 식별하고 빈 대상을 보호한 뒤 사용자 지정 아카이브를 트랜잭션으로 복원하고 완전한 주문 명세를 읽었습니다. 사본 전용 새 주문은 독립적이고 쓰기 가능한 서비스를 입증했고 원본은 이후 주문을 보존했습니다. 이 연습은 논리 복원 연습의 증거이며 전체 운영 복구 전략은 아닙니다.