redis備份與恢復

1.redis的備份html

redis須要遠程訪問 添加密碼進行登陸,修改主配置文件添加:
requirepass xxx
python

redis-cli -h 127.0.0.1 -p 6379 -a 123456 bgsavemysql

###redis

-h 指定主機ipsql

-p 指定redis端口bash

-a 指定密碼app

bgsave:數據文件持久化到磁盤ui

    而後到數據目錄下打包備份。加密

tar zcf /usr/local/192.168.0.161_redis_6379.tar.gz dump.rdbspa

附上一個自動備份的腳本    或者寫到任務計劃裏

 

#bin/bash

REDIS_DIR="/usr/local/redis/var/db/"

REDIS_PORT=`netstat -tunlp|grep redis|egrep '6379' |grep -v grep|awk '{print $4}'|awk -F: '{print $2}'`

BACKUP_DIR="/usr/local/hero_all_backup"

MYSQL_LOG="/home/msbakscript/logs/mysql.log"

HOST=$(awk -F= '/IPADDR=/ {print $2}' /etc/sysconfig/network-scripts/ifcfg-eth1)

DATE=`date +%F_%H-%M`

Hour=`date '+%H'`

pwd=xxx

all_bak=("$HOST"_"$DATE")

increase_bak=("$HOST"_"$DATE""-increase")

DEL_DAY="7"

#################################################################

PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/mysql/bin:/usr/local/redis/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/python/bin:/usr/local/python/sbin:/usr/

local/eventlog/bin:/usr/local/eventlog/sbin:/usr/local/syslog-ng/bin:/usr/local/syslog-ng/sbin:/root/bin"

redis_backup(){

for i in ${REDIS_PORT}

        do

                idt=`redis-cli -p $i -a ${pwd} info |grep role|awk -F: '{print $2}'|tr -d '\r'`

                #根據redis的角色進行備份,master不開啓AOF持久化,經過bgsave對RDB快照;slave開啓AOF持久化,經過bgrewriteaof進行備份;

                case $idt in

                master)

                        echo "redis-cli -h 127.0.0.1 -p $i -a ${pwd} bgsave"

                        redis-cli -h 127.0.0.1 -p $i -a ${pwd} bgsave

                        ;;

                slvae)

                        echo "redis-cli -h 127.0.0.1 -p $i -a ${pwd} bgrewriteaof"

                        redis-cli -h 127.0.0.1 -p $i -a ${pwd} bgrewriteaof

                        ;;

                *)

                        exit 1

                        ;;

                esac

        done

}

cp_backup(){

        echo "sleep 30 waiting redis write to disk"

        sleep 30

        for i in ${REDIS_PORT}

        do

                idt=`redis-cli -p $i -a ${pwd} info |grep role|awk -F: '{print $2}'|tr -d '\r'`

                #根據redis的角色進行備份,master不開啓AOF持久化,經過bgsave對RDB快照;slave開啓AOF持久化,經過bgrewriteaof進行備份;

                case $idt in

                master)

                        #echo cp ${REDIS_DIR}/dump.rdb ${BACKUP_DIR}/${HOST}_${i}.dump.rdb.$tt >> ${BACKUP_DIR}/redis_backup.log

                        #/bin/cp -f ${REDIS_DIR}/dump.rdb ${BACKUP_DIR}/${HOST}_${i}.dump.rdb.$tt

                        cd ${REDIS_DIR}

                        tar zcf ${BACKUP_DIR}/${all_bak}_${i}.tar.gz dump.rdb

                        echo -en "%${all_bak}_${i}.tar.gz" >>${MYSQL_LOG}

                        cd -

                        ;;

                slvae)

                        #echo cp ${REDIS_DIR}/appendonly.aof ${BACKUP_DIR}/${HOST}_${i}.appendonly.aof.$tt >> ${BACKUP_DIR}/redis_backup.log

                        #/bin/cp -f ${REDIS_DIR}/appendonly.aof ${BACKUP_DIR}/${HOST}_${i}.appendonly.aof.$tt

                        cd ${REDIS_DIR}

                        tar zcf ${BACKUP_DIR}/${all_bak}_${i}.tar.gz appendonly.aof

                        echo -en "%${all_bak}_${i}.tar.gz" >>${MYSQL_LOG}

                        cd -

                       

                        ;;

                *)

                        exit 1

                        ;;

                esac

        done

 

}

 

 

del_backup(){

        #因全部備份都是全庫備,因此按日期刪除4天之前的備份數據

        cd ${BACKUP_DIR}

        find . \( -name "*appendonly*" -o -name "*dump*" \)  -mtime +${DEL_DAY} -exec  rm -f {} \;

}

 

#main start

mkdir -p ${BACKUP_DIR}

tt=`date +"%Y%m%d-%H%M%S"`    ###按照日期時間格式進行備份

redis_backup

cp_backup

del_backup

2.redis還原

 

(1)停掉redis

 

(2)啓動redis,重啓是由於釋放redis內存

 

(3)解壓備份出來的redis備份

 

(4)拷貝覆蓋到正在使用的數據目錄裏面

 

(5)再重啓redis便可。

相關文章
相關標籤/搜索