복제 작업을 수행하기 위한 "타임라인 기록 파일"을 찾을 수 없습니다.

복제 작업을 수행하기 위한 "타임라인 기록 파일"을 찾을 수 없습니다.

저는 PostgreSQL 9.4를 실행하여 복제를 진행하려고 합니다.

내가 하고 있는 일은위키의 지침그리고선적 서류 비치:

  1. SELECT pg_start_backup('clone', true);
  2. rsync데이터베이스를 복제본으로
  3. SELECT pg_stop_backup();
  4. rsync폴더를 pg_xlog복제본으로

복제를 시작했는데 다음과 같이 표시됩니다.

LOG:  fetching timeline history file for timeline 3 from primary server
FATAL:  could not receive timeline history file from the primary server:
    ERROR:  could not open file "pg_xlog/00000003.history": No such file or directory

.history당연히 두 서버 모두에서 파일을 찾고 있지만 pg_xlog/아무것도 없습니다.

나는 그것을 알아 내기 위해 문서를 훑어보고 있습니다.

백업을 활용하려면 파일 시스템 백업 도중과 이후에 생성된 모든 WAL 세그먼트 파일을 보관해야 합니다. 이를 돕기 위해 pg_stop_backup 함수는 WAL 아카이브 영역에 즉시 저장되는 백업 기록 파일을 생성합니다. 이 파일의 이름은 파일 시스템 백업에 필요한 첫 번째 WAL 세그먼트 파일의 이름을 따서 지정되었습니다. 예를 들어 시작 WAL 파일이 0000000100001234000055CD인 경우 백업 기록 파일의 이름은 0000000100001234000055CD.007C9330.backup과 같은 이름이 됩니다.

그러나 내가 그렇게 한 후에도 , 어디에서도 pg_stop_backup()이와 같은 것은 여전히 ​​존재하지 않습니다 .pg_xlog/

그러면 이 "타임라인 기록 파일"은 어디서 구할 수 있나요?

답변1

에 따라2인 6식게시물을 작성하면 파일을 생성한 다음 복제 설정을 진행할 수 있지만 본질적으로 해당 파일이 적용되지 않거나 작업에 따라 삭제되었음에도 불구하고 이 파일이 필요한 PostgresSQL 버그입니다.

메모: Postgresql 10 이상에서는 함수 이름이 다음으로 변경되었습니다.pg_current_wal_lsn()

PostgreSQL은 새로운 기본 서버를 승격할 때 WAL 파일 디렉터리에 배치된 작은 텍스트 파일 형태로 타임라인 분할 표시를 생성합니다. 이 파일을 사용하면 다소 복잡한 장애 조치 및 장애 복구 시나리오에서 특정 시점 복구를 달성할 수 있습니다.

그래서 파일을 다시 만들어야 할 것 같습니다. 당신은 찾을 수 있습니다 아주 좋은 요약 Postgres 위키의 .history 파일. 하지만 정보가 .pdf에 있기 때문에 색인을 생성하기가 더 어려운 경향이 있으므로 해당 문서가 있는지 아직 모르는 경우 문서를 찾는 데 어려움을 겪을 수 있습니다.

하지만 우리는 업그레이드 전이기 때문에 결코 그 타임라인으로 돌아가지 않을 것입니다. 손실된 파일을 다시 생성하는 데 필요한 것은 충분한 숫자뿐입니다. 다음을 실행하여 얻을 수 있습니다.

# SELECT pg_current_xlog_location();
 pg_current_xlog_location
--------------------------
 1/38F70328
(1 row)

WAL 디렉터리에 있는 .history 파일을 이러한 값으로 모의하세요. 짜잔. 복제본이 즉시 시작될 수 있습니다.

원천

위의 결과와 함께 오류별로 예상되는 이름을 사용하여 파일을 만듭니다.


추가 리소스

  • PostgreSQL 타임라인 이해

  • 시스템 관리 기능

    이름: pg_current_xlog_location()

    반환 유형: 텍스트

    설명: 현재 트랜잭션 로그 쓰기 위치 가져오기

    pg_current_xlog_location현재 트랜잭션 로그 쓰기 위치를 위 함수에서 사용하는 것과 동일한 형식으로 표시합니다. 마찬가지로 pg_current_xlog_insert_location은 현재 트랜잭션 로그 삽입 지점을 표시합니다. 삽입 지점은 임의의 순간에 트랜잭션 로그의 "논리적" 끝인 반면, 쓰기 위치는 서버의 내부 버퍼에서 실제로 기록된 내용의 끝입니다. 쓰기 위치는 서버 외부에서 검사할 수 있는 위치의 끝이며 일반적으로 부분적으로 완료된 트랜잭션 로그 파일을 보관하려는 경우 원하는 위치입니다. 삽입 지점은 주로 서버 디버깅 목적으로 사용할 수 있습니다. 이는 모두 읽기 전용 작업이며 수퍼유저 권한이 필요하지 않습니다.

    pg_xlogfile_name_offset위 함수의 결과에서 해당 트랜잭션 로그 파일 이름과 바이트 오프셋을 추출하는 데 사용할 수 있습니다 .

    마찬가지로 pg_xlogfile_name트랜잭션 로그 파일 이름만 추출합니다. 지정된 트랜잭션 로그 위치가 정확히 트랜잭션 로그 파일 경계에 있는 경우 두 함수 모두 이전 트랜잭션 로그 파일의 이름을 반환합니다. 이전 파일이 현재 보관해야 하는 마지막 파일이기 때문에 이는 일반적으로 트랜잭션 로그 보관 동작을 관리하기 위해 원하는 동작입니다.

    원천

관련 정보