저는 PostgreSQL 9.4를 실행하여 복제를 진행하려고 합니다.
SELECT pg_start_backup('clone', true);
rsync
데이터베이스를 복제본으로SELECT pg_stop_backup();
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 파일을 이러한 값으로 모의하세요. 짜잔. 복제본이 즉시 시작될 수 있습니다.
위의 결과와 함께 오류별로 예상되는 이름을 사용하여 파일을 만듭니다.
추가 리소스
-
이름:
pg_current_xlog_location()
반환 유형: 텍스트
설명: 현재 트랜잭션 로그 쓰기 위치 가져오기
pg_current_xlog_location
현재 트랜잭션 로그 쓰기 위치를 위 함수에서 사용하는 것과 동일한 형식으로 표시합니다. 마찬가지로 pg_current_xlog_insert_location은 현재 트랜잭션 로그 삽입 지점을 표시합니다. 삽입 지점은 임의의 순간에 트랜잭션 로그의 "논리적" 끝인 반면, 쓰기 위치는 서버의 내부 버퍼에서 실제로 기록된 내용의 끝입니다. 쓰기 위치는 서버 외부에서 검사할 수 있는 위치의 끝이며 일반적으로 부분적으로 완료된 트랜잭션 로그 파일을 보관하려는 경우 원하는 위치입니다. 삽입 지점은 주로 서버 디버깅 목적으로 사용할 수 있습니다. 이는 모두 읽기 전용 작업이며 수퍼유저 권한이 필요하지 않습니다.pg_xlogfile_name_offset
위 함수의 결과에서 해당 트랜잭션 로그 파일 이름과 바이트 오프셋을 추출하는 데 사용할 수 있습니다 .마찬가지로
pg_xlogfile_name
트랜잭션 로그 파일 이름만 추출합니다. 지정된 트랜잭션 로그 위치가 정확히 트랜잭션 로그 파일 경계에 있는 경우 두 함수 모두 이전 트랜잭션 로그 파일의 이름을 반환합니다. 이전 파일이 현재 보관해야 하는 마지막 파일이기 때문에 이는 일반적으로 트랜잭션 로그 보관 동작을 관리하기 위해 원하는 동작입니다.