메뉴 닫기

pg_dump/pg_dumpall 를 통한 백업 및 복원

PostgreSQL image

 

 

 

오늘 포스팅에서는 Postgresql 운영 시 pg_dump/pg_dumpall 를 통한 백업 및 복원에 대해서 알아보도록 하겠습니다. 

 

 

=======================================================

테스트 환경

– OS : CentOS Linux release 7.9.2009 (Core)

– PostgreSQL : postgres (PostgreSQL) 13.11

=======================================================

 

 

PostgreSQL 사용 시, pd_dump와 pg_dumpall 명령어를 통해 데이터 백업이 가능합니다. 

pg_dump와 pg_dumpall 명령어를 사용하여 백업을 하기 위해서는 데이터베이스에 읽기/쓰기 권한이 있어야 하기 때문에 superuser 권한을 가진 유저로 해당 명령어를 사용해야합니다. 

 

 

1. pg_dump를 이용한 백업 

pg_dump 명령어는 특정 데이터베이스를 지정하여 백업할 수 있는 명령어입니다. 

 

특정 데이터베이스 백업

pg_dump -U [user_name] [db_name] > [db_name].sql

 

특정 테이블 백업 

pg_dump -U [user_name] -t [table_name] [db_name] > [db_name].sql

 

특정 테이블을 제외한 테이블 백업 

pg_dump -U [user_name] -T [table_name] [db_name] > [db_name].sql

 

특정 데이터베이스를 압축 파일로 백업

pg_dump -U [user_name] [db_name] | gzip > [db_name].gz

 

 

 

 

예제1) kitty 계정으로 test 데이터베이스 백업 

pg_dump 사용 예제_1
pg_dump 사용 예제_1

 

예제2) kitty 계정으로 test 데이터베이스의 student 테이블 백업 

pg_dump 사용 예제_2
pg_dump 사용 예제_2

 

예제3) kitty 계정으로 test 데이터베이스에서 “student” 테이블을 제외한 테이블 백업 

pg_dump 사용 예제_3
pg_dump 사용 예제_3

 

예제4) kitty 계정으로 test 데이터베이스를 gzip 압축으로 백업 

pg_dump 사용 예제_4
pg_dump 사용 예제_4

 

 

이 외에 더 많은 사용법이 궁금하다면 help 명령어를 통해 정보를 얻을 수 있습니다.

# /usr/pgsql-13/bin/pg_dump –help

일반 옵션들:
  -f, –file=파일이름          출력 파일 또는 디렉터리 이름
  -F, –format=c|d|t|p         출력 파일 형식(사용자 지정, 디렉터리, tar,
                               일반 텍스트(초기값))
  -j, –jobs=개수              덤프 작업을 병렬 처리 함
  -v, –verbose                작업 내역을 자세히 봄
  -V, –version                버전 정보를 보여주고 마침
  -Z, –compress=0-9           출력 자료 압축 수위
  –lock-wait-timeout=초       테이블 잠금 시 지정한 초만큼 기다린 후 실패
  –no-sync                    fsync 작업 생략
  -?, –help                   이 도움말을 보여주고 마침

출력 내용을 다루는 옵션들:
  -a, –data-only              스키마 빼고 자료만 덤프
  -b, –blobs                  Large Object들도 함께 덤프함
  -B, –no-blobs               Large Object들을 제외하고 덤프함
  -c, –clean                  다시 만들기 전에 데이터베이스 개체 지우기(삭제)
  -C, –create                 데이터베이스 만드는 명령구문도 포함시킴
  -E, –encoding=인코딩        지정한 인코딩으로 자료를 덤프 함
  -n, –schema=PATTERN         지정한 SCHEMA들 자료만 덤프
  -N, –exclude-schema=PATTERN 지정한 SCHEMA들만 빼고 모두 덤프
  -O, –no-owner               일반 텍스트 형식에서
                               개체 소유권 복원 건너뛰기
  -s, –schema-only            자료구조(스키마)만 덤프
  -S, –superuser=NAME         일반 텍스트 형식에서 사용할 슈퍼유저 사용자 이름
  -t, –table=PATTERN          지정한 이름의 테이블들만 덤프
  -T, –exclude-table=PATTERN  지정한 테이블들만 빼고 덤프
  -x, –no-privileges          접근 권한 (grant/revoke) 정보는 덤프 안 함
  –binary-upgrade             업그레이드 유틸리티 전용
  –column-inserts             칼럼 이름과 함께 INSERT 명령으로 자료 덤프
  –disable-dollar-quoting     $ 인용 구문 사용안함, SQL 표준 따옴표 사용
  –disable-triggers           자료만 복원할 때 트리거 사용을 안함
  –enable-row-security        로우 보안 활성화 (현재 작업자가 접근할 수
                               있는 자료만 덤프 함)
  –exclude-table-data=PATTERN 해당 테이블 자료는 덤프 안함
  –extra-float-digits=NUM     기본 extra_float_digits 값 바꿈
  –if-exists                  객체 삭제 시 IF EXISTS 구문 사용
  –include-foreign-data=패턴
                               지정한 패턴과 일치하는 외부 서버의 외부
                               테이블 자료를 포함
  –inserts                    COPY 대신 INSERT 명령으로 자료 덤프
  –load-via-partition-root    상위 테이블을 통해 하위 테이블을 로드함
  –no-comments                코멘트는 덤프 안함
  –no-publications            발행 정보는 덤프하지 않음
  –no-security-labels         보안 라벨 할당을 덤프 하지 않음
  –no-subscriptions           구독 정보는 덤프하지 않음
  –no-synchronized-snapshots  병렬 작업에서 스냅샷 일관성을 맞추지 않음
  –no-tablespaces             테이블스페이스 할당을 덤프하지 않음
  –no-unlogged-table-data     언로그드 테이블 자료는 덤프하지 않음
  –on-conflict-do-nothing     INSERT 구문에 ON CONFLICT DO NOTHING 옵션 추가
  –quote-all-identifiers      예약어가 아니여도 모든 식별자는 따옴표를 씀
  –rows-per-insert=NROWS      한 INSERT 명령으로 입력할 로우 수; –inserts
                               옵션을 사용한 것으로 가정 함
  –section=SECTION            해당 섹션(pre-data, data, post-data)만 덤프
  –serializable-deferrable    자료 정합성을 보장하기 위해 덤프 작업을
                               직렬화 가능한 트랜잭션으로 처리 함
  –snapshot=SNAPSHOT          지정한 스냅샷을 덤프 함
  –strict-names               테이블이나 스키마를 지정했을 때 그 패턴에 맞는
                               객체가 적어도 하나 이상 있어야 함
  –use-set-session-authorization
                               SET SESSION AUTHORIZATION 명령을 ALTER OWNER 명령
                               대신 사용하여 소유권 설정

연결 옵션들:
  -d, –dbname=DBNAME      덤프할 데이터베이스
  -h, –host=HOSTNAME      접속할 데이터베이스 서버 또는 소켓 디렉터리
  -p, –port=PORT          데이터베이스 서버의 포트 번호
  -U, –username=NAME      연결할 데이터베이스 사용자
  -w, –no-password        암호 프롬프트 표시 안 함
  -W, –password           암호 입력 프롬프트 보임(자동으로 처리함)
  –role=ROLENAME          덤프 전에 SET ROLE 수행

 

 

 

2. pg_dumpall을 이용한 백업 

 

pg_dumpall 명령어는 전체 데이터베이스를 백업할 수 있는 명령어입니다. 

 

전체 데이터베이스 백업

pg_dumpall > [dumpfile]

 

 

이 외에 더 많은 사용법이 궁금하다면 help 명령어를 통해 정보를 얻을 수 있습니다.

 

# /usr/pgsql-13/bin/pg_dumpall –help
pg_dumpall 프로그램은 PostgreSQL 데이터베이스 클러스터를 SQL 스크립트 파일로
추출하는 프로그램입니다.

사용법:
  pg_dumpall [옵션]…

일반 옵션들:
  -f, –file=파일이름          출력 파일 이름
  -v, –verbose                작업 내역을 자세히 봄
  -V, –version                버전 정보를 보여주고 마침
  –lock-wait-timeout=초       테이블 잠금 시 지정한 초만큼 기다린 후 실패
  -?, –help                   이 도움말을 보여주고 마침

출력 내용을 다루는 옵션들:
  -a, –data-only              스키마 빼고 자료만 덤프
  -c, –clean                  다시 만들기 전에 데이터베이스 지우기(삭제)
  -E, –encoding=인코딩        지정한 인코딩으로 자료를 덤프 함
  -g, –globals-only           데이터베이스는 제외하고 글로벌 개체만 덤프
  -O, –no-owner               개체 소유권 복원 건너뛰기
  -r, –roles-only             데이터베이스나 테이블스페이스는 제외하고 역할만 덤프
  -s, –schema-only            자료구조(스키마)만 덤프
  -S, –superuser=NAME         덤프에 사용할 슈퍼유저 사용자 이름
  -t, –tablespaces-only       데이터베이스나 역할은 제외하고 테이블스페이스만 덤프
  -x, –no-privileges          접근 권한 (grant/revoke) 정보는 덤프 안 함
  –binary-upgrade             업그레이드 유틸리티 전용
  –column-inserts             칼럼 이름과 함께 INSERT 명령으로 자료 덤프
  –disable-dollar-quoting     $ 인용 구문 사용안함, SQL 표준 따옴표 사용
  –disable-triggers           자료만 복원할 때 트리거 사용을 안함
  –exclude-database=PATTERN   해당 PATTERN에 일치하는 데이터베이스 제외
  –extra-float-digits=NUM     기본 extra_float_digits 값 바꿈
  –if-exists                  객체 삭제 시 IF EXISTS 구문 사용
  –inserts                    COPY 대신 INSERT 명령으로 자료 덤프
  –load-via-partition-root    상위 테이블을 통해 하위 테이블을 로드함
  –no-comments                코멘트는 덤프 안함
  –no-publications            발행 정보는 덤프하지 않음
  –no-role-passwords          롤용 비밀번호를 덤프하지 않음
  –no-security-labels         보안 라벨 할당을 덤프 하지 않음
  –no-subscriptions           구독 정보는 덤프하지 않음
  –no-sync                    fsync 작업 생략
  –no-tablespaces             테이블스페이스 할당을 덤프하지 않음
  –no-unlogged-table-data     언로그드 테이블 자료는 덤프하지 않음
  –on-conflict-do-nothing     INSERT 구문에 ON CONFLICT DO NOTHING 옵션 추가
  –quote-all-identifiers      예약어가 아니여도 모든 식별자는 따옴표를 씀
  –rows-per-insert=NROWS      한 INSERT 명령으로 입력할 로우 수; –inserts
                               옵션을 사용한 것으로 가정 함
  –use-set-session-authorization
                               SET SESSION AUTHORIZATION 명령을 ALTER OWNER 명령
                               대신 사용하여 소유권 설정

연결 옵션들:
  -d, –dbname=접속문자열  서버 접속 문자열
  -h, –host=HOSTNAME      접속할 데이터베이스 서버 또는 소켓 디렉터리
  -l, –database=DBNAME    대체용 기본 데이터베이스
  -p, –port=PORT          데이터베이스 서버의 포트 번호
  -U, –username=NAME      연결할 데이터베이스 사용자
  -w, –no-password        암호 프롬프트 표시 안 함
  -W, –password           암호 입력 프롬프트 보임(자동으로 처리함)
  –role=ROLENAME          덤프 전에 SET ROLE 수행

 

 

3. 백업데이터를 이용한 복구 

 

백업한 덤프파일들은 psql 명령어를 이용해 복구가 가능합니다.

 

pg_dump 명령어를 사용하여 생성한 데이터베이스 백업 파일을 이용한 복구

psql [db_name] < [dumpfile]

 

pg_dumpall 명령어를 사용하여 생성한 all_database 백업 파일을 이용한 복구 

psql -f [dumpfile] postgres

 

.gz 파일로 압축한 백업 파일을 이용한 복구 

gunzip -c [db_name].gz | psql [db_name]

또는

cat [db_name].gz | gunzip | psql [db_name]

 

 

 

이상입니다.

이번 포스팅에서는 Postgresql 운영 시 pg_dump/pg_dumpall 를 통한 백업 및 복원에 대해서 포스팅해보았습니다. 

긴 글 읽어주셔서 감사합니다. 

 

 

 

해당 URL을 참조하여 작성하였습니다. 

 

 

 

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x