반응형
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 |