PostgreSQL 데이터베이스 클러스터 전체 백업하기(pg_start_backup(label::text) + 복사 압축 pg_stop_backup())

PostgreSQL

PostgreSQL데이터베이스 운영 중(온라인 상태)에 최신 백업 툴(pg_basebackup)을 사용하지않고 낮은 레벨의 오래 전 방법으로 전체 백업을 하는 방법을 소개합니다.

전제 조건

설치된 데이터베이스에 대해서는 다음을 참조하십시오.

Windows Server 2019에서 PostgreSQL 13.5-1 Windows x64 버전 설치하기(인스톨러 사용)
Windows Server 2012 R2에 PostgreSQL 14 Windows x64 버전 설치하기(zip archive 사용)

온라인 가동 중에 전체 백업을 위해서는 다음과 같이 postgresql.conf의 WAL(Write Ahead Log) 아카이브가 유효 설정인 것을 확인합니다.

wal_level = replica
archive_mode = on
archive_command = 'copy %p C:\\app\\archivelog\\%f'

PostgreSQL 서버 클러스터의 환경 변수 정보는 다음과 같습니다.

SET PATH="C:\app\PostgreSQL\13\bin";%PATH%
SET PGDATA=C:\app\data
SET PGDATABASE=postgres
SET PGUSER=postgres
SET PGPORT=5432
SET PGLOCALEDIR=C:\app\PostgreSQL\13\share\locale

백업 모드 개시

SELECT pg_start_backup(‘Full Online Backup’) 문을 Super User (postgres)로 다음과 같이 실행합니다.

C:\app>psql -U postgres -v ON_ERROR_STOP=1 -c "SELECT pg_start_backup('Full Online Backup');"
postgres 사용자의 암호:********
 pg_start_backup
-----------------
 0/6000028
(1개 행)

LSN(Log Sequence Number)가 0/6000028 에서 pg_start_backup이 실행되었음을 확인할 수 있습니다. 그리고 이하의 파일 backup_label, tablespace_map이 전체 리커버리를 실행할 때의 필수 정보로써 생성됩니다.

backup_label은 백업 모드 개시 WAL위치를 저장합니다. 이것은 리커버리를 실행할 때 해당 위치부터 복원을 시작하기 위한 위치 정보가 됩니다.

C:\app>type %PGDATA%\backup_label
START WAL LOCATION: 0/6000028(file 000000010000000000000006)
CHECKPOINT LOCATION: 0/6000069
BACKUP METHOD: pg_start_backup
BACKUP FROM: master
START TIME: 2022-04-21 23:51:21 KST
LABEL: Full Online Backup
START TIMELINE: 3

tablespace_map에는 PostgreSQL 데이터베이스 클러스터의 기본 테이블 스페이스인 pg_global, pg_default를 제외한 추가 테이블 스페이스의 OID와 관리 디렉토리 정보가 저장되어 있습니다.

C:\app>%PGDATA%\tablespace_map
16391 C:\app\mydb_tablespc\mydata
16392 C:\app\mydb_tablespc\myindex

백업 모드 중의 데이터 복사

백업 모드 개시 후에 다음과 같이 백업하고자 하는 데이터 디렉토리를 복사합니다.

  • %PGDATA% 즉 디렉토리 C:\app\data를 백업 장소로 하여, robocopy.exe 명령 또는 zip.exe 명령으로 복사합니다. 이 복사 대상에는 backup_label, tablespace_map도 포함되어 있습니다.
  • 추가 테이블 스페이스 관리 디렉토리 C:\app\mydb_tablespc를 백업 장소로 robocopy.exe 명령 또는 zip.exe 명령을 사용하여 복사, 또는 압축&복사합니다.
  • 복사 대상에서 이하의 디렉토리와 파일은 제외합니다.
    %PGDATA%\pg_wal\*
    %PGDATA%\pg_tblspc\*
    %PGDATA%\postmaster.pid

백업 모드 종료

SELECT pg_stop_backup()문을 Super User (postgres)로 다음과 같이 실행합니다.

C:\app>psql -U postgres -v ON_ERROR_STOP=1 -c "SELECT pg_stop_backup();"
postgres 사용자의 암호:********
NOTICE:  WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup
 pg_stop_backup
----------------
 0/6000138
(1개 행)

LSN(Log Sequence Number)가 0/6000138 에서 pg_stop_backup이 실행 되었음을 확인 할 수 있습니다.

백업 모드 종료시 backup_label , tablespace_map 파일은 자동으로 삭제됩니다.

백업 모드 후 데이터 복사

위 백업 모드 중 데이터를 복사한 곳의 다음 디렉토리를 작성 , 파일을 복사합니다. 이하 파일명000000010000000000000006은 위 backup_label 파일의 첫 행 START WAL LOCATION: 0/6000028(file 000000010000000000000006) 에서 취득한 이름입니다.

  • %PGDATA%\pg_tblspc
  • %PGDATA%\pg_wal\000000010000000000000006
  • %PGDATA%\pg_wal\archive_status\000000010000000000000006.done
제목과 URL을 복사했습니다