DB/MemoryDB

Redis 백업 스크립트

Dragonfog.net 2022. 3. 4. 22:58
반응형

Redis 백업이 필요할때 사용하며됨

##### Redis RDB Backup
00 03 * * * /opt/script/redis_rdb_backup.sh
#!/bin/bash
#
# redis backup script
# usage
# redis-backup.sh port backup.dir
 
port=${1:-9001}
backup_dir=${2:-"/{백업파일 위치}"}
log_dir="/{백업스크립트 위치}/LOG"
backup_date=`date "+%Y%m%d"`
delete_date=`date -d "-3 days" "+%Y%m%d"`
log_file="$log_dir/redis_$port.$backup_date.log"
 
cli="/opt/redis/bin/redis-cli -p $port"
rdb="/opt/redis/dump/dump_${port}.rdb"
 
echo "[$port] Redis RDB Backup Start : $(date +%Y-%m-%d_%H:%M:%S)" >> $log_file
 
test -f $rdb || {
  echo "[$port] No RDB Found" >> $log_file
  exit 1
}
 
test -d $backup_dir || {
  echo "$(date +%Y-%m-%d_%H:%M:%S) : [$port] Create backup directory $backup_dir" && mkdir -p $backup_dir >> $log_file
}
 
# BGSAVE Run
echo "$(date +%Y-%m-%d_%H:%M:%S) : [$port] bgbackup start " >> $log_file
echo bgsave | $cli
echo "$(date +%Y-%m-%d_%H:%M:%S) : [$port] waiting for 600 seconds..." >> $log_file
#sleep 600
 
# RDB File Move && DELETE
try=200
while [ $try -gt 0 ] ; do
  # RDB Backup STATUS Check
  # redis-cli output dos format line feed '\r\n', remove '\r'
  bg=$(echo 'info Persistence' | $cli | awk -F: '/rdb_bgsave_in_progress/{sub(/\r/, "", $0); print $2}')
  ok=$(echo 'info Persistence' | $cli | awk -F: '/rdb_last_bgsave_status/{sub(/\r/, "", $0); print $2}')
  echo "$(date +%Y-%m-%d_%H:%M:%S) : [$port] rdb_bgsave_in_progress : $bg" >> $log_file
  echo "$(date +%Y-%m-%d_%H:%M:%S) : [$port] rdb_last_bgsave_status : $ok" >> $log_file
 
  # RDB Backup File Copy
  if [[ "$bg" = "0" ]] && [[ "$ok" = "ok" ]] ; then
    dst="$backup_dir/dump_$port.$(date +%Y%m%d).rdb"
    echo "$(date +%Y-%m-%d_%H:%M:%S) : $rdb --> $dst Copy Start" >> $log_file
    cp $rdb $dst
    if [ $? = 0 ] ; then
      echo "$(date +%Y-%m-%d_%H:%M:%S) : [$port] redis rdb $rdb copied to $dst." >> $log_file
 
      # delete rdb created 3 days ago
      cd $backup_dir
      #find . \( -name "dump_$port*" \) -mtime +3 -exec rm -f {} \;
      echo "$(date +%Y-%m-%d_%H:%M:%S) : Delete File --> dump_${port}.${delete_date}.rdb" >> $log_file
      ls -trl "dump_${port}.${delete_date}.rdb" >> $log_file
      rm -f dump_${port}.${delete_date}.rdb
      echo "[$port] Redis RDB Backup END : $(date +%Y-%m-%d_%H:%M:%S)" >> $log_file
      exit 0
       
    else
      echo "$(date +%Y-%m-%d_%H:%M:%S) : [$port] >> Failed to copy $rdb to $dst!" >> $log_file
      exit 0
    fi
  fi
  try=$((try - 1))
  echo "$(date +%Y-%m-%d_%H:%M:%S) : [$port] redis maybe busy, waiting and retry in 30s..." >> $log_file
  sleep 30
done
exit 1​
 
반응형

'DB > MemoryDB' 카테고리의 다른 글

REDIS KEY 체크 하기  (0) 2023.05.11
REDIS TTL 없는키 확인 하기  (0) 2023.05.11
redis 보안 [rename-command]  (0) 2023.01.13
Redis 설치 하기 (Replica)  (0) 2021.07.11
Memcached 설치 하기  (0) 2021.07.09