Innovating today, leading tomorrow

OpenSQL_Technical Guide
[OpenSQL] Backup

[OpenSQL] Backup

PostgreSQL Backup

개요

백업이란?

데이터를 복제해서 시스템에 문제가 발생해도 복구할 수 있도록 준비해두는 것을 말합니다.

정상적으로 운영중인 데이터베이스 서버도 여러 상황에 의해서 시스템 충돌이 발생할 수 있습니다.
주기적인 백업은 이러한 상황에 대비하여 서버의 가용성을 높일 수 있는 방법입니다.

가용성을 높이는 방법 중 하나인 복제(Replication)와 비슷하다고 생각하실 수도 있을 것 같습니다.
복제는 현재 시스템의 역할을 바로 대체할 수 있도록 실시간으로 원본과 동기화 되는 반면에, 백업은 시스템을 현재 상태 뿐만이 아닌 백업이 존재하는 경우 과거의 시점으로도 시스템을 되돌릴 수 있다는 점이 가장 큰 차이점이라고 볼 수 있습니다.

백업의 분류

백업은 기준에 따라서 다양하게 분류가 가능합니다.

이 문서에서는 백업 방식을 기준으로 분류해보았습니다.

Physical Backup

데이터베이스 클러스터의 모든 파일을 백업하는 방식입니다.

스탠바이 서버 생성 등 Replication에 필요한 백업을 생성할 경우 이 방식 중 하나를 사용해야 합니다.

  • Cold Backup
  • Hot Backup
  • WAL Archiving(Continous Archiving)

Logical Backup

현재 데이터베이스와 똑같은 상태의 데이터베이스를 생성할 수 있도록 SQL 또는 다른 포맷으로 데이터를 추출합니다. 상태는 같을 수 있지만 다른 데이터베이스기 때문에 복제 연결이 불가능합니다.

  • Database Backup
  • Database Cluster Backup

Physical Bakcup

Cold Backup

데이터베이스 클러스터 파일 전체를 백업하는 방식입니다. 특정 데이터베이스만 백업 받을 수 없습니다.

백업 방식 중에서 가장 간단한 방식입니다.
아래와 같은 방법으로 백업을 수행하며, 제약사항이 있습니다.

백업방법

  1. 운영중인 PostgreSQL 서버를 종료합니다.
  2. 데이터베이스 클러스터 디렉토리를 복사합니다.
    • 아래의 디렉토리의 내용들은 PostgreSQL 시작 시 초기화 되므로 백업 대상에서 제외할 수 있습니다.
    • 디렉토리 안의 파일은 백업에 필요하지 않지만, 디렉토리 자체는 백업 해야 합니다.
      • pg_dynshmem
      • pg_notify
      • pg_serial
      • pg_snapshot
      • pg_stat_tmp
      • pg_subtrans
    • pg_wal은 Archiving을 하고 있다면 내용을 백업할 필요가 없으나, Archiving을 사용하지 않을 시 백업해야 합니다.
  3. 테이블스페이스를 복사합니다.
    • 테이블 스페이스는 클러스터 데이터 디렉토리의 pg_tblspc 디렉토리안에 링크로 걸려있습니다.
    • 실제 파일의 위치를 확인해서 같이 백업해야 합니다.
    • DATA 디렉토리 안에 tablespace.map 파일을 생성하여, 테이블스페이스명 / 디렉토리 위치를 기록하는 방법이 추천됩니다.

제약사항

  1. 데이터베이스 서버를 종료해야 합니다.
    • 일반적인 파일 시스템 단위의 백업의 경우는, 스냅샷 기능을 지원하지 않습니다.
    • 따라서 서버가 종료되지 않으면 백업 도중에 파일 시스템이 변경될 수 있습니다.
    • 해당 제약사항의 경우, OS에서 스냅샷 기능을 지원하거나 그러한 기능을 지원하는 Tool을 사용할 경우 해결할 수 있습니다.
  2. 다른 백업 방식 대비 디스크 공간을 많이 차지합니다.
    • 예를 들자면, 인덱스의 경우 다른 백업 방식들은 인덱스를 생성하는 SQL만 저장하면 됩니다.
    • 하지만, 파일 시스템 방식 백업의 경우 인덱스가 저장되어 있는 파일까지 존재하므로 더 많은 디스크 공간을 차지합니다.
    • 추가적으로, vacuuming 작업을 위한 fsm, vm 파일등이 저장되기 때문에 디스크 공간을 더 많이 차지할 수 밖에 없습니다.
  3. 문제 발생 시 데이터 손실을 줄이기 위해 WAL Archiving이 동시에 진행되어야 합니다.
    • 백업 파일은 운영중인 시스템과 비교시에 항상 과거 시점의 데이터를 가지고 있을 수 밖에 없습니다.
    • 백업 파일과 운영중이던 시스템과의 데이터 차이를 최대한 줄이기 위해서는 WAL(Write-Ahead-Log)를 Archiving 함으로써, 필요 시 복구에 이용할 수 있습니다.
    • WAL Archiving에 대한 자세한 내용은 아래의 WAL Archiving (Continous Archiving)에서 설명 하도록 하겠습니다.

Hot Backup

Cold Backup과 마찬가지로 데이터베이스 클러스터 파일 전체를 백업하는 방식입니다.

Cold Backup과의 차이점으로는, 현재 운영중인 데이터베이스 클러스터를 종료하거나 접속 및 이용을 제한할 필요가 없이 운영중인 서버를 백업할 수 있다는 차이가 있습니다.

백업 방법

Low Level API : PostgreSQL에서 제공하는 Low Level API를 사용하는 백업 방식 입니다.

  1. archiving_mode 및 archive_command 를 설정합니다.
  2. pg_start_backup 함수를 실행합니다.
    1. Ex) SELECT pg_start_backup(‘full-2023-01-01’, false, false);
    2. EXECUTE 권한이 있는 사용자나 SUPERUSER만 실행할 수 있으며, 아무 데이터베이스나 접속해도 클러스터 전체를 백업할 수 있습니다.
    3. pg_start_backup은 3개의 파라미터를 가지고 있습니다.
      1. 1번 파라미터 : label
        1. label은 백업을 구분할 수 있는 유일한 이름을 지정해주어야 합니다.
        2. Non-Exclusive 방식으로 백업할 시 동시에 여러 개의 백업을 진행할 수 있기 때문에 관리할 수 있는 label이 필요하고, 백업 이후에도 어떤 목적으로 한 백업인지 구분할 때 사용할 수 있습니다.
      2. 2번 파라미터 : 체크포인트를 즉시 수행 여부를 지정할 수 있습니다.
        1. 기본 값은 false 이며, checkpoint_completion_target 설정 값의 반절 시간 동안 CHECKPOINT 작업을 기다리겠다는 뜻입니다.
        2. true로 변경 시 가능한 많은 I/O 작업을 요청해서 CHECKPOINT를 즉시 수행합니다.
      3. 3번 파라미터 : Non-exclusive 방식 백업 여부를 지정할 수 있습니다.
        1. 기본 값은 false 이며, 백업을 수행 도중에 들어오는 다른 백업 요청 또한 수행할 수 있도록 하는 백업 모드입니다.
        2. true일 경우, 이 백업이 끝나기 전까지 다른 백업 수행을 요청할 수 없습니다.
  3. 파일 시스템 백업을 수행합니다.
    1. Database 서버에서는 psql Client를 사용하여 ! COMMAND 형식으로 OS 명령어를 사용하여 백업할 수도 있습니다.

pg_basebackup : postgresql에서 제공하는 백업 유틸리티 pg_basebackup을 사용하는 방식입니다.

pg_basebackup은 replication protocol을 사용하기 때문에 유저에게 Replication 권한이 필요합니다.

  1. archiving_mode 및 archive_command 를 설정합니다.
  2. Replication protocol 사용을 위해 설정을 변경합니다.
    1. Database role에게 Replication 권한을 부여합니다.
    2. Replication 연결을 할 수 있도록 postgresql.conf에서 max_wal_senders 값을 변경합니다.
    3. Replication 프로토콜을 이용해서 백업 받을 서버의 호스트를 pg_hba.conf에 등록합니다.
  3. pg_basebackup 유틸리티를 이용하여 데이터를 백업합니다.

제약사항

  1. 운영중인 데이터베이스 서버에 Disk I/O 부하가 생기므로 운영에 영향이 있을 수 있습니다.
    • Disk I/O 상태를 확인 후에 백업을 진행 하시길 바랍니다.
  2. WAL archiving mode가 on이고 WAL archiving이 동작하고 있어야 합니다.
    • 백업을 진행하는 도중에 변경되는 파일에 대해서는 WAL Archiving을 이용해서 백업이 끝난 시점의 데이터와 정합성이 일치하도록 복구할 수 있습니다.
  3. 파일 복사 또는 백업 시 사용하는 프로그램이 복사 대상 파일이 변경되었을 때 오류를 발생하는지 확인이 필요합니다.
    • Hot backup 특성상 파일 복사 도중에 대상 파일이 변경될 수 있습니다. 이 때, 파일을 복사 또는 백업하는 프로그램에 따라 오류를 발생 시킬 수도 있습니다.

WAL Archiving(Continous Archiving)

PostgreSQL은 데이터 무결성 보장을 위해 트랜잭션이 일어나기 전에 모든 변경 사항을 WAL 파일에 저장합니다.

WAL 파일은 데이터베이스의 변경 사항에 대한 기록인 WAL Record의 연속된 집합으로 이루어진 파일이며, 기본적으로 WAL 파일 위치는 Data Cluster($PGDATA) 내부의 $PGDATA/pg_wal/ 입니다. WAL 파일은 데이터베이스 복원 및 복구에 사용되기 때문에, 백업 시점 이후의 WAL 파일은 항상 보관하는 것이 좋습니다.

PostgreSQL에는 작성이 완료된 WAL 파일을 처리할 수 있는 Archive 기능이 있습니다. 이 기능을 사용하기 위해서는 archive_mode와 archive_command를 지정 해주어야 합니다.

먼저, archive_mode에 대해 설명 해드리자면 on, off 그리고 always 옵션이 있으며 on과 always 옵션은 평소에는 같은 동작을 하나 always는 archive recovery 상황에도 동작(restore_command로 복구 된 wal 또한 archive에 저장)하고 standby 모드일 때도 동작합니다.

archive_command는 WAL 파일 작성 완료 또는 archive_timeout이상의 시간이 경과 되었을 때 해당 WAL 파일에 대한 처리 명령어를 지정할 수 있습니다.

cp와 같은 OS 명령어로 파일을 다른 곳에 복사할 수도 있고, Shell Script 실행 또한 가능합니다.해당 명령어의 수행 시 exit code가 0으로 프로그램이 정상적으로 종료되어야 PostgreSQL은 archive에 성공한 것으로 판단하며, 실패 시 재시도 하게 됩니다.

주의 사항

  • WAL 파일의 기록 Level에 따라 archive를 활성화 할 수 없을 수 있으므로 WAL 파일 기록 Level에 대한 공식 매뉴얼을 참조하시기 바랍니다.
  • WAL 파일을 다른 공간에 추가로 저장하기 때문에 저장장치의 공간 관리에 주의를 기울여야 합니다.

Logical Bakcup

Database Backup

특정 데이터베이스와 똑같은 상태의 데이터베이스를 만들 수 있도록 메타 정보 및 데이터를 추출하는 방식입니다.

PostgreSQL에서는 Database를 Logical Backup할 수 있는 pg_dump 유틸리티를 제공합니다.
데이터베이스 서버를 중단하지 않고 백업할 수 있습니다.

백업방법

  1. 백업을 수행할 Role에게 데이터베이스에 포함된 오브젝트 사용 권한을 부여합니다. (USAGE, EXECUTE)
  2. 해당 유저와 백업을 수행할 클라이언트가 접속할 수 있도록 pg_hba.conf를 수정합니다.
  3. pg_dump를 이용하여 백업을 수행합니다.

주의 사항

  • 한 번에 하나의 데이터베이스만 추출이 가능하며 Role, Tablespace 등에 대한 정보는 추출하지 않습니다.

Database Cluster Backup

현재 데이터베이스 클러스터와 똑같은 상태의 데이터베이스를 만들 수 있도록 메타 정보 및 데이터를 추출하는 방식입니다.

PostgreSQL에서는 Database Cluster 전체를 Logical Backup할 수 있는 pg_dumpall 유틸리티를 제공합니다.
데이터베이스 서버를 중단하지 않고 백업할 수 있습니다.

백업방법

  1. 백업을 수행할 Role에게 데이터베이스에 포함된 오브젝트 사용 권한을 부여합니다.
    1. 모든 데이터베이스에 대한 CONNECT, TMPRORARY 권한
    2. 각각의 데이터베이스에 생성된 모든 스키마에 대한 USAGE, SELECT 권한
    3. 각각의 스키마의 모든 테이블을 SELECT 할 수 있는 권한
  2. 해당 유저와 백업을 수행할 클라이언트가 접속할 수 있도록 pg_hba.conf를 수정합니다.
  3. pg_dumpall을 이용하여 백업을 수행합니다.

주의사항

  • 권한 부여 이후에 새로운 데이터베이스나 스키마 등 백업 유저에게 권한이 없는 오브젝트가 생성되면 백업에 실패하므로 권한을 부여해야합니다.

pg_dumpall에 대한 자세한 내용은 Technical Guide의 pg_dumpall을 참조하시기 바랍니다.

지금까지 ’PostgreSQL Backup’에 관해 알아보았습니다

‘PostgreSQL Background Writer 프로세스’를 바로 이어서 확인해보세요!

광고성 정보 수신

개인정보 수집, 활용 목적 및 기간

(주)티맥스티베로의 개인정보 수집 및 이용 목적은 다음과 같습니다.
내용을 자세히 읽어보신 후 동의 여부를 결정해 주시기 바랍니다.

  • 수집 목적: 티맥스티베로 뉴스레터 발송 및 고객 관리
  • 수집 항목: 성함, 회사명, 회사 이메일, 연락처, 부서명, 직급, 산업, 담당업무, 관계사 여부, 방문 경로
  • 보유 및 이용 기간: 동의 철회 시까지

※ 위 개인정보 수집 및 이용에 대한 동의를 거부할 권리가 있습니다.
※ 필수 수집 항목에 대한 동의를 거부하는 경우 뉴스레터 구독이 제한될 수 있습니다.

개인정보의 처리 위탁 정보
  • 업체명: 스티비 주식회사
  • 위탁 업무 목적 및 범위: 광고가 포함된 뉴스레터 발송 및 수신자 관리
 

개인정보 수집 및 이용

개인정보 수집, 활용 목적 및 기간

(주)티맥스티베로의 개인정보 수집 및 이용 목적은 다음과 같습니다. 내용을 자세히 읽어보신 후 동의 여부를 결정해 주시기 바랍니다.

  • 수집 목적: 티맥스티베로 뉴스레터 발송 및 고객 관리
  • 수집 항목: 성함, 회사명, 회사 이메일, 연락처, 부서명, 직급, 산업, 담당업무, 관계사 여부, 방문 경로
  • 보유 및 이용 기간: 동의 철회 시까지

※ 위 개인정보 수집 및 이용에 대한 동의를 거부할 권리가 있습니다.
※ 필수 수집 항목에 대한 동의를 거부하는 경우 뉴스레터 구독이 제한될 수 있습니다.

개인정보의 처리 위탁 정보

  • 업체명: 스티비 주식회사
  • 위탁 업무 목적 및 범위: 광고가 포함된 뉴스레터 발송 및 수신자 관리
  •