스크립트를 사용하여 PostgreSQL 데이터베이스 백업 및 복원
다음 스크립트를 사용하여 PostgreSQL 데이터베이스에 대한 백업을 수행할 수 있습니다. 스크립트를 실행할 때 백업을 수행하기 위해 데이터베이스를 중지하지 않아도 됩니다.
- postgresql_backup_pre.sh: 이 스크립트는 데이터베이스를 백업 모드로 전환합니다.
- postgresql_snapshot_post.sh: 이 스크립트는 데이터베이스에서 백업 모드를 해제합니다.
- postgresql_settings: 업데이트해야 할 PostgreSQL 변수가 포함된 구성 파일입니다.
- postgresql_backup_post.sh: 이 스크립트는 백업 상태에 대한 로그를 업데이트합니다.
전제 조건
백업을 시작하기 전에 다음 사항을 확인하십시오.
- WAL level이 archive(또는 hot_standby)로 설정되어 있습니다.
- archive_mode가 설정되어 있습니다.
- 보관 위치를 지정하도록 archive_command가 설정되어 있습니다.
참고: 설정을 적용하려면 postgresql.conf 파일에서 이러한 설정을 구성한 후 서버를 재부팅하십시오.
다음 명령을 사용하면 재부팅 후 보관 모드 상태를 쉽게 확인할 수 있습니다.
- show archive_mode
- show archive_command
- show WAL level
스크립트 적용
다음 단계를 수행하십시오.
- LinuxPostgres.zip의 압축을 풉니다. 압축을 풀면 4개의 파일(postgresql_backup_pre.sh, postgresql_snapshot_post.sh, postgresql_settings, postgresql_backup_post.sh)이 있습니다.
- pre/post backup/snapshot에 있는 파일을 Linux 백업 서버상의 경로(/opt/Arcserve/d2dserver/usr/prepost)에 복사합니다.
- postgresql_settings를 소스 경로 path /root/backup에 복사합니다.
- postgresql_settings 파일에서 변수에 대해 설정된 모든 값을 확인하고 환경에 따라 변경할 사항이 있으면 적절히 수정합니다.
- UDP 콘솔에서 계획을 구성하고 PostgreSQL 노드를 소스로 선택합니다.
-
- 백업 상태를 확인합니다. PostgreSQL 백업의 상태를 확인하려면 arcserve_postgresql_backup_${DATE}.log 파일을 확인하십시오. 이 로그 파일은 사용자가 설정한 디렉터리에 생성됩니다. 디렉터리 구성에 대한 자세한 내용은 postgresql_settings 파일을 참조하십시오.
PostgreSQL 데이터베이스 복원
다음 단계를 수행하십시오.
- 데이터베이스 서버를 중지합니다.
- 원래 위치에 복원하려면 다음 단계를 수행하십시오.
- 현재 /data 폴더에서 파일 및 디렉터리를 삭제합니다.
- 전체 /data 폴더에 대한 복원을 수행합니다.
- /data 폴더에서 복원하는 작업을 완료한 후 다음 폴더에서 파일을 삭제합니다.
- pg_dynshmem/
- pg_notify/
- pg_serial/
- pg_snapshots/
- pg_stat_tmp/
- pg_subtrans/
- pg_internal.init
- WAL 보관 용도로 구성된 폴더로 이동한 후 다음을 수행하십시오.
- 복원된 pg_wal 디렉터리에 있는 파일을 삭제합니다. 이 디렉터리에는 백업 중 수행된 트랜잭션과 관련된 정보가 포함되어 있습니다.
- 데이터 일관성 및 특정 시점 복구를 위해 사용자 정의 보관 위치의 파일을 pg_wal 폴더에 복사합니다.
- 데이터베이스 서버를 시작합니다.
동일한 서버의 다른 위치에 복원
- 데이터베이스 서버를 중지합니다.
- PGDATA를 실행하여 경로를 새 " new_data_directory_path"로 구성합니다.
- 새로 만든 DB를 `Initdb` cmd를 사용하여 초기화합니다.
- 현재 /data 폴더에서 파일 및 디렉터리를 삭제합니다.
- 전체 /data 폴더에 대한 복원을 수행합니다.
- /data 폴더에서 복원하는 작업을 완료한 후 다음 폴더에서 파일을 삭제합니다.
- pg_dynshmem/
- pg_notify/
- pg_serial/
- pg_snapshots/
- pg_stat_tmp/
- pg_subtrans/
- pg_internal.init
- WAL 보관 용도로 구성된 폴더로 이동한 후 다음을 수행하십시오.
- 복원된 pg_wal 디렉터리에 있는 파일을 삭제합니다. 이 디렉터리에는 백업 중 수행된 트랜잭션과 관련된 정보가 포함되어 있습니다.
- 데이터 일관성 및 특정 시점 복구를 위해 사용자 정의 보관 위치의 파일을 pg_wal 폴더에 복사합니다.
- 데이터베이스 서버를 시작합니다.
- 참고: PGDATA가 업데이트되는 세션에서 데이터베이스 시작을 수행했는지 확인하십시오.
제한 사항
위의 스크립트는 PostgreSQL 데이터베이스가 기본 포트가 아닌 포트로 구성된 경우에는 백업을 수행하는 데 도움이 되지 않습니다. 위 스크립트는 기본 포트 번호 5432에서만 작동합니다.
이 문제를 해결하려면 다음 권장 사항에 따라 postgresql_backup_pre.sh 및 postgresql_snapshot_post.sh 스크립트를 수동으로 수정하십시오.
- postgresql_backup_pre.sh:
- 원래: sudo -u ${USERNAME} -H -- psql -c "SELECT pg_start_backup('Arcserve UDP backup - ${DATE} $(timestamp)', true)" >> ${LOG} 2>&1
- 수정 후: sudo -u ${USERNAME} -H -- psql -p 5432 -c "SELECT pg_start_backup('Arcserve UDP backup - ${DATE} $(timestamp)', true)" >> ${LOG} 2>&1
- postgresql_snapshot_post.sh:
- 원래: sudo -u ${USERNAME} -H -- psql -c "SELECT pg_stop_backup()" >> ${LOG} 2>&1
- 수정 후: sudo -u ${USERNAME} -H -- psql -p 5432 -c "SELECT pg_stop_backup()" >> ${LOG} 2>&1