백업 툴 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 설치
- postgresql14-libs - postgresql 버전과 서버 리눅스 버전에 맞는 라이브러리 설치
- pg_rman - postgresql 버전에 맞는 버전으로 설치 - https://github.com/ossc-db/pg_rman/releases
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을 통해 데이터 등록