1.redis的備份html
redis須要遠程訪問 添加密碼進行登陸,修改主配置文件添加:
requirepass xxxpython
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便可。