PostgreSQL 온라인 백업 스크립트



 

PostgreSQL 온라인 백업용 스크립트 입니다.

Crontab에 걸어서 사용하면 됩니다.

해당 스크립트는 PostgreSQL DB의 wal_level 이 logical or replica or hot_standby 일 경우에만 사용 가능합니다.

pg_backup.sh

## PostgreSQL 백업 스크립트
## 해당 스크립트는 PostgreSQL DB의 wal_level 이 logical or replica or hot_standby 일 경우에만 사용 가능합니다.
## 작성자 : Rastalion
## rastalion.me

###해당부분은 백업할 DB 서버의 정보에 맞게 직접 채워넣어야 합니다.

### DB의 superuser  (postgres)
DB_USER=

### 백업이 받아지는 경로
BACKUP_DIR=

### DATA 경로
DATA_DIR=

### 테이블 스페이스들이 있는 경로
TBS_DIR=

### archive_command에 의해 파일이 복사 되는 경로
ARCHIVE_DIR=


###아래 부분은 수정 금지

###DB 백업
export DATEVAR=`date +%Y%m%d`
export FILE_NAME=$DATEVAR

if [ -d $BACKUP_DIR/$FILE_NAME ];
  then
    echo "Directory exist"
  else
    echo "Making a backup directory"
    mkdir -p $BACKUP_DIR/$FILE_NAME
fi

RECOVERY_STATUS=`psql -t -U $DB_USER -c "select pg_is_in_recovery();" | head -n 1`
if [[ "$RECOVERY_STATUS" =~ "f" ]]; 
  then
    ###DB 백업 시작
    echo "begin Backup"
    psql -U $DB_USER -c "select pg_start_backup('backup',true);"
    ###백업대상 Copy
    echo "Copy Database"
    cp -a $DATA_DIR $BACKUP_DIR/$FILE_NAME/
    cp -a $TBS_DIR $BACKUP_DIR/$FILE_NAME/
    cd $BACKUP_DIR/$FILE_NAME
    tar -zcvf $BACKUP_DIR/data_`date +%Y%m%d`.tar.gz ./*
    cd $BACKUP_DIR
    rm -rf $FILE_NAME
    ###DB 백업 종료
    echo "end backup"
    psql -U $DB_USER -c "select pg_stop_backup();"
  else
    echo "wal_level fault"
fi
###아카이브 백업
ARCHIVE_STAUS=`psql -t -U $DB_USER -c "show archive_mode;" | head -n 1`
if [[ "$ARCHIVE_STAUS" =~ "on" ]];
  then
    echo "DB archive mode = on"
    cd $ARCHIVE_DIR
    tar -zcvf $BACKUP_DIR/arch_`date +%Y%m%d`.tar.gz ./*
    ### ARCHIVE영역삭제 3일 지난것만 삭제
    if [ -z $(find $ARCHIVE_DIR -type f -mtime +3) ];
      then
        echo "There are no archives"
      else
        echo "Delete Archvie over 3days"
        find $ARCHIVE_DIR/* -type f -mtime +3 -exec rm -f {} \;
      fi
    else
      echo " DB archive mode = off"
fi

### 오래된 백업 삭제
if [ -z $(find $BACKUP_DIR -type f -mtime +3) ];
  then
    echo "There are no backup files"
  else
    echo "Delete Backup files over 3days"
    find $BACKUP_DIR/*.gz -type f -mtime +3 -exec rm -f {} \;
fi

 



You may also like...

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다