개발/🖥️ 리눅스

PostgreSQL DB백업을 위한 리눅스 실행 파일(쉘 스크립트/.sh) 생성하기

병아리는삐약삐약 2024. 12. 10. 11:24

최근 리눅스 서버에 데이터 업데이트를 위한 개발환경을 구축하는 일을 하게 되었다. 

우여곡절 끝에 데이터베이스까지 세팅을 완료했고, 앞으로 데이터 추가 작업을 계속해서 진행해 나갈 듯 하다. 

 

그래서 혹시나 모를 상황에 대비하여 백업을 주기적으로 할 생각인데 

기본 pg_dump로 하는 백업은 매번 하기엔 각종 옵션을 하나하나 적어줘야해서 여간 귀찮은게 아니다. 

그래서 이 작업들을 미리 설정해 실행만 시킬 수 있도록 custom-dump.sh 파일을 생성해 보도록 하겠다.

 

백업 방식 : 스키마와 데이터를 따로 백업하고, 파일형식은 tar.gz파일로 지정했다. 

예상 결과물 : dump_db명_날짜

1. 쉘 스크립트 생성

먼저 실행 파일을 원하는 경로에 생성해 주자. 

vi custom-dump.sh

2. 파일 작성

#!/bin/bash

# 설정
DB_USER="admin"               # PostgreSQL 백업 사용자
PASSWORD="password"	      # 비밀번호
HOST="localhost"	      # 호스트주소
PORT=15432		      # db포트설정
DB_NAME="mydb"                # 백업할 데이터베이스 이름
BACKUP_DIR="/path/to/backup"  # 백업 파일 저장 경로
TODAY=$(date +%Y%m%d)         # 오늘 날짜

# 백업 디렉토리 생성 (없을 경우)
mkdir -p "$BACKUP_DIR"

# db 백업
sudo -u postgres
export PGPASSWORD=$PASSWORD
pg_dump -U "$DB_USER" -d "$DB_NAME" -h $HOST -p $PORT | gzip > "$BACKUP_DIR/dump_$DB_NAME_$TODAY.tar.gz"

if [ $? -eq 0 ]; then
    echo " $DB_NAME completed: $BACKUP_DIR/dump_$DB_NAME_$TODAY.tar.gz"
else
    echo " $DB_NAME backup failed!" >&2
    exit 1
fi

3. 실행 권한 부여

기본적으로 윈도우에서는 파일의 확장자를 통해 실행 파일임을 구분하지만(.bat /.exe 등) 

리눅스에서 확장자는 단순 구분을 위한 것일 뿐, 실제로는 실행 권한(x) 여부에 따라 실행파일을 구분한다.

chmod +x custom-dump.sh

4. 실행

이제 한 번의 실행으로 백업파일이 경로에 저장될 것이다!

./custem-dump.sh