이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 53.4. 사설 토토 복제 프로토콜버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

51.3. 사설 토토 복제 프로토콜

사설 토토 복제를 시작하려면 프론트 엔드가를 보냅니다.복제시작 메시지의 매개 변수. 부울 가치true백엔드는 Walsender 모드로 이동하도록 지시합니다. 여기서 작은 복제 명령 세트는 SQL 명령문 대신 발행 될 수 있습니다. Walsender 모드에서는 간단한 쿼리 프로토콜 만 사용할 수 있습니다. 복제 명령은 서버 로그에 로그인됩니다.log_replication_commands가 활성화되었습니다. 통과데이터베이스값이 Walsender에게 walsender에 지정된 데이터베이스에 연결하도록 지시합니다dbname매개 변수, 해당 데이터베이스의 논리 복제에 연결을 사용할 수 있습니다.

복제 명령을 테스트 할 목적으로를 통해 복제 연결을 만들 수 있습니다PSQL또는 기타libpq-연결 문자열이있는 도구복제옵션, 예 :

psql "dbname = postgres replication = database"-c "eviret_system;"

그러나 사용하는 것이 종종 더 유용합니다postgresql : 문서(물리적 복제 용) 또는postgresql : 문서(논리 복제 용).

Walsender 모드에서 수락 된 명령은 다음과 같습니다.

식별 _system

서버가 자체를 식별하도록 요청합니다. 서버는 4 개의 필드를 포함하는 단일 행의 결과 세트로 응답합니다.

SystemID(텍스트)

클러스터를 식별하는 고유 한 시스템 식별자. 대기를 초기화하는 데 사용되는베이스 백업이 동일한 클러스터에서 나왔는지 확인하는 데 사용할 수 있습니다.

타임 라인(int4)

현재 타임 라인 ID. 또한 대기가 마스터와 일치하는지 확인하는 데 유용합니다.

xlogpos(텍스트)

현재 Xlog 플러시 위치. 스트리밍이 시작될 수있는 트랜잭션 로그에서 알려진 위치를 얻는 데 유용합니다.

dbname(텍스트)

데이터베이스 연결 또는 NULL.

timeline_history tli

타임 라인의 타임 라인 기록 파일을 보내도록 요청합니다tli. 서버는 두 개의 필드를 포함하는 단일 행의 결과 세트로 응답합니다. 필드는로 표시되어 있습니다.텍스트andBYTEA, 그들은 탈출하거나 인코딩 전환없이 효과적으로 원시 바이트를 반환합니다 :

filename(텍스트)

타임 라인 기록 파일의 파일 이름 (예 :00000002.history.

컨텐츠(BYTEA)

타임 라인 기록 파일의 내용.

create_replication_slot slot_name물리적[Reserve_wal] |Logical output_plugin

물리적 또는 논리적 복제 슬롯을 만듭니다. 보다섹션 26.2.6복제 슬롯에 대한 자세한 내용.

slot_name

생성 할 슬롯의 이름. 유효한 복제 슬롯 이름 여야합니다 (참조섹션 26.2.6.1).

output_plugin

논리 디코딩에 사용되는 출력 플러그인의 이름 (참조스포츠 토토 결과 PostgreSQL: Tài liệu: 9.6: plugin đầu ra giải mã logic).

Reserve_wal

이 물리적 복제 슬롯 매장량을 지정하십시오Wal즉시. 그렇지 않으면,Wal스트리밍 복제 클라이언트의 연결시에만 예약되어 있습니다.

start_replication[슬롯 SLOT_NAME] [물리적]xxx/xxx[타임 라인 tli]

WAL 위치에서 시작하여 WAL 사설 토토을 시작하도록 지시xxx/xxx. 만약에타임 라인옵션이 지정되어 있으며 타임 라인에서 스트리밍이 시작됩니다tli; 그렇지 않으면 서버의 현재 타임 라인이 선택됩니다. 예를 들어 WAL의 요청 된 섹션이 이미 재활용 된 경우 서버는 오류로 답장 할 수 있습니다. 성공시 서버는 CopyBothRepsonse 메시지로 응답 한 다음 WAL을 프론트 엔드로 스트리밍하기 시작합니다.

슬롯 이름이SLOT_NAME, 서버가 어떤 WAL 세그먼트를 알 수 있도록 복제가 진행됨에 따라 업데이트됩니다.hot_standby_feedback대기에는 여전히 트랜잭션이 필요합니다.

클라이언트가 최신이 아닌 타임 라인을 요청하면 서버의 이력의 일부인 타임 라인을 요청하면 서버가 요청 된 시작점에서 서버가 다른 타임 라인으로 전환 된 지점으로 시작하는 타임 라인에서 모든 WAL을 스트리밍합니다. 클라이언트가 이전 타임 라인의 끝에서 스트리밍을 요청하는 경우 서버는 사본 모드에 들어가지 않고 CommandComplete로 즉시 응답합니다.

최신 WAL에서 모든 WAL을 스트리밍 한 후 서버는 복사 모드를 종료하여 스트리밍을 종료합니다. 클라이언트가 복사 모드를 종료하여이를 확인하면 서버는 하나의 행과 두 열이있는 결과 세트를 보냅니다. 첫 번째 열은 다음 타임 라인의 ID (type입니다.int8), 두 번째 열은 스위치가 발생한 WAL 위치입니다 (Type텍스트). 일반적으로 스위치 위치는 스트리밍 된 WAL의 끝이지만 서버가 홍보하기 전에 자체적으로 재생되지 않은 이전 타임 라인에서 WAL을 보낼 수있는 코너 케이스가 있습니다. 마지막으로 서버는 CommandComplete 메시지를 보내 새 명령을 수락 할 준비가되었습니다.

WAL 데이터는 일련의 CopyData 메시지로 전송됩니다. (이것은 다른 정보를 혼합 할 수 있습니다. 특히 서버가 스트리밍을 시작한 후 실패를 일으키는 경우 서버가 ErrorResponse 메시지를 보낼 수 있습니다.) 서버에서 클라이언트로의 각 CopyData 메시지의 페이로드에는 다음 형식 중 하나의 메시지가 포함됩니다..

xlogdata (b)
byte1 ( 'w')

메시지를 WAL 데이터로 식별합니다.

int64

이 메시지에서 WAL 데이터의 시작점.

int64

서버의 현재 월드 끝.

int64

2000-01-01의 자정 이후 마이크로 초과 같은 전송시 서버의 시스템 클럭 시계.

바이트n

WAL 데이터 스트림의 섹션.

단일 WAL 레코드는 두 개의 XlogData 메시지에 대해 절대로 분할되지 않습니다. WAL 레코드가 WAL 페이지 경계를 가로 지르고 있으므로 이미 연속 레코드를 사용하여 분할되면 페이지 경계에서 분할 될 수 있습니다. 다시 말해, 첫 번째 메인 월 레코드와 그 연속 레코드는 다른 xlogdata 메시지로 보낼 수 있습니다.

기본 keepalive 메시지 (b)
byte1 ( 'k')

메시지를 발신자 KeepAlive로 식별합니다.

int64

서버에서 WAL의 현재 끝.

int64

2000-01-01의 자정 이후 마이크로 초과 전송 당시 서버의 시스템 클럭 시계.

byte1

1은 시간 초과 연결을 피하기 위해 클라이언트가 가능한 빨리이 메시지에 응답해야 함을 의미합니다. 0 그렇지 않으면.

수신 프로세스는 다음 메시지 형식 중 하나를 사용하여 언제든지 발신자에게 회신을 보낼 수 있습니다 (CopyData 메시지의 페이로드) :

대기 상태 업데이트 (F)
byte1 ( 'r')

메시지를 수신기 상태 업데이트로 식별합니다.

int64

마지막 WAL 바이트 + 1의 위치는 대기에서 디스크에 수신되어 작성되었습니다.

int64

대기에서 디스크로 플러시 된 마지막 Wal 바이트 + 1의 위치.

int64

대기 바이트 + 1의 위치는 대기에 적용됩니다.

int64

2000-01-01의 자정 이후 마이크로 초로 전송 당시 클라이언트의 시스템 시계.

byte1

1 인 경우 클라이언트는 서버 에이 메시지에 즉시 회신하도록 요청합니다. 이것은 연결이 여전히 건강한지 테스트하기 위해 서버를 핑하는 데 사용될 수 있습니다.

뜨거운 대기 피드백 메시지 (f)
byte1 ( 'h')

메시지를 핫 대기 피드백 메시지로 식별합니다.

int64

2000-01-01의 자정 이후 마이크로 초과 같은 전송 당시 클라이언트의 시스템 시계.

int32

대기의 현재 Xmin. 대기 가이 연결에서 더 이상 핫 스탠드 피드백이 전송되지 않는다는 알림을 보내는 경우 0 일 수 있습니다. 나중에 0이 아닌 메시지가 피드백 메커니즘을 회복 할 수 있습니다.

int32

대기의 현재 epoch.

start_replication 19799_19805 slot_name Logical xxx/xxx[(옵션 _name[옵션_value] [, ...])

WAL 포지션에서 시작하여 논리적 복제를 위해 WAL 스트리밍을 시작하도록 지시xxx/xxx. 예를 들어 WAL의 요청 된 섹션이 이미 재활용 된 경우 서버는 오류로 답장 할 수 있습니다. 성공시 서버는 CopyBothRepsonse 메시지로 응답 한 다음 WAL을 프론트 엔드로 스트리밍하기 시작합니다.

CopyBothResponse 메시지 내부의 메시지는에 대해 문서화 된 동일한 형식입니다.start_replication ... 물리적.

선택한 슬롯과 관련된 출력 플러그인은 스트리밍을위한 출력을 처리하는 데 사용됩니다.

슬롯 SLOT_NAME

스트림에서 슬롯의 이름이 변경됩니다. 이 매개 변수는 필요하며와 함께 생성 된 기존 논리 복제 슬롯에 해당해야합니다.create_replication_slotin논리적모드.

xxx/xxx

사설 토토을 시작하는 WAL 위치.

옵션_name

옵션의 이름은 슬롯의 논리적 디코딩 플러그인으로 전달됩니다.

옵션_value

지정된 옵션과 관련된 문자열 상수 형식의 선택적 값.

Drop_Replication_Slot SLOT_NAME

복제 슬롯을 삭제하여 예약 된 서버 측 리소스를 제거합니다. 활성 연결에 의해 슬롯이 현재 사용중인 경우이 명령은 실패합니다.

slot_name

드롭 할 슬롯의 이름.

Base_backup[레이블 '레이블'] [진행] [빠른] [Wal] [nowait] [max_rate rate] [TableSpace_map]

서버에베이스 백업 스트리밍을 시작하도록 지시합니다. 백업이 시작되기 전에 시스템이 백업 모드에 자동으로 표시되고 백업이 완료되면이 작업을 수행합니다. 다음 옵션이 수락됩니다.

레이블 '레이블'

백업의 레이블을 설정합니다. 아무것도 지정되지 않으면의 백업 레이블베이스 백업사용됩니다. 레이블에 대한 인용 규칙은의 표준 SQL 문자열과 동일합니다.Standard_Conforming_strings켜짐.

진행

진행 보고서를 생성하는 데 필요한 정보 요청. 이렇게하면 각 테이블 스페이스의 헤더에서 대략적인 크기를 다시 보내며 스트림을 따라 얼마나 멀리 떨어진 지 계산하는 데 사용할 수 있습니다. 이것은 전송이 시작되기 전에 한 번 모든 파일 크기를 열거하여 계산되며, 따라서 성능에 부정적인 영향을 줄 수 있습니다. 특히 첫 번째 데이터가 스트리밍되기까지 더 오래 걸릴 수 있습니다. 백업 중에 데이터베이스 파일이 변경 될 수 있으므로 크기는 대략적인 것이며 근사 시간과 실제 파일 전송 사이에 성장하고 줄어들 수 있습니다..

빠른

빠른 체크 포인트 요청.

Wal

백업에 필요한 WAL 세그먼트를 포함하십시오. 여기에는 시작과 중지 백업 사이의 모든 파일이 포함됩니다.PG_XLOG기본 디렉토리 타르 파일의 디렉토리.

Nowait

기본적으로 백업은 마지막으로 필요한 WAL 세그먼트가 보관 될 때까지 대기하거나 로그 아카이브가 활성화되지 않은 경우 경고를 방출합니다. 지정nowait대기와 경고를 모두 비활성화하여 클라이언트가 필요한 로그를 사용할 수 있도록 책임을 져야합니다.

max_rate rate

제한 (스로틀) 시간당 서버에서 클라이언트로 전송 된 최대 데이터 양. 예상 단위는 초당 킬로바이트입니다. 이 옵션이 지정된 경우 값은 0이거나 32kb에서 1GB (포함) 범위 내에 속해 있어야합니다. 0이 전달되거나 옵션이 지정되지 않은 경우 전송에 제한이 부과되지 않습니다.

TableSpace_map

디렉토리에 존재하는 기호 링크에 대한 정보 포함PG_TBLSPCTableSpace_map. 테이블 스페이스 맵 파일에는 디렉토리에 존재하는 각 상징적 링크 이름이 포함되어 있습니다PG_TBLSPC/그리고 그 상징적 링크의 전체 경로.

백업이 시작되면 서버는 먼저 두 개의 일반 결과 세트를 보내고 하나 이상의 저작권 결과를 보냅니다.

첫 번째 일반 결과 세트에는 두 개의 열이있는 단일 행에 백업의 시작 위치가 포함됩니다. 첫 번째 열에는 xlogrecptr 형식으로 주어진 시작 위치를 포함하고 두 번째 열에는 해당 타임 라인 ID를 포함합니다.

두 번째 일반 결과 세트에는 각 테이블 스페이스 당 하나의 행이 있습니다. 이 행의 필드는 다음과 같습니다.

spcoid(OID)

테이블 스페이스의 OID 또는 기본 디렉토리 인 경우 NULL.

spclocation(텍스트)

테이블 스페이스 디렉토리의 전체 경로 또는 기본 디렉토리 인 경우 null.

size(int8)

진행 보고서가 요청 된 경우 테이블 스페이스의 대략적인 크기; 그렇지 않으면 널입니다.

두 번째 정규 결과 세트 이후에 하나 이상의 저작권 결과가 전송됩니다. 하나는 기본 데이터 디렉토리와 하나는 이외의 각 테이블 스페이스마다 하나씩입니다.pg_defaultandpg_global. 저작권 결과의 데이터는 TAR 형식입니다 (다음"Ustar Interchange Format"POSIX 1003.1-2008 표준에 지정) 표준에 지정된 제로의 두 개의 후행 블록이 생략된다는 점을 제외하고 테이블 스페이스 컨텐츠의 덤프. TAR 데이터가 완료되면, 시작 위치와 동일한 형식으로 백업의 WAL 엔드 위치를 포함하는 최종 일반 결과 세트가 전송됩니다.

데이터 디렉토리 및 각 테이블 스페이스의 TAR 아카이브에는 디렉토리에 모든 파일이 포함됩니다.PostgreSQL동일한 디렉토리에 추가 된 파일 또는 기타 파일. 제외 된 유일한 파일은 다음과 같습니다.

  • postmaster.pid

  • postmaster.opts

  • PostgreSQL Server 작동 중에 생성 된 다양한 임시 파일

  • PG_XLOG, 하위 디렉토리를 포함한. 백업이 WAL 파일이 포함 된 상태에서 실행되면 합성 된 버전의PG_XLOG가 포함되지만 나머지 내용이 아닌 백업이 작동하는 데 필요한 파일 만 포함됩니다.

  • PG_REPLSLOT빈 디렉토리로 복사됩니다.

  • 기호 링크 및 특수 장치 파일과 같은 일반 파일 및 디렉토리 이외의 파일이 건너 뜁니다. (상징적 링크PG_TBLSPC유지 관리됩니다.)

서버의 기본 파일 시스템이 지원하는 경우 소유자, 그룹 및 파일 모드가 설정됩니다.