JuBin's personal study blog

[PostgreSQL] pg_dumpall 전체백업하기 본문

DataBase

[PostgreSQL] pg_dumpall 전체백업하기

JuBin 2021. 1. 12. 13:32
반응형

PostgreSQL 백업 방법에는 3가지가 있다.

 

1. SQL dump

2. 파일 시스템 레벨 백업

3. 연속 아카이빙

 

이중  SQL dump >  pg_dump, pg_dumpall 백업 방법중 pg_dumpall 명령어를 통해 백업하는 방법을 알아본다.

 

# pg_dump 명령어는 지정한 하나의 데이터베이스만 한 번에 백업한다. 또한 데이터베이스 객체에 속하지 않는 role(데이터베이스 사용자), 테이블스페이스 정보는 백업되지 않는다. 데이터베이스 클러스터 기준 모든 정보를 백업받으려면 pg_dumpall을 이용한다. 

 

 

pg_dump 백업

하나의 데이터베이스만 백업 가능

데이터 압축, 분할, 커스텀 백업 설정 가능

role 또는 tablespace 백업 안됨

pg_dumpall 백업

데이터베이스 전체 내용 백업 가능

role 또는 tablespace 백업 가능

 

pg_restore 복구

비 텍스트 파일 덤프에서 가능

pg_dump로 백업된 파일 복구 가능

pg_dumpall로 백업된 파일은 사용 안됨
psql 복구

텍스트 파일 덤프에서 가능

pg_dump, pg_dumpall로 백업된 파일 복구 가능

 

위 4가지 명령어에 대한 간단한 시나리오는 다음과 같다.

  1. pg_dump의 기본 백업 → psql 복구
  2. pg_dump의 커스텀 백업 → pg_restore 복구
  3. pg_dumpall 백업 → psql 복구

 

# pg_dumpall 명령을 사용할 때는 접속할 해당 데이터베이스의 슈퍼유저(postgres)로 접속해야한다. 그래야, role, 테이블스페이스 정보들을 덤프할 수 있다. 또한 이 덤프된 자료를 복원 할 때도 마찬가지다. 주의 할 점은 만일 기본 테이블스페이스 외에 다른 테이블스페이스를 사용한다면, 그 테이블스페이스의 실재 디렉터리도 덤프 하는 서버에서 사용하는 경로와 똑같이 만들어 놓아야한다.

 


## 실습

 

# 백업

 

1. 먼저 백업파일을 저장해 놓을 디렉토리 생성(pg_dumpall 명령어가 있는 /usr/bin밑에 postgre_backup_test로 생성)

>> cd /usr/bin

>> sudo mkdir ./postgre_backup_test

 

 

2. postgre_backup_test 디렉토리 소유자/그룹 변경

>> sudo chown -R postgres:postgres postgre_backup_test

     * -R : 경로와 그 하위 파일들을 모두 변경한다.

 

 

3. 'ubuntu' -> 'postgres' 계정으로 전환

  >> sudo su postgres

  >> sudo su postgres -c (postgres 권한으로 바로 실행 , -c는 command line 약자)

 

 

4. pg_dumpall 명령어 실행

>> pg_dumpall > ./postgre_backup_test/test1.sql(test1.backup)

 

 


# 백업 2 ( 자동백업 script 작성, Linux 스케쥴러 cron 등록)

1. root 계정으로 접속

   sudo su 

 

2. postgres 계정으로 전환시 비밀번호 물어보지 않음

   vim /etc/sudoer 

   postgres ALL=NOPASSWD: ALL 추가   // 

 

3. postgres 계정전환, /home/ubuntu/postgres_backup/backup.sh쉘파일생성

  sudo su postgres

  cd /home/ubuntu/postgres_backup

  vim backup.sh

 

4. 쉘파일 작성

   echo "PostgreSQL Backup Start Time : " $(date +"%Y-%m-%d %H:%M:%S")

   /usr/bin/pg_dumpall > /home/ubuntu/postgres_backup/$(date +"%Y%m%d")testBak.backup

   echo "PostgreSQL Backup End Time : " $(date +"%Y-%m-%d %H:%M:%S")

 

5. 크론탭 등록

   */10 * * * * /home/ubuntu/backup.sh

 


 

 

 

# 복구

1. psql 명령어를 통해 복구

>> sudo -u postgres psql -f /usr/bin/postgre_backup_test/test1.backup

 


 

//실제로 시작한 기존 데이터베이스 이름을 지정할 수 있지만 비어있는 클러스터로 로딩한 경우 postgres를 일반적으로 사용해야 합니다.

반응형