백업 툴 pg_rman 을 통한 백업 정리

 

 

사전 작업

  • 백업 디렉토리 설정
  • 백업 로그 위치 결정
  • 백업 스크립트 작성 ( Full 백업 / 증분 백업 ) 
### FULL BACKUP SCRIPT ###
export LANG=C
export HNAME='hostname'

version_info="pg_rman backup for pstgresql"


### POSTGRESQL ENV ###
pg_HOME=[ postgresql 위치 ]
pg_RMAN=[ pg_rman bin 파일 위치 ]
PGDATA=[ 데이터 위치 작성 ] 
SERVER_HOST=[ DB 서버 IP ]
PORT=[ postgresql 포트번호 ]
DB_USER=[ 유저명 ]
DATABASE=postgres

BACKUP_DIR=[ 백업 위치 ]
CLUSTER_NAME=[ 클러스터명? ]
LOG_DIR=[ 로그 저장 위치 ]

LOGFILE=${CLUSTER_NAME}_`data+%y%m%d`.log
LOG=${LOG_DIR}/${LOGFILE}


### FULL BACKUP ###
function fullbackup_database {
	exit_code=0
    exit_code= ${PG_RMAN} backup --backup-mode=full --progress -B ${BACKUP_DIR} -D ${PGDATA} -U ${DB_USER} -h ${SERVER_HOST} -p ${PORT} -d ${DATABASE} >> ${LOG} 2 >&1
    exit_code=$?
    
    if [ ${exit_code} == "0" ]; then
    	echo "Backup sucess!" >> $LOG
        validate_backup
    else
    	echo "Backup fail" >> $LOG
        return ${exit_code}
    fi
}


### VAILD BACKUP ###
function validate_backup {
	exit_code=0
    exit_code= ${PG_RMAN} validate -B ${BACKUP_DIR} -D ${PGDATA} >> ${LOG} 2>&1
    exit_code=$?
    
    if [ ${exit_code} == "0" ]; then
    	echo "Backup Validate success!" >> $LOG
        show_backup
    else
    	echo "Backup validate fail!" >> $LOG
        return ${exit_code}
    fi
}


### SHOW BACKUP ###
function show_backup {
	exit_code= ${PG_RMAN} show detail -B ${BACKUP_DIR} >> ${LOG} 2>&1
}    

### RUN ###
cat << ! >> "${LOG}"
============================================'
${CLUSTER_NAME} Backup start at ${date}
============================================'
!
fullbackup_database

cat << ! >> "${LOG}"
============================================'
${CLUSTER_NAME} Backup end at ${date}
============================================'
!
### ARCHIVE BACKUP SCRIPT ###
export LANG=C
export HNAME='hostname'

version_info="pg_rman backup for pstgresql"


### POSTGRESQL ENV ###
pg_HOME=[ postgresql 위치 ]
pg_RMAN=[ pg_rman bin 파일 위치 ]
PGDATA=[ 데이터 위치 작성 ] 
SERVER_HOST=[ DB 서버 IP ]
PORT=[ postgresql 포트번호 ]
DB_USER=[ 유저명 ]
DATABASE=postgres

BACKUP_DIR=[ 백업 위치 ]
CLUSTER_NAME=[ 클러스터명? ]
LOG_DIR=[ 로그 저장 위치 ]

LOGFILE=${CLUSTER_NAME}_`data+%y%m%d`.log
LOG=${LOG_DIR}/${LOGFILE}


### FULL BACKUP ###
function fullbackup_database {
	exit_code=0
    exit_code= ${PG_RMAN} backup --backup-mode=archive --progress -B ${BACKUP_DIR} -D ${PGDATA} -U ${DB_USER} -h ${SERVER_HOST} -p ${PORT} -d ${DATABASE} >> ${LOG} 2 >&1
    exit_code=$?
    
    if [ ${exit_code} == "0" ]; then
    	echo "Backup sucess!" >> $LOG
        validate_backup
    else
    	echo "Backup fail" >> $LOG
        return ${exit_code}
    fi
}


### VAILD BACKUP ###
function validate_backup {
	exit_code=0
    exit_code= ${PG_RMAN} validate -B ${BACKUP_DIR} -D ${PGDATA} >> ${LOG} 2>&1
    exit_code=$?
    
    if [ ${exit_code} == "0" ]; then
    	echo "Archive Backup Validate success!" >> $LOG
        show_backup
    else
    	echo "Archive Backup validate fail!" >> $LOG
        return ${exit_code}
    fi
}


### SHOW BACKUP ###
function show_backup {
	exit_code= ${PG_RMAN} show detail -B ${BACKUP_DIR} >> ${LOG} 2>&1
}    

### RUN ###
cat << ! >> "${LOG}"
============================================'
${CLUSTER_NAME} Backup start at ${date}
============================================'
!
fullbackup_database

cat << ! >> "${LOG}"
============================================'
${CLUSTER_NAME} Backup end at ${date}
============================================'
!

 

 

pg_rman 설치 

 

pg_rman.init 스크립트 생성

ARCLOG_PATH=[ 아카이브 로그 위치 ]
SRVLOG_PATH=[ postgresql 로그 위치 ]

BACKUP_MODE =[ full, incremental, archive 중 선택 ]

KEEP_DATA_GENERATIONS=[ 백업 생성 횟수 ]
KEEP_DATA_DAYS=[ 백업 보관 기간 ]
KEEP_SRVLOG_FILES=[ 백업된 서버 로그 파일 개수 ]
KEEP_SRVLOG_DAYS=[ 백업된 서버 로그 파일 보관 기간 ]
KEEP_ARCLOG_FILES=[ 저장될 아카이브 WAL 파일 개수 ] 
KEEP_ARCLOG_DAYS=[ 저장될 아카이브 WAL 파일 보관 기간 ]
  • 데이터 삭제 기준
    • KEEP_DATA_GENERATIONS, KEEP_DATA_DAYS  두 값을 초과하는 백업 데이터 삭제
    • KEEP_SRVLOG_FILES, KEEP_SRVLOG_DAYS 두 값을 초과하는 서버 로그 데이터 삭제
    • KEEP_ARCLOG_FILES, KEEP_ARCLOG_DAYS 두 값을 초과하는 아카이브 WAL 데이터 삭제

 

 

백업 스크립트 등록

  • crontab을 통해 데이터 등록

+ Recent posts