이 포스팅에서는 PostgreSQL 14.2를 사용하는 Ubuntu 18.04 서버에서 작동 백업 스케쥴러를 구축하는 방법에 대해 설명하려고 한다. 매일 자정마다 pg_dump를 이용해 DB 백업을 수행하고, 백업 파일은 별도의 폴더에 저장하며, 30일이 지난 백업은 자동으로 삭제하도록 구성할 예정이다.
1. 준비 사항
- 운영체제: Ubuntu 18.04
- PostgreSQL 버전: 14.2
- 백업 도구: pg_dump
- 스케줄러: cron
- 백업 경로: /home/ubuntu/pg_backups (백업 파일은 이 경로 내의 backups 폴더에 저장)
또한, 백업 작업을 진행하기 전에 데이터베이스 접속 정보를 정확히 확인하고, 필요한 경우 DBeaver 등을 통해 DB 이름과 사용자 정보를 점검해야 한다.
2. 백업 스크립트 작성
먼저, /home/ubuntu/pg_backups/backup.sh 파일에 아래와 같은 스크립트를 작성한다.
이 스크립트는 pg_dump 명령어를 이용해 DB 백업을 생성하며, 파일명에는 날짜 정보를 포함하고, 백업 성공 여부를 로그에 기록한다. 또한, 백업 파일이 30일 이상 된 경우 find 명령어를 사용해 삭제한다.
#!/bin/bash
# DB 및 서버 관련 변수 (환경에 맞게 수정)
DB_NAME="your_database_name"
DB_USER="your_username"
DB_HOST="localhost"
DB_PORT=15001
# 만약 비밀번호가 필요하다면 .pgpass 파일을 설정하거나 아래처럼 환경변수로 지정하세요.
# export PGPASSWORD="your_password"
# 백업 파일 및 로그 관련 변수
BASE_BACKUP_DIR="/home/ubuntu/pg_backups"
BACKUP_DIR="${BASE_BACKUP_DIR}/backups" # 백업 파일 저장 폴더
LOG_FILE="${BASE_BACKUP_DIR}/backup.log"
# 백업 폴더가 없으면 생성
mkdir -p "$BACKUP_DIR"
# 파일명에 날짜 추가 (예: your_database_name_20250322.sql)
DATE=$(date +'%Y%m%d')
BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}_${DATE}.sql"
# pg_dump를 통해 백업 실행
pg_dump -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" "$DB_NAME" > "$BACKUP_FILE"
if [ $? -eq 0 ]; then
echo "$(date +'%Y-%m-%d %H:%M:%S') Backup succeeded: ${BACKUP_FILE}" >> "$LOG_FILE"
else
echo "$(date +'%Y-%m-%d %H:%M:%S') Backup failed" >> "$LOG_FILE"
fi
# 30일 이상된 백업 파일 삭제
find "$BACKUP_DIR" -type f -name "*.sql" -mtime +30 -delete
echo "$(date +'%Y-%m-%d %H:%M:%S') Old backups removed." >> "$LOG_FILE"
팁:
스크립트 내의 DB_NAME, DB_USER, DB_HOST, DB_PORT 값을 실제 환경에 맞게 수정한다.
보안상 비밀번호는 .pgpass 파일을 사용하거나 안전한 환경변수를 통해 처리하는 것이 좋다.
3. Crontab에 등록하여 자동 실행 설정
위 스크립트를 매일 자정(00:00)에 자동으로 실행하도록 cron에 등록한다.
1. 터미널에서 crontab 편집기를 연다.
crontab -e
2. 사용하는 에디터에 따라 (nano 또는 vim) 편집한 후, 아래 라인을 추가한다.
0 0 * * * /home/ubuntu/pg_backups/backup.sh >> /home/ubuntu/pg_backups/cron_backup.log 2>&1
이 설정은 매일 자정에 백업 스크립트를 실행하고, 실행 결과를
/home/ubuntu/pg_backups/cron_backup.log 파일에 기록한다.
4. 테스트 및 검증
스크립트 수동 실행
먼저, 스크립트를 수동으로 실행하여 모든 변수와 경로가 올바르게 설정되었는지 확인한다.
sh /home/ubuntu/pg_backups/backup.sh
실행 후, /home/ubuntu/pg_backups/backup.log 파일을 열어 백업 성공 여부 및 삭제 로그를 확인한다.
크론 테스트
크론에 등록된 작업은 지정된 시간(자정)에 자동으로 실행된다. 초기 테스트를 위해 crontab 항목을 임시로 현재 시간에 맞춰 변경해 볼 수도 있다.
5. 결론
이와 같이 PostgreSQL DB 백업 스케쥴러를 구축하면, 정기적인 백업과 함께 오래된 백업 파일을 자동으로 정리하여 디스크 공간을 효율적으로 관리할 수 있다.
나는 이 방식이 간단하면서도 안정적이라고 생각한다. 특히, 수동 테스트 후 cron에 등록하는 과정을 통해 예기치 않은 문제를 미연에 방지할 수 있으며, 운영 환경에서 백업 관련 이슈 발생 시 빠르게 복구할 수 있는 점이 장점이다.
이 포스팅이 PostgreSQL DB 백업 스케쥴러 구축에 도움이 되었길 바라며, 질문이나 추가 의견이 있다면 댓글로 남겨주세요!
'DataBase' 카테고리의 다른 글
DB Connection Pool (데이터베이스 연결 풀) 개념 (0) | 2025.01.25 |
---|---|
[SQL] Inner Join에서 조인 조건이 같을 시, 테이블 순서의 영향이 있을까? (0) | 2023.07.10 |
[Database] ACID(원자성, 일관성, 고립성, 지속성) (0) | 2023.05.21 |
[Database] UPSERT에 대해 (1) | 2022.11.15 |
[Database] ORM에 대해 (0) | 2022.08.20 |