###只是爲了查詢方便,方法爲借鑑網絡的文章,文章貼在這裏供參考:
http://blog.csdn.net/subuser/article/details/8157178
Redis提供了兩種持久化選項,分別是RDB和AOF。
默認狀況下60秒刷新到disk一次[save 60 10000 當有1w條keys數據被改變時],Redis的數據集保存在叫dump.rdb一個二進制文件,這種策略被稱爲快照。
也能夠手動調用Save或BGSAVE命令的:
/usr/local/bin/redis-cli -h 127.0.0.1 -p 6379 -a pwd bgsave
快照易恢復,文件也小,可是若是遇到宕機等狀況的時候快照的數據可能會不完整。此時可能須要啓用另外一種持久化方式AOF,在配置文件中打開[appendonly yes]。
AOF刷新日誌到disk的規則:
appendfsync always #always 表示每次有寫操做都進行同步,很是慢,很是安全。
appendfsync everysec #everysec表示對寫操做進行累積,每秒同步一次
官方的建議的everysec,安全,就是速度不夠快,若是是機器出現問題可能會丟失1秒的數據。
也能夠手動執行bgrewriteaof進行AOF備份:
/usr/local/bin/redis-cli -h 127.0.0.1 -p 6379 -a pwd bgrewriteaof
咱們如今的作法是一主(Master)多從(Slave),主庫不開啓AOF持久化,只是天天備份一下RDB[官方給的建議是每小時備份RDB文件,看你的策略了],而在從庫上開啓AOF備份;
當redis服務器掛掉時,重啓時將按照如下優先級恢復數據到內存:
若是隻配置AOF,重啓時加載AOF文件恢復數據;
若是同時 配置了RBD和AOF,啓動是隻加載AOF文件恢復數據;
若是隻配置RBD,啓動是講加載dump文件恢復數據。
恢復時須要注意,要是主庫掛了不能直接重啓主庫,不然會直接覆蓋掉從庫的AOF文件,必定要確保要恢復的文件都正確才能啓動,不然會沖掉原來的文件。
根據以上修改redis的備份腳本 #!/bin/sh # for i in `netstat -nlpt|grep redis|awk -F: '{print $2}'|awk '{print $1}'` do idt=`redis-cli -p $i info |grep role|awk -F: '{print $2}'|tr -d '\r'` ### tr -d ‘\r’去掉換行符 #根據redis的角色進行備份,master不開啓AOF持久化,經過bgsave對RDB快照;slave開啓AOF持久化,經過bgrewriteaof進行備份; case $idt in master) redis-cli -h 127.0.0.1 -p $i -a pwd bgsave ;; slvae) redis-cli -h 127.0.0.1 -p $i -a pwd bgrewriteaof ;; *) exit 1 ;; esac done sleep 600 tt=`date +"%Y%m%d-%H%M%S"` ###按照日期時間格式進行備份 echo "--------------------------$tt------------------------------" >>/data/backup/redis_backup.log ##日誌記錄備份詳情 #將備份的AOF或者RDB拷貝到備份目錄下 for i in `find /data/ -name "*.aof"` do echo cp $i /data/backup/`basename $i`.$tt >> /data/backup/redis_backup.log /bin/cp -f $i /data/backup/`basename $i`.$tt done for i in `find /data/ -name "dump*.rdb"` do echo cp $i /data/backup/`basename $i`.$tt >>/data/backup/redis_backup.log /bin/cp -f $i /data/backup/`basename $i`.$tt done #因全部備份都是全庫備,因此按日期刪除4天之前的備份數據 cd /data/backup find . \( -name "appendonly*" -o -name "dump*" \) -mtime +4 -exec rm -f {} \;