----------------redis备份恢复方法-----------------------------
1.采用aof恢复方法
若appendonly设置为no的情况下,在每个节点上执行bgrewriteaof命令生成一个aof文件
若appendonly已经为yes的话,在data目录会自动生成有aof文件
我这里是appendonly设置为no的,所以在每个节点上执行如下命令
./redis-cli -c -h 192.168.1.118 -p 1001
./redis-cli -c -h 192.168.1.118 -p 1002
./redis-cli -c -h 192.168.1.118 -p 1003

./redis-cli -c -h 192.168.1.85 -p 2001
./redis-cli -c -h 192.168.1.85 -p 2002
./redis-cli -c -h 192.168.1.85 -p 2003
如下:
192.168.1.118:1001> bgrewriteaof
Background append only file rewriting started
要是数据量很大的话,生成aof文件需要些时间
生成的aof文件是一些指令命令
[root@localhost c3]# more c3.aof
*2
$6
SELECT
$1
0
*3
$3
SET
$6
name15
$15
huangxueliang15
*3
$3
SET
$6
name25
$15
huangxueliang25
*3
$3
SET
$6
name18
$15
huangxueliang18

执行以上脚本后,在每个节点的data目录下都会生成一个aof文件

2.停掉现有的集群
192.168.1.118
./redis-cli -c -h 192.168.1.118 -p 1001 shutdown
./redis-cli -c -h 192.168.1.118 -p 1002 shutdown
./redis-cli -c -h 192.168.1.118 -p 1003 shutdown

192.168.1.85
./redis-cli -c -h 192.168.1.85 -p 2001 shutdown
./redis-cli -c -h 192.168.1.85 -p 2002 shutdown
./redis-cli -c -h 192.168.1.85 -p 2003 shutdown

3.初始化集群(删除data目录下的相应文件)
A.cluster-config-file指定的文件
B.data目录下的aof文件,文件我们不能删除,可以重命名的方式
C.data目录下的rdb文件
我这里是采用mv的方式
[root@localhost c1]# pwd
/opt/redis_cluster/data/c1
[root@localhost c1]# mv c1.aof bak_c1.aof
[root@localhost c1]# rm c1.conf
[root@localhost c1]# mv dump-c1.rdb bak_dump-c1.rdb

4.初始化集群(修改集群各节点端口号)
192.168.1.118(c1.conf,c2.conf,c3.conf)
1001->7001
1002->7002
1003->7003

192.168.1.85(c1.conf,c2.conf,c3.conf)
2001->8001
2002->8002
2003->8003

5.初始化集群(启动各节点)
192.168.1.118
/opt/redis_cluster/bin/redis-server /opt/redis_cluster/conf/c1.conf
/opt/redis_cluster/bin/redis-server /opt/redis_cluster/conf/c2.conf
/opt/redis_cluster/bin/redis-server /opt/redis_cluster/conf/c3.conf

192.168.1.85
/opt/redis_cluster/bin/redis-server /opt/redis_cluster/conf/c1.conf
/opt/redis_cluster/bin/redis-server /opt/redis_cluster/conf/c2.conf
/opt/redis_cluster/bin/redis-server /opt/redis_cluster/conf/c3.conf

5.初始化集群(创建集群)
/opt/redis_cluster/redis-trib.rb create --replicas 1 192.168.1.118:7001 192.168.1.118:7002 192.168.1.118:7003 192.168.1.85:8001 192.168.1.85:8002 192.168.1.85:8003

[root@localhost redis_cluster]# ./redis-trib.rb check 192.168.1.118:7001
>>> Performing Cluster Check (using node 192.168.1.118:7001)
M: 9af2a4297106fd62ca577946781f476b44bbd170 192.168.1.118:7001
slots:0-5460 (5461 slots) master
1 additional replica(s)
M: e2b286b2ce65b2afa4d9afabc9fbadb4106824d3 192.168.1.118:7002
slots:10923-16383 (5461 slots) master
1 additional replica(s)
S: fffaad68a73c0fe62e190c1bb39d92cdcb424eab 192.168.1.85:8003
slots: (0 slots) slave
replicates e2b286b2ce65b2afa4d9afabc9fbadb4106824d3
M: 68783efacb82dc3a52570f593aaa2fe40fb6623e 192.168.1.85:8001
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: 57a7b5eb8e1612bac7f16bcf7e6d0df9a4c5e3a0 192.168.1.85:8002
slots: (0 slots) slave
replicates 9af2a4297106fd62ca577946781f476b44bbd170
S: 078dc90bbe8d55b6aa6b321704cbe6baa8394505 192.168.1.118:7003
slots: (0 slots) slave
replicates 68783efacb82dc3a52570f593aaa2fe40fb6623e
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered

可以看到当前的集群是没有数据的
[root@localhost bin]# ./redis-cli -c -h 192.168.1.118 -p 7001
192.168.1.118:7001> keys *
(empty list or set)

6.数据恢复
步骤3的时候每个节点我们都备份了一个aof文件,那么我们采用该文件进行恢复
192.168.1.118:7001
./redis-cli -h 192.168.1.118 -p 7001 --pipe < /opt/redis_cluster/data/c1/bak_c1.aof
All data transferred. Waiting for the last reply...
Last reply received from server.
errors: 0, replies: 11

这里导入了11条记录,也就是原来节点的数据

192.168.1.118:7002
./redis-cli -h 192.168.1.118 -p 7002 --pipe < /opt/redis_cluster/data/c2/bak_c2.aof

192.168.1.118:7003
[root@localhost bin]# ./redis-cli -h 192.168.1.118 -p 7003 --pipe < /opt/redis_cluster/data/c3/bak_c3.aof
All data transferred. Waiting for the last reply...
MOVED 10325 192.168.1.85:8001
MOVED 6586 192.168.1.85:8001
MOVED 7702 192.168.1.85:8001
MOVED 10767 192.168.1.85:8001
MOVED 6888 192.168.1.85:8001
MOVED 7012 192.168.1.85:8001
MOVED 6462 192.168.1.85:8001
MOVED 10589 192.168.1.85:8001
MOVED 7368 192.168.1.85:8001
MOVED 6764 192.168.1.85:8001
MOVED 8090 192.168.1.85:8001
MOVED 5878 192.168.1.85:8001
MOVED 7244 192.168.1.85:8001
MOVED 10713 192.168.1.85:8001
MOVED 10891 192.168.1.85:8001
MOVED 7966 192.168.1.85:8001
Last reply received from server.
errors: 16, replies: 17
[root@localhost bin]#
发现该节点是从节点,不需要导入数据,从上面的配置信息发现也是报错

以下操作发现是从节点的也会报上面的错误
192.168.1.85:8001
./redis-cli -h 192.168.1.85 -p 8001 --pipe < /opt/redis_cluster/data/c1/bak_c1.aof
192.168.1.85:8002
./redis-cli -h 192.168.1.85 -p 8002 --pipe < /opt/redis_cluster/data/c2/bak_c2.aof
192.168.1.85:8003
./redis-cli -h 192.168.1.85 -p 8003 --pipe < /opt/redis_cluster/data/c3/bak_c3.aof

其实恢复过程只需要主节点上的aof文件即可

7.检查数据恢复情况(检查主节点上的记录即可)
[root@localhost bin]# ./redis-cli -h 192.168.1.118 -p 7001
192.168.1.118:7001> keys *
1) "name40"
2) "name22"
3) "name31"
4) "name26"
5) "name35"
6) "name08"
7) "name04"
8) "name17"
9) "name13"
10) "name39"

[root@localhost bin]# ./redis-cli -h 192.168.1.118 -p 7002
192.168.1.118:7002> keys *
1) "name10"
2) "name03"
3) "name19"
4) "name25"
5) "name06"
6) "name14"
7) "name36"
8) "name02"
9) "name07"
10) "name29"
11) "name21"
12) "name32"
13) "name15"
14) "name18"
15) "name11"
192.168.1.118:7002>

[root@localhost bin]# ./redis-cli -h 192.168.1.85 -p 8001
192.168.1.85:8001> keys *
1) "name33"
2) "name30"
3) "name34"
4) "name23"
5) "name01"
6) "name05"
7) "name09"
8) "name20"
9) "name12"
10) "name24"
11) "name37"
12) "name27"
13) "name16"
14) "name28"
15) "name38"

可以看到数据以及恢复,原来集群里的数据是name1-name40

redis恢复(aof)的更多相关文章

  1. Redis的AOF功能

    引言:  Redis是基于内存的数据库,同时也提供了若干持久化的方案,允许用户把内存中的数据,写入本地文件系统,以备下次重启或者当机之后继续使用.本文将描述如何基于Redis来设置AOF功能 什么是R ...

  2. Redis开启AOF导致的删库事件

    事件背景 Redis主从开启AOF,错误操作导致数据被清空. Redis主要作用:缓存.队列. 事故过程 Redis搭建了主从,持久化方式为RDB,RDB没有定时备份,且AOF都没有开启. 考虑到开启 ...

  3. Redis持久化——AOF(二)

    核心知识点: 1.AOF:以独立日志的方式记录写命令,重启时再执行命令.与RDB不同的是解决数据持久化的实时性,可以记录所有写操作. 2.AOF工作流程:写入命令.文件同步.文件重写.文件加载. 3. ...

  4. 一文了解:Redis的AOF持久化

    Redis的AOF持久化 每当Redis-Server接收到写数据时,就把命令以文本形式追加到AOF文件里,当重启Redis服务时,AOF文件里的命令会被重新执行一次,重新恢复数据.当AOF过大时将重 ...

  5. Golang 实现 Redis(4): AOF 持久化与AOF重写

    本文是使用 golang 实现 redis 系列的第四篇文章,将介绍如何使用 golang 实现 Append Only File 持久化及 AOF 文件重写. 本文完整源代码在作者GithubHDT ...

  6. redis 开启AOF 持久化

    redis 开启AOF 找到redis 安装目录 打开 redis.conf  修改以下参数: appendonly  yes        (默认no,关闭)表示是否开启AOF持久化: append ...

  7. Redis持久化——AOF日志

    最新:Redis内存--内存消耗(内存都去哪了?) 最新:Redis持久化--如何选择合适的持久化方式 最新:Redis持久化--AOF日志 更多文章... 上一篇文章Redis持久化--内存快照(R ...

  8. Redis - 持久化 AOF 和 RDB

    Redis - 持久化 AOF 和 RDB AOF AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集. AOF 文件中的命令全部以 Redis 协议的格 ...

  9. redis 配置文件aof配置

    redis 配置文件aof配置: bind 127.0.0.1 port 6379 daemonize yes dbfilename dump.rdb dir /new_renpeng/redis/ ...

随机推荐

  1. 火狐浏览器安装firebug和firepath插件方法(离线)

    1.下载FF55以内版本安装包,安装后在Firefox 更新选择"不检查更新" 2.火狐浏览器各个版本下载地址:http://ftp.mozilla.org/pub/firefox ...

  2. ubuntu16.04升级Python3.5到Python3.7

    因为python3.5和python3.6之后的版本差异很大,所有需要改变python的版本 简易安装python后得到的3版本的版本号是python3.5. 可以使用下面的命令查看py版本: pyt ...

  3. X86-32位架构的CPU是不是内存只能到4G

    不是的,可以通过分页机制扩展实现超过4G内存的支持. 什么是分页机制扩展? PAE. 什么是PAE?   PAE如何实现的?  

  4. 推荐一个Monokai风格的EditPlus配色方案

    如何配置 找到EditPlus的配置文件editplus_u.ini,该文件默认在:系统盘:\Users\用户名\AppData\Roaming\EditPlus目录中.将其中的内容替换为如下即可: ...

  5. java -cp通配符

    JDK6支持java -cp后面跟通配符'*',试了一下发现还是需要注意: 错误方式(Wrong way): java  -cp /data/apps/lib/*.jar com.chinacache ...

  6. iOS 字体下载

    iOS可以动态的为系统下载字体,这些字体都下载到了系统的目录下,并且可以被其他应用公用 来看下如何实现动态下载: // 创建下载字体请求描述的准备 NSMutableDictionary *attrs ...

  7. 报错处理——# Creating Server TCP listening socket *:6379: bind: Address already in use

    在启动redis时报错 # Creating Server TCP listening socket *:6379: bind: Address already in use 错误原因 6379地址已 ...

  8. AWS的EC2实例搭建服务器使用stackoverflow教程

    作为一个技术开发工程师, 一个给力的问题解决方案搜索引擎是十分必要的, stackoverflow作为一个码农必备神器, 存在访问不稳定,有时候打不开的问题,下面介绍如何在亚马逊云服务器上搭建属于自己 ...

  9. Ajax post数据查询

    <?php $server = '127.0.0.1'; $user = 'root'; $password = ''; $database = 'yiibaidb'; $officecode ...

  10. np.mgrid 用法

    import numpy as np dtype=np.float32 num_anchors = 6 y, x = np.mgrid[0:4, 0:4] print(y) print(x) y = ...