항상,포스트그레SQL유지관리미리 로그 작성(WAL)에서pg_xlog/클러스터의 하위 디렉토리 데이터 디렉토리. 로그는 다음에 대한 모든 변경 사항을 설명합니다. 데이터베이스의 데이터 파일. 이 로그는 주로 충돌 안전을 위해 존재합니다. 목적: 시스템이 충돌하는 경우 데이터베이스를 다음 위치로 복원할 수 있습니다. 일관성에 의한 것"재생 중"로그 마지막 체크포인트 이후에 작성된 항목입니다. 그러나 존재는 로그를 사용하면 세 번째 백업 전략을 사용할 수 있습니다. 데이터베이스: 파일 시스템 수준 백업과 백업을 결합할 수 있습니다. WAL 파일 중. 복구가 필요한 경우 백업을 복원합니다. 그런 다음 백업된 WAL 파일을 재생하여 백업을 가져옵니다. 현재 시간까지. 이 접근 방식은 관리하기가 더 복잡합니다. 이전 접근 방식보다 약간의 이점이 있습니다. 상당한 이점:
우리는 완벽하게 일관된 와이즈 토토이 필요하지 않습니다. 출발점. 와이즈 토토의 내부 불일치는 로그 재생을 통해 수정됩니다(이는 크게 중요하지 않습니다). 충돌 복구 중에 발생하는 것과 다릅니다). 그래서 우리는 파일 시스템 스냅샷 기능은 필요하지 않습니다. 그냥타르또는 유사한 보관 도구.
우리는 무한정 긴 시퀀스를 함께 묶을 수 있기 때문에 재생용 WAL 파일을 지속적으로 와이즈 토토할 수 있습니다. 단순히 WAL 파일을 계속해서 보관하면 됩니다. 이것은 특히 대규모 데이터베이스에 유용합니다. 자주 전체 와이즈 토토을 수행하는 것이 편리합니다.
WAL을 다시 재생해야 한다는 내용은 없습니다. 끝까지 항목을 입력합니다. 재생을 중지할 수 있는 시간은 다음과 같습니다. 어떤 지점에서든 데이터베이스의 일관된 스냅샷을 보유합니다. 그때였습니다. 따라서 이 기술은 다음을 지원합니다.특정 시점 복구: 가능합니다 기지 이후 언제든지 데이터베이스를 해당 상태로 복원 와이즈 토토이 이루어졌습니다.
우리가 일련의 WAL 파일을 계속해서 다른 파일에 공급한다면 동일한 기본 와이즈 토토 파일이 로드된 머신 우리는"상시 대기"시스템: 시간 어느 지점에서든 두 번째 머신을 불러올 수 있으며 데이터베이스의 거의 최신 복사본입니다.
일반 파일 시스템 백업 기술과 마찬가지로 이 방법은 전체 데이터베이스 클러스터의 복원만 지원할 수 있습니다. 하위 집합. 또한 많은 아카이브 스토리지가 필요합니다. 백업은 부피가 클 수 있으며 사용량이 많은 시스템에서는 많은 양의 백업이 생성됩니다. 보관해야 하는 WAL 트래픽의 메가바이트. 그래도 그렇죠 높은 여러 상황에서 선호되는 백업 기술 신뢰성이 필요합니다.
온라인 백업을 사용하여 성공적으로 복구하려면 다음이 필요합니다. 다시 확장되는 아카이브된 WAL 파일의 연속 시퀀스 최소한 백업 시작 시간까지입니다. 시작하려면, WAL 파일 보관 절차를 설정하고 테스트해야 합니다.이전에당신은 당신의 1루 와이즈 토토. 따라서 우리는 먼저 메커니즘에 대해 논의합니다. WAL 파일을 보관 중입니다.
추상적인 의미에서는 달리기포스트그레SQL시스템은 무기한 생산합니다. WAL 레코드의 긴 시퀀스. 시스템이 물리적으로 분할됨 이 시퀀스를 WAL로 변환세그먼트 파일, 일반적으로 각각 16MB입니다(크기는 건축할 때 변경됨포스트그레SQL). 세그먼트 파일이 제공됩니다. 추상 WAL에서의 위치를 반영하는 숫자 이름 순서. WAL 아카이빙을 사용하지 않을 때 시스템은 일반적으로 몇 개의 세그먼트 파일만 생성한 다음"재활용"더 이상 필요하지 않은 이름을 변경하여 파일을 더 높은 세그먼트 번호로 분할합니다. 다음과 같이 가정됩니다. 내용이 마지막 체크포인트보다 앞에 있는 세그먼트 파일 더 이상 관심이 없으며 재활용할 수 있습니다.
WAL 데이터를 보관할 때 우리는 다음의 내용을 캡처하고 싶습니다. 각 세그먼트 파일이 채워지면 해당 데이터를 저장합니다. 세그먼트 파일이 재사용을 위해 재활용되기 전 어딘가에 있습니다. 애플리케이션과 사용 가능한 하드웨어에 따라 다양한 방법이 있을 수 있습니다."저장하는 중 데이터가 어딘가에 있습니다.": 세그먼트 파일을 다른 머신에 있는 NFS 마운트 디렉토리를 테이프 드라이브(파일을 복원할 수 있는 방법이 있는지 확인) 원본 파일 이름으로) 또는 함께 일괄적으로 굽습니다. CD로 저장하거나 완전히 다른 것으로 저장합니다. 제공하기 위해 최대한의 유연성을 갖춘 데이터베이스 관리자입니다.PostgreSQL만들지 않으려고 노력합니다 아카이빙이 수행되는 방법에 대한 모든 가정. 대신에,포스트그레SQL하자 관리자는 복사하기 위해 실행할 쉘 명령을 지정합니다. 완성된 세그먼트 파일을 어디로든 이동해야 합니다. 명령 다음과 같이 간단할 수도 있습니다.cp또는 복잡한 쉘 스크립트를 호출할 수도 있습니다. 당신.
사용할 쉘 명령은 다음에 의해 지정됩니다.archive_command구성 매개변수, 실제로는 항상 에 배치됨postgresql.conf파일. 이 문자열에서는 임의의%p다음으로 대체됨 보관할 파일의 절대 경로, any%f은 파일 이름으로만 대체됩니다. 쓰기%%실제 내용을 삽입해야 하는 경우%명령의 문자입니다. 는 가장 유용한 명령은 다음과 같습니다.
archive_command = 'cp -i %p /mnt/server/archivedir/%f </dev/null'
보관 가능한 WAL 세그먼트를 디렉토리에 복사합니다/mnt/서버/아카이브디렉터리. (이것은 예를 들어 권장 사항이 아니며 일부에서는 작동하지 않을 수 있습니다. 플랫폼.)
보관 명령은 다음의 소유권으로 실행됩니다. 동일한 사용자입니다.포스트그레SQL서버가 다음 계정으로 실행 중입니다. 이후 아카이브되는 일련의 WAL 파일에는 효과적으로 데이터베이스에 있는 모든 내용을 확인하고 싶을 것입니다. 보관된 데이터는 엿보는 눈으로부터 보호됩니다. 예를 들어, 그룹 또는 전체 읽기 권한이 없는 디렉토리에 보관 액세스합니다.
아카이브 명령이 0을 반환하는 것이 중요합니다. 종료 상태는 성공한 경우에만 가능합니다. 결과가 0이 되면,PostgreSQL다음과 같이 가정합니다 WAL 세그먼트 파일이 성공적으로 보관되었으며 제거하거나 재활용하십시오. 그러나 0이 아닌 상태는 다음과 같습니다.포스트그레SQL그 파일은 보관되지 않았습니다. 종료될 때까지 주기적으로 다시 시도합니다. 성공합니다.
보관 명령은 일반적으로 거부하도록 설계되어야 합니다. 기존 아카이브 파일을 덮어쓰려면 이것은 귀하의 무결성을 유지하는 중요한 안전 기능 관리자 오류(예: 두 개의 서로 다른 서버를 동일한 아카이브 디렉터리로 출력). 제안된 아카이브 명령을 테스트하여 확인하는 것이 좋습니다. 실제로 기존 파일을 덮어쓰지 않습니다.그리고 0이 아닌 값을 반환합니다 이 경우 상태. 우리는 그것을 발견했습니다cp -i일부 플랫폼에서는 이 작업이 올바르게 수행되지만 다른 사람이 아닙니다. 선택한 명령 자체가 이를 처리하지 못하는 경우 올바른 경우에는 테스트할 명령을 추가해야 합니다. 아카이브 파일이 이미 존재합니다. 예를 들어, 뭔가 좋아요
archive_command = '테스트! -f .../%f && cp %p .../%f'
대부분의 Unix 변형에서 올바르게 작동합니다.
보관 설정을 설계하는 동안 무엇을 할 것인지 고려하십시오. 아카이브 명령이 반복적으로 실패하면 발생합니다. 측면에서 운영자 개입이 필요하거나 아카이브가 부족합니다. 공간의. 예를 들어, 테이프에 쓰는 경우 이런 일이 발생할 수 있습니다. 오토체인저 없이; 테이프가 가득 차면 더 이상 아무것도 없습니다 테이프를 교체할 때까지 보관할 수 있습니다. 당신은 보장해야 오류 조건이나 인간 운영자에 대한 요청은 상황이 해결될 수 있도록 적절하게 보고되었습니다. 비교적 빨리.pg_xlog/디렉토리는 다음까지 WAL 세그먼트 파일로 계속 채워집니다. 상황은 해결되었습니다.
보관 명령의 속도는 중요하지 않으므로 오래 걸립니다. 서버의 평균 속도를 따라잡을 수 있기 때문입니다. WAL 데이터를 생성합니다. 정상 작동은 계속됩니다. 보관 프로세스가 약간 뒤쳐집니다. 보관이 중단되는 경우 상당히 뒤쳐지면 데이터 양이 늘어납니다. 재해가 발생하면 손실됩니다. 그것은 또한 그 말은pg_xlog/디렉토리는 아직 보관되지 않은 세그먼트 파일이 많이 포함되어 있습니다. 결국 사용 가능한 디스크 공간을 초과할 수 있습니다. 당신은 조언을 아카이빙 프로세스를 모니터링하여 작동하는지 확인합니다. 당신 뜻대로요.
최대한 복구할 수 있을지 걱정된다면 현재 순간에 추가 조치를 취할 수 있습니다. 현재 부분적으로 채워진 WAL 세그먼트도 어딘가에 복사되었습니다. 이는 서버가 다음과 같은 경우 특히 중요합니다. WAL 트래픽이 거의 발생하지 않습니다. 그렇습니다) WAL 이전에 오랜 시간이 걸릴 수 있기 때문입니다. 세그먼트 파일이 완전히 채워져 보관할 준비가 되었습니다. 하나 이를 처리할 수 있는 가능한 방법은 다음을 설정하는 것입니다.크론작업을 주기적으로(1분에 한 번, 아마도) 현재 WAL 세그먼트 파일을 식별하고 저장합니다. 안전한 곳. 그런 다음 보관된 WAL의 조합 세그먼트와 저장된 현재 세그먼트만으로도 충분합니다. 언제든지 현재 시간으로부터 1분 이내로 복원할 수 있습니다. 이 동작은 현재 내장되어 있지 않습니다.PostgreSQL우리는 원하지 않았기 때문에 의 정의를 복잡하게 만듭니다.archive_command연속적으로 보관된 항목을 추적하도록 요구하지만 동일한 WAL 파일의 다른 복사본.archive_command은 완료된 WAL 세그먼트에서만 호출됩니다. 경우를 제외하고 실패를 재시도하는 경우에는 한 번만 호출됩니다. 주어진 파일 이름.
보관 명령을 작성할 때 다음을 가정해야 합니다. 보관할 파일 이름은 최대 64자까지 가능하며 ASCII 문자, 숫자, 점의 조합을 포함할 수 있습니다. 원래 전체 경로를 기억할 필요는 없습니다. (%p) 하지만 기억할 필요가 있는 것은 파일 이름(%f).
WAL 아카이브를 사용하면 복원이 가능하지만 귀하의 데이터에 대한 모든 수정 사항PostgreSQL데이터베이스는 복원되지 않습니다 구성 파일에 대한 변경 사항(즉,postgresql.conf, pg_hba.conf그리고pg_ident.conf), 수동으로 편집되므로 SQL 작업을 통해서가 아니라. 당신은 와이즈 토토할 위치에 있는 구성 파일 정기적인 파일 시스템 와이즈 토토 절차. 참조섹션 16.4.1구성 파일을 재배치하는 방법.
기본 와이즈 토토을 만드는 절차는 비교적 간단합니다:
WAL 보관이 활성화되어 작동하는지 확인하세요.
수퍼유저로 데이터베이스에 연결하고 명령
SELECT pg_start_backup('라벨');
        어디에서라벨당신이 원하는 문자열은 무엇입니까?
        이 와이즈 토토 작업을 고유하게 식별하는 데 사용하려고 합니다.
        (한 가지 좋은 방법은 원하는 전체 경로를 사용하는 것입니다.
        와이즈 토토 덤프 파일을 넣습니다.)pg_start_backup생성백업 라벨파일, 호출됨backup_label, 클러스터 디렉터리에서
        백업에 대한 정보입니다.
클러스터 내의 어떤 데이터베이스를 사용하는지는 중요하지 않습니다. 이 명령을 실행하려면 에 연결하세요. 결과를 무시해도 됩니다 함수에 의해 반환됩니다. 하지만 오류가 보고되면 처리하세요. 계속하기 전에 그 내용을 확인하세요.
편리한 방법을 사용하여 백업을 수행하십시오. 다음과 같은 파일 시스템 백업 도구타르또는cpio. 꼭 필요한 것도 아니고 데이터베이스의 정상적인 작동을 중지하는 것이 바람직합니다. 너는 이렇게 해.
다시 슈퍼유저로 데이터베이스에 연결하고 발행하십시오. 명령
SELECT pg_stop_backup();
성공적으로 반환되어야 합니다.
백업 중에 사용된 WAL 세그먼트 파일이 일반적인 데이터베이스 활동의 일부로 보관된 경우 완료.
금액에 대해 크게 걱정할 필요는 없습니다.
    사이에 경과된 시간pg_start_backup그리고 실제의 시작
    백업 또는 백업 종료 사이pg_stop_backup; 몇 분만 지연해도 안 돼
    무엇이든 다치게 하세요. 그러나 당신은 다음 사항을 확실히 확신해야 합니다.
    작업은 순서대로 수행되며 중복되지 않습니다.
와이즈 토토 덤프에 모든 파일이 포함되어 있는지 확인하십시오. 데이터베이스 클러스터 디렉터리 아래(예:/usr/local/pgsql/data). 당신이 사용하는 경우 이 디렉토리 아래에 상주하지 않는 테이블스페이스는 그것들도 포함하도록 주의하십시오(그리고 백업이 덤프는 심볼릭 링크를 링크로 보관합니다. 그렇지 않으면 복원됩니다. 테이블스페이스를 엉망으로 만들 것입니다.)
그러나 백업 덤프에서 다음 파일을 생략할 수 있습니다.pg_xlog/하위 디렉토리 클러스터 디렉토리. 이 약간의 합병증은 가치가 있습니다 복원할 때 실수할 위험이 줄어들기 때문입니다. 이것은 다음과 같은 경우 쉽게 정리할 수 있습니다.pg_xlog/은 클러스터 외부를 가리키는 심볼릭 링크 어쨌든 성능을 위한 일반적인 설정인 디렉토리 이유.
이 백업을 사용하려면 모든 항목을 보관해야 합니다.
    파일 도중 및 이후에 생성된 WAL 세그먼트 파일
    시스템 백업. 이를 수행하는 데 도움이 되도록,pg_stop_backup함수는 다음을 생성합니다와이즈 토토 기록 파일즉시 저장됩니다.
    WAL 아카이브 영역으로 이동합니다. 이 파일의 이름은 첫 번째 파일의 이름을 따서 지정되었습니다.
    WAL 세그먼트 파일을 활용해야 합니다.
    백업. 예를 들어, 시작 WAL 파일이 다음과 같은 경우0000000100001234000055CD와이즈 토토 기록 파일
    다음과 같은 이름이 지정됩니다.0000000100001234000055CD.007C9330.backup. (
    파일 이름의 두 번째 숫자는 정확한 위치를 나타냅니다.
    WAL 파일 내에 있으며 일반적으로 무시할 수 있습니다.) 일단
    파일 시스템 백업과 WAL 세그먼트를 안전하게 보관했습니다.
    백업 중에 사용되는 파일(백업에 지정된 대로)
    히스토리 파일), 이름이 숫자로 표시된 모든 보관된 WAL 세그먼트
    파일 시스템 백업을 복구하는 데 더 이상 필요하지 않으며
    삭제될 수 있습니다. 그러나 여러 개를 유지하는 것을 고려해야 합니다.
    복구할 수 있다는 것을 절대적으로 확신하는 백업 세트
    귀하의 데이터. 완료된 WAL 세그먼트 파일만 기억하세요.
    보관되므로 실행 사이에 지연이 발생합니다.pg_stop_backup그리고 보관
    파일 시스템 백업을 만드는 데 필요한 모든 WAL 세그먼트 파일
    일관성.
와이즈 토토 기록 파일은 작은 텍스트 파일입니다. 그것
    귀하가 제공한 라벨 문자열을 포함합니다.pg_start_backup뿐만 아니라 시작 및
    백업 종료 시간. 식별을 위해 라벨을 사용한 경우
    연관된 덤프 파일이 보관되는 곳에 보관된
    기록 파일은 복원할 덤프 파일을 알려주기에 충분합니다.
    그렇게 해야 합니까?
보관된 모든 WAL 파일을 보관해야 하므로 마지막 기본 와이즈 토토으로 돌아가서 기본 와이즈 토토 사이의 간격 와이즈 토토은 일반적으로 저장 용량에 따라 선택해야 합니다. 보관된 WAL 파일을 확장하고 싶습니다. 당신은 또한 고려해야합니다 회복하는 경우 회복에 소요될 준비가 된 기간 필요해야 합니다. 시스템은 해당 항목을 모두 재생해야 합니다. WAL 세그먼트, 오랜 시간이 걸렸다면 다소 시간이 걸릴 수 있음 마지막 기본 와이즈 토토 이후의 시간입니다.
또한 주목할 가치가 있는 것은 다음과 같습니다.pg_start_backup함수는 이름이 지정된 파일을 만듭니다.backup_label데이터베이스 클러스터에서
    디렉토리는 다음에 의해 다시 제거됩니다.pg_stop_backup. 이 파일은 물론
    백업 덤프 파일의 일부로 보관됩니다. 백업 라벨
    파일에는 귀하가 제공한 라벨 문자열이 포함되어 있습니다.pg_start_backup및 해당 시간pg_start_backup이 실행되었고,
    시작 WAL 파일의 이름입니다. 혼란스러운 경우에는
    따라서 와이즈 토토 덤프 파일 내부를 살펴보고
    덤프 파일이 어떤 와이즈 토토 세션에 포함되었는지 정확히 확인
    에서.
또한 와이즈 토토 덤프를 만드는 것도 가능합니다.
    포스트마스터가 중지되었습니다. 이 경우에는 분명히 사용할 수 없습니다.pg_start_backup또는pg_stop_backup, 그러므로 당신은
    어떤 와이즈 토토 덤프가 있는지 추적하려면 사용자 장치에 맡겨야 합니다.
    관련 WAL 파일이 얼마나 오래 전으로 거슬러 올라가는지. 그것은
    일반적으로 온라인 와이즈 토토 절차를 따르는 것이 더 좋습니다.
    위.
좋아요, 최악의 상황이 발생했고 당신은 회복해야 합니다 당신의 백업. 절차는 다음과 같습니다.
포스트마스터가 실행 중이라면 중지하세요.
공간이 있으면 전체 클러스터를 복사하십시오 데이터 디렉터리 및 모든 테이블스페이스를 임시 위치로 복사 나중에 필요할 경우를 대비해. 이 예방 조치는 시스템에 충분한 여유 공간이 있어야 합니다. 기존 데이터베이스의 복사본 두 개를 보관하세요. 그렇지 않으면 공간이 충분하면 최소한 의 내용pg_xlog클러스터 데이터 디렉터리의 하위 디렉터리입니다. 시스템이 가동되기 전에 보관되지 않은 로그가 포함되어 있습니다. 다운.
아래의 모든 기존 파일과 하위 디렉터리를 정리합니다. 클러스터 데이터 디렉터리 및 루트 디렉터리 아래 사용 중인 테이블스페이스 중 하나입니다.
백업 덤프에서 데이터베이스 파일을 복원하십시오. 수 올바른 소유권으로 복원되도록 주의하세요. (루트가 아닌 데이터베이스 시스템 사용자!) 그리고 권한이 있는 권한. 테이블스페이스를 사용하는 경우 다음을 수행할 수 있습니다. 의 심볼릭 링크를 확인하십시오.pg_tblspc/올바르게 복원되었습니다.
다음에 있는 모든 파일을 제거하세요.pg_xlog/; 이것은 백업 덤프에서 나온 것입니다 그러므로 아마도 현재보다는 더 이상 사용되지 않을 것입니다. 만약에 당신은 보관처리하지 않았습니다pg_xlog/에 그런 다음 다시 생성하고, 반드시 하위 디렉터리pg_xlog/archive_status/또한.
당신이 저장한 WAL 세그먼트 파일을 보관 해제한 경우 2단계에서 다음 위치에 복사하세요.pg_xlog/. (복사하는 것이 가장 좋습니다. 해당 파일을 이동하면 수정되지 않은 파일이 그대로 유지됩니다. 문제가 발생하면 다시 시작해야 합니다.)
복구 명령 파일 생성recovery.conf클러스터 데이터 디렉토리 (참조복구 설정). 일시적으로 수정할 수도 있습니다.pg_hba.conf보통을 방지하기 위해 복구가 완료되었다고 확신할 때까지 사용자는 연결하지 못합니다. 일했다.
포스트마스터를 시작하세요. 우체국장이 들어갈 것이다 복구 모드를 선택하고 보관된 WAL을 통해 읽기를 진행합니다. 필요한 파일입니다. 복구 프로세스가 완료되면, 우체국장이 이름을 바꿀 것입니다recovery.conf에복구.완료(우연히 방지하기 위해) 나중에 충돌이 발생할 경우 복구 모드로 다시 들어가기) 그런 다음 일반 데이터베이스 작업을 시작합니다.
데이터베이스의 내용을 검사하여 다음이 있는지 확인하십시오. 당신이 원하는 곳으로 회복되었습니다. 그렇지 않은 경우 단계로 돌아갑니다. 1. 모든 것이 정상이면 복원을 통해 사용자를 허용합니다.pg_hba.conf정상으로.
이 모든 것의 핵심 부분은 복구 명령을 설정하는 것입니다 복구 방법과 복구 범위를 설명하는 파일 복구가 실행되어야 합니다. 당신은 사용할 수 있습니다recovery.conf.sample(일반적으로 다음 위치에 설치됩니다. 설치공유/디렉토리)를 프로토타입. 반드시 지정해야 하는 한 가지는recovery.conf이것은restore_command, 이는 다음을 알려줍니다.PostgreSQL보관된 WAL을 다시 얻는 방법 파일 세그먼트. 처럼archive_command, 이것은 쉘 명령 문자열입니다. 다음을 포함할 수 있습니다.%f, 대체됨 원하는 로그 파일 이름으로, 그리고%p은 절대 경로로 대체됩니다. 로그 파일을 복사하십시오. 쓰기%%당신이 실제 내용을 삽입해야 합니다.%문자 명령. 가장 간단하고 유용한 명령은 다음과 같습니다.
restore_command = 'cp /mnt/server/archivedir/%f %p'
이전에 보관된 WAL 세그먼트를 다음에서 복사합니다. 디렉토리/mnt/서버/아카이브디렉터리. 당신 물론 훨씬 더 복잡한 것을 사용할 수도 있습니다. 심지어 운영자에게 마운트를 요청하는 쉘 스크립트도 마찬가지입니다. 적절한 테이프.
명령이 0이 아닌 종료 상태를 반환하는 것이 중요합니다 실패시. 명령할 것입니다다음과 같은 로그 파일을 요청받습니다. 아카이브에 존재하지 않습니다. 그렇다면 0이 아닌 값을 반환해야 합니다. 물었다. 이는 오류 조건이 아닙니다. 또한 의 기본 이름%p경로는 다음과 같습니다 와는 다르다%f; 그들을 기대하지 마세요 교환이 가능합니다.
아카이브에서 찾을 수 없는 WAL 세그먼트는 찾았다pg_xlog/; 이것은 사용을 허용합니다 보관되지 않은 최근 세그먼트 중 그러나 세그먼트는 아카이브에서 사용 가능한 파일이 파일보다 우선적으로 사용됩니다. 에서pg_xlog/. 시스템은 그렇지 않습니다 기존 내용을 덮어씁니다.pg_xlog/보관된 파일을 검색할 때.
일반적으로 복구는 사용 가능한 모든 WAL을 통해 진행됩니다. 세그먼트를 사용하여 데이터베이스를 현재 지점으로 복원합니다. 시간에 맞춰(또는 사용 가능한 WAL을 고려할 때 최대한 가깝게) 세그먼트). 하지만 이전 시점으로 복구하고 싶다면 시간(예를 들어 주니어 DBA가 메인을 삭제하기 직전) 트랜잭션 테이블)에서 필요한 중지 지점을 지정하기만 하면 됩니다.recovery.conf. 다음을 지정할 수 있습니다. 중지 지점, 다음으로 알려져 있음"회복 대상", 날짜/시간 또는 완료 기준 특정 거래 ID. 이 글을 쓰는 시점에서는 날짜/시간만 표시됩니다. 이 옵션은 도움이 되는 도구가 없기 때문에 매우 유용합니다. 어떤 거래 ID를 사용할 것인지 정확하게 식별하세요.
참고:중지 지점은 종료 이후에 있어야 합니다. 기본 와이즈 토토 시간(시간)
pg_stop_backup). 베이스를 사용할 수 없습니다. 해당 백업이 아직 남아 있던 시점으로 복구하는 백업 계속됩니다. (이러한 시점으로 복구하려면 이전 상태로 돌아가야 합니다. 이전 기본 백업을 수행하고 거기에서 롤포워드합니다.)
이 설정은 다음에서만 가능합니다.recovery.conf파일에 대해서만 신청하세요. 회복 기간. 어떤 경우든 재설정해야 합니다. 수행하려는 후속 복구. 그들은 그럴 수 없다 복구가 시작되면 변경되었습니다.
보관된 파일을 검색하기 위해 실행하는 쉘 명령 WAL 파일 시리즈의 세그먼트입니다. 이 매개변수는 필수. 어느%f문자열에서 검색할 파일의 이름으로 대체됩니다. 아카이브 및 기타%p이다 복사할 절대 경로로 대체됩니다. 서버. 쓰기%%삽입하려면 실제%문자 명령.
명령이 0을 반환하는 것이 중요합니다 성공하는 경우에만 종료 상태입니다. 명령할 것이다질문을 받다 아카이브에 없는 파일 이름의 경우 그것 요청 시 0이 아닌 값을 반환해야 합니다. 예:
restore_command = 'cp /mnt/server/archivedir/%f "%p"' Restore_command = '복사 /mnt/server/archivedir/%f "%p"' # 윈도우
이 매개변수는 타임스탬프를 지정합니다. 복구가 진행됩니다. 다음 중 최대 하나recovery_target_time그리고recovery_target_xid지정할 수 있습니다. 기본값은 끝까지 복구하는 것입니다. WAL 로그의 정확한 정지 지점도 의 영향을 받음recovery_target_inclusive.
이 매개변수는 최대 거래 ID를 지정합니다. 어떤 복구가 진행될지. 그 동안 명심하세요. 거래 ID는 순차적으로 할당됩니다. 거래 시작, 거래는 한 번에 완료될 수 있습니다. 숫자 순서가 다릅니다. 거래는 복구된 것은 이전에 커밋된 것입니다(그리고 선택적으로 포함) 지정된 것을 포함합니다. 다음 중 최대 하나recovery_target_xid그리고recovery_target_time지정할 수 있습니다. 기본값은 끝까지 복구하는 것입니다. WAL 로그의 정확한 정지 지점도 의 영향을 받음recovery_target_inclusive.
지정된 직후에 중지할지 여부를 지정합니다. 복구 대상(참) 또는 복구 대상 바로 앞(거짓). 둘 다에 적용됩니다recovery_target_time그리고recovery_target_xid, 이 복구를 위해 지정된 것은 무엇이든 됩니다. 이 정확히 다음을 갖는 트랜잭션인지 여부를 나타냅니다. 목표 커밋 시간 또는 ID는 각각 회복에 포함됩니다. 기본값은참.
특정 타임라인으로 복구하도록 지정합니다. 는 기본값은 복구와 동일한 일정에 따라 복구하는 것입니다. 기본 백업이 수행된 시점의 현재 상태입니다. 당신은 단지 복잡한 재복구에서는 이 매개변수를 설정해야 합니다. 상태로 돌아가야 하는 상황 특정 시점 복구 후에 자체적으로 도달했습니다. 참조섹션 22.3.4토론을 위해.
데이터베이스를 이전 시점으로 복원하는 기능 시간은 공상과학 소설과 유사한 몇 가지 복잡성을 만들어냅니다. 시간 여행과 평행 우주에 관한 이야기. 에서 데이터베이스의 원래 기록을 삭제했을 수도 있습니다. 화요일 저녁 5시 15분에 중요한 테이블이 있습니다. 당황하지 마세요. 백업을 삭제하고 화요일 오후 5시 14분 시점으로 복원하세요. 저녁에 가동되어 실행 중입니다. 에서이것데이터베이스의 역사 우주, 당신은 테이블을 전혀 떨어 뜨린 적이 없습니다. 하지만 당신이 가정 나중에 이것이 그다지 좋은 생각이 아니었음을 깨닫고 원래의 어느 시점으로 돌아가고 싶습니다. 역사. 데이터베이스가 실행 중이어서 WAL 시퀀스의 일부를 덮어썼습니다. 지금 원하는 시점까지 이어지는 세그먼트 파일 다시 돌아가십시오. 그래서 당신은 정말로 다음 시리즈를 구별하고 싶습니다. 특정 시점을 완료한 후 생성된 WAL 레코드 원본에서 생성된 것으로부터 복구 데이터베이스 기록.
이러한 문제를 해결하려면,PostgreSQL다음의 개념을 가지고 있습니다타임라인. 아카이브 복구가 수행될 때마다 완료되면 일련의 작업을 식별하기 위해 새로운 타임라인이 생성됩니다. 복구 후 생성된 WAL 레코드입니다. 타임라인 ID 번호는 WAL 세그먼트 파일 이름의 일부이므로 새로운 타임라인 이전에 생성된 WAL 데이터를 덮어쓰지 않습니다. 타임라인. 실제로 다양한 아카이브를 보관하는 것이 가능합니다. 타임라인. 쓸모없는 기능처럼 보일 수도 있지만, 종종 생명의 은인. 자신이 없는 상황을 생각해 보세요 어느 시점으로 복구해야 할지 확실히 알고 있으므로 복구해야 합니다. 시행착오를 거쳐 여러 시점 복구를 수행합니다. 오래된 역사에서 분기할 수 있는 가장 좋은 장소를 찾으세요. 없이 이 프로세스는 곧 관리하기 어려운 문제를 야기할 것입니다. 엉망. 타임라인을 사용하면 다음으로 복구할 수 있습니다.아무거나이전 상태(상태 포함) 나중에 포기한 타임라인 브랜치에서.
새로운 타임라인이 생성될 때마다PostgreSQL생성"타임라인 기록"어떤 파일인지 보여주는 파일 타임라인은 언제부터 분기되었는지. 이 기록 파일은 시스템이 올바른 WAL 세그먼트를 선택할 수 있도록 하는 데 필요합니다. 여러 파일이 포함된 아카이브에서 복구할 때 파일 타임라인. 따라서 WAL 아카이브에 보관됩니다. WAL 세그먼트 파일과 같은 영역입니다. 기록 파일은 단지 작은 텍스트 파일이므로 저렴하고 보관하는 것이 적절합니다. (큰 세그먼트 파일과 달리) 무기한으로. 원하는 경우 기록 파일에 설명을 추가하여 이 특정 타임라인이 어떻게, 왜 등장했는지에 대한 나만의 메모 될. 그러한 의견은 다음과 같은 경우에 특히 가치가 있습니다. 그 결과로 다양한 타임라인이 만들어졌습니다. 실험.
복구의 기본 동작은 다음을 따라 복구하는 것입니다. 기본 백업을 수행할 당시와 동일한 타임라인입니다. 일부 하위 타임라인으로 복구하려는 경우(즉, 이후 자체적으로 생성된 일부 상태로 돌아가고 싶습니다. 복구 시도), 대상 타임라인 ID를 지정해야 합니다. 에서recovery.conf. 회복할 수 없습니다 베이스보다 일찍 분기된 타임라인으로 백업.
이 글을 쓰는 시점에는 다음과 같은 몇 가지 제한 사항이 있습니다. 온라인 백업 기술. 이러한 문제는 아마도 다음에서 해결될 것입니다. 향후 릴리스:
비B-트리 인덱스에 대한 작업(해시, R-트리 및 GiST 인덱스)는 현재 WAL에 로그되지 않으므로 재생이 되지 않습니다. 이러한 인덱스 유형을 업데이트하세요. 권장되는 해결 방법은 다음과 같습니다. 수동으로REINDEX각 해당 색인 복구 작업을 완료한 후.
만약에데이터베이스 생성명령은 기본 백업이 수행되는 동안 실행된 다음 템플릿 데이터베이스는만들기 데이터베이스기본 백업이 진행되는 동안 복사된 내용이 수정되었습니다. 아직 진행 중이므로 복구가 발생할 수 있습니다. 이러한 수정 사항은 생성된 환경에 전파됩니다. 데이터베이스도 그렇고. 물론 이는 바람직하지 않습니다. 피하려면 이러한 위험이 있으므로 템플릿 데이터베이스를 수정하지 않는 것이 가장 좋습니다. 기본 백업을 수행하는 동안.
테이블스페이스 생성명령은 리터럴 절대 경로로 WAL에 기록되며, 따라서 동일한 테이블스페이스 생성으로 재생됩니다. 절대 경로. 로그가 다음과 같은 경우 이는 바람직하지 않을 수 있습니다. 다른 컴퓨터에서 재생되고 있습니다. 위험할 수 있어요 로그가 동일한 시스템에서 재생되고 있더라도 새 데이터 디렉터리에: 리플레이는 계속 덮어쓰게 됩니다. 원본 테이블스페이스의 내용 가능성을 피하기 위해 이런 종류의 문제가 있는 경우 가장 좋은 방법은 새로운 방법을 사용하는 것입니다. 테이블스페이스 생성 또는 삭제 후 기본 백업.
현재에도 주목해야 합니다.WAL형식은 매우 부피가 큽니다. 많은 디스크 페이지 스냅샷을 포함합니다. 이는 다음에 적합합니다. 충돌 복구 목적(수정이 필요할 수 있으므로) 부분적으로 작성된 디스크 페이지. 보관할 필요가 없으므로 그러나 PITR 작업에 대한 페이지 복사본이 많습니다. 다음을 위한 영역 향후 개발은 보관된 WAL 데이터를 제거하여 압축하는 것입니다. 불필요한 페이지 사본. 그동안 관리자는 다음을 수행할 수 있습니다. WAL에 포함된 페이지 스냅샷 수를 다음과 같이 줄이고 싶습니다. 체크포인트 간격 매개변수를 다음과 같이 늘립니다. 가능합니다.