PostgreSQL 온라인 백업 스크립트
PostgreSQL 온라인 백업용 스크립트 입니다.
Crontab에 걸어서 사용하면 됩니다.
해당 스크립트는 PostgreSQL DB의 wal_level 이 logical or replica or hot_standby 일 경우에만 사용 가능합니다.
## 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
최신 댓글