52.4. 배트맨 토토 복제 프로토콜

배트맨 토토 복제를 시작하려면 프론트 엔드가를 보냅니다.복제시작 메시지의 매개 변수. 부울 가치true(또는on, , 1)는 백엔드가 물리적 복제 Walsender 모드로 이동하도록 지시합니다. 여기 아래에 표시된 작은 복제 명령 세트는 SQL 문 대신 발급 될 수 있습니다..

통과데이터베이스복제매개 변수는 백엔드가 논리적 복제 Walsender 모드로 이동하여에 지정된 데이터베이스에 연결하도록 지시합니다.dbname매개 변수. 논리적 복제 Walsender 모드에서 아래에 표시된 복제 명령과 일반 SQL 명령을 발행 할 수 있습니다.

물리적 복제 또는 논리 복제 Walsender 모드에서는 간단한 쿼리 프로토콜 만 사용할 수 있습니다.

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

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

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

복제 명령은 서버 로그에 로그인 될 때log_replication_commands활성화되었습니다.

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

식별 _system

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

SystemID(텍스트)

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

타임 라인(int4)

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

xlogpos(텍스트)

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

dbname(텍스트)

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

show 이름

서버가 런타임 매개 변수의 현재 설정을 보내도록 요청합니다. 이것은 SQL 명령과 유사합니다show.

이름

런타임 매개 변수의 이름. 사용 가능한 매개 변수는에 문서화됩니다.사설 토토 사이트 : 문서 : 13 : 19 장. 서버 구성.

timeline_history tli

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

filename(텍스트)

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

컨텐츠(BYTEA)

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

create_replication_slot slot_name[임시]물리적[Reserve_wal] |Logical output_plugin[Export_SnapShot | NOEXPORT_SNAPSHOT | use_snapshot]

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

slot_name

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

output_plugin

논리적 디코딩에 사용되는 출력 플러그인의 이름 (참조PostgreSQL : 문서 : 13 : 48.6. 논리적 디코딩 토토 캔 플러그인).

임시

이 복제 슬롯이 임시 슬롯임을 지정하십시오. 임시 슬롯은 디스크에 저장되지 않으며 오류가 발생하거나 세션이 완료되었을 때 자동으로 삭제됩니다.

Reserve_wal

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

Export_snapShot
NOEXPORT_SNAPSHOT
use_snapshot

논리 슬롯 초기화 중에 생성 된 스냅 샷으로 무엇을 해야하는지 결정합니다.Export_SnapShot17946_18072use_snapshot명령을 실행하는 현재 트랜잭션에 스냅 샷을 사용합니다. 이 옵션은 거래에서 사용해야하며create_replication_slot해당 트랜잭션에서 첫 번째 명령이 실행되어야합니다. 마지막으로,NOEXPORT_SNAPSHOT논리적 디코딩에 정상적인 스냅 샷을 사용하지만 다른 일을하지는 않습니다.

이 명령에 대한 응답으로 서버는 다음 필드가 포함 된 1 열 결과 세트를 보냅니다.

slot_name(텍스트)

새로 만들어진 복제 슬롯의 이름.

일관성 _point(텍스트)

슬롯이 일관되게 된 WAL 위치. 이것은이 복제 슬롯에서 스트리밍을 시작할 수있는 가장 빠른 위치입니다.

Snapshot_name(텍스트)

명령에 의해 내보낸 스냅 샷의 식별자. 이 연결에서 새 명령이 실행되거나 복제 연결이 닫힐 때까지 스냅 샷이 유효합니다. 생성 된 슬롯이 물리적 인 경우 null.

output_plugin(텍스트)

새로 만들어진 복제 슬롯이 사용하는 출력 플러그인의 이름. 생성 된 슬롯이 물리적 인 경우 null.

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

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

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

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

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

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 BYTE + 1의 위치는 대기에서 디스크에 수신되어 작성되었습니다.

int64

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

int64

대기에 적용되는 마지막 WAL 바이트 + 1의 위치.

int64

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

byte1

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

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

메시지를 핫 스탠드 피드백 메시지로 식별합니다.

int64

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

int32

복제 슬롯에서 카탈로그 _xmin을 제외한 대기의 현재 글로벌 Xmin. 이 값과 다음 카탈로그 _xmin이 모두 0이라면 이것은 핫 스탠드 비드 피드백이 더 이상이 연결에 전송되지 않을 것이라는 알림으로 취급됩니다. 나중에 0이 아닌 메시지가 피드백 메커니즘을 회복 할 수 있습니다.

int32

대기에서 Global Xmin XID의 에포크.

int32

대기에서 복제 슬롯 중 가장 낮은 카탈로그 _xmin. 대기에 카탈로그가 없거나 대기 피드백이 비활성화되는 경우 카탈로그가없는 경우 0으로 설정하십시오.

int32

대기에서 카탈로그 _xmin xid의 에포크.

​​start_replication 슬롯 SLOT_NAME 로직 xxx/xxx[(옵션 _name[옵션_value] [, ...])]

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

CopyBothResponse 메시지 내부의 메시지는에 대해 문서화 된 동일한 형식입니다.start_replication ... 물리적, 두 개의 CommandComplete 메시지를 포함하여

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

슬롯 SLOT_NAME

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

xxx/xxx

배트맨 토토을 시작하는 WAL 위치.

옵션 _name

옵션의 이름은 슬롯의 논리적 디코딩 출력 플러그인으로 전달되었습니다. 보다PostgreSQL : 문서 : 13 : 52.5. 논리 스트리밍 복제 토토 꽁 머니표준 (에 의해 허용되는 옵션pgoutput) 플러그인.

옵션_value

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

Drop_Replication_Slot slot_name[대기]

복제 슬롯을 삭제하여 예약 된 서버 측 리소스를 제거합니다.

slot_name

드롭 할 슬롯의 이름.

대기

이 옵션은 슬롯이 오류가 발생하는 기본 동작 대신 비활성화 될 때까지 슬롯이 활성화 될 때까지 명령을 기다립니다..

base_backup[레이블 '레이블'] [진행] [빠른] [WAL] [nowait] [max_rate rate] [TableSpace_map] [noverify_checksums] [매니페스트 Manifest_Option] [Manifest_checksums Checksum_algorithm]

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

레이블 '레이블'

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

진행

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

빠른

빠른 체크 포인트 요청.

Wal

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

Nowait

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

max_rate rate

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

TableSpace_map

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

noverify_checksums

기본적으로 기본 백업 중에 체크섬이 확인되면 확인됩니다. 지정noverify_checksums이 확인을 비활성화합니다.

매니페스트 Manifest_Option

이 옵션이 값으로 지정 될 때또는Force-Encode, 백업 매니페스트가 생성되어 백업과 함께 전송됩니다. 매니페스트는 포함될 수있는 WAL 파일을 제외하고 백업에있는 모든 파일 목록입니다. 또한 크기, 마지막 수정 시간 및 선택적으로 각 파일의 체크섬을 저장합니다.Force-Encode모든 파일 이름을 16 진수로 인코딩하도록 강제; 그렇지 않으면,이 유형의 인코딩은 이름이 아닌 옥트 시퀀스가 ​​아닌 파일에 대해서만 수행됩니다.Force-Encode주로 테스트 목적으로 의도되어 있으며, 백업 매니페스트를 읽는 클라이언트 가이 사례를 처리 할 수 ​​있는지 확인합니다. 이전 릴리스와의 호환성을 위해 기본값은입니다.Manifest 'no'.

Manifest_checksums CheckSum_algorithm

백업 매니페스트에 포함 된 각 파일에 적용 해야하는 체크섬 알고리즘을 지정합니다. 현재 사용 가능한 알고리즘은입니다.없음, CRC32C, SHA224, SHA256, SHA384SHA512. 기본값은CRC32C.

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

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

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

spcoid(OID)

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

spclocation(텍스트)

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

size(int8)

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

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

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

  • postmaster.pid

  • postmaster.opts

  • pg_internal.init(여러 디렉토리에서 발견)

  • PostgreSQL 서버 작업 중에 생성 된 다양한 임시 파일 및 디렉토리 (예 :와 같은 파일 또는 디렉토리와 같은 다양한 임시 파일 및 디렉토리PGSQL_TMP및 임시 관계.

  • 회복에 대한 (빈) 비 신도지 않은 관계를 재현하는 데 필요한 초기 포크를 제외하고는없는 관계..

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

  • PG_DYNSHMEM, pg_notify, PG_REPLSLOT, PG_SERIAL, PG_SNAPSHOTS, PG_STAT_TMPPG_SUBTRANS빈 디렉토리로 복사됩니다 (상징적 링크이더라도).

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

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

수정 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면