redis恢复(aof)
----------------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)的更多相关文章
- Redis的AOF功能
引言: Redis是基于内存的数据库,同时也提供了若干持久化的方案,允许用户把内存中的数据,写入本地文件系统,以备下次重启或者当机之后继续使用.本文将描述如何基于Redis来设置AOF功能 什么是R ...
- Redis开启AOF导致的删库事件
事件背景 Redis主从开启AOF,错误操作导致数据被清空. Redis主要作用:缓存.队列. 事故过程 Redis搭建了主从,持久化方式为RDB,RDB没有定时备份,且AOF都没有开启. 考虑到开启 ...
- Redis持久化——AOF(二)
核心知识点: 1.AOF:以独立日志的方式记录写命令,重启时再执行命令.与RDB不同的是解决数据持久化的实时性,可以记录所有写操作. 2.AOF工作流程:写入命令.文件同步.文件重写.文件加载. 3. ...
- 一文了解:Redis的AOF持久化
Redis的AOF持久化 每当Redis-Server接收到写数据时,就把命令以文本形式追加到AOF文件里,当重启Redis服务时,AOF文件里的命令会被重新执行一次,重新恢复数据.当AOF过大时将重 ...
- Golang 实现 Redis(4): AOF 持久化与AOF重写
本文是使用 golang 实现 redis 系列的第四篇文章,将介绍如何使用 golang 实现 Append Only File 持久化及 AOF 文件重写. 本文完整源代码在作者GithubHDT ...
- redis 开启AOF 持久化
redis 开启AOF 找到redis 安装目录 打开 redis.conf 修改以下参数: appendonly yes (默认no,关闭)表示是否开启AOF持久化: append ...
- Redis持久化——AOF日志
最新:Redis内存--内存消耗(内存都去哪了?) 最新:Redis持久化--如何选择合适的持久化方式 最新:Redis持久化--AOF日志 更多文章... 上一篇文章Redis持久化--内存快照(R ...
- Redis - 持久化 AOF 和 RDB
Redis - 持久化 AOF 和 RDB AOF AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集. AOF 文件中的命令全部以 Redis 协议的格 ...
- redis 配置文件aof配置
redis 配置文件aof配置: bind 127.0.0.1 port 6379 daemonize yes dbfilename dump.rdb dir /new_renpeng/redis/ ...
随机推荐
- 电子产品使用感受之----AirPods的一天使用体验分享
2019.03.29 晚上8点50分更新: 3月28日我的新款AirPods终于到货了,作为一代产品使用2年的用户,终于可以说说这枚新品的一天使用感受了: 我们会从以下几个方面来进行阐述: 外观 技术 ...
- PHP算法学习(1) 全局唯一ID
2019年1月8日16:11:13 svn地址:svn://gitee.com/zxadmin/live_z 代码在code里面 全局唯一ID 生产 后续会添加其他方法 <?php /* ...
- Python 学习笔记6 变量-元组
我们在上一篇中了解了变量list(列表), 今天我们来介绍下元组.元组是由括号和逗号,组织起来的一个元素的集合.和list不同的是,它其中的元素是不能被修改的,和其他语言中的常量相类似. 需要注意的是 ...
- Codeforces Round #542 题解
Codeforces Round #542 abstract I决策中的独立性, II联通块染色板子 IIIVoronoi diagram O(N^2 logN) VI环上距离分类讨论加取模,最值中的 ...
- cesium 飞线 瓣体传感器(雷达扫描) 效果
参考:github地址 本人新手,npm webpack 这些还是一知半解,只记录自己得到成功结果的操作步骤,可能存在多余或错误的步骤. 1.github 把代码下载下来,解压. 2.webstorm ...
- android上的bin/sbin/xbin等各种目录
1. /system是用于存储 由AOSP构建生成的 不可变组件的 主要Android目录.这包括本机二进制文件,本机库,框架包和存储主要的应用程序.它通常是从根文件系统的单独映像中以只读方式挂载的, ...
- 核心思想:决定你是富人还是穷人的11条标准(有强烈的赚钱意识,这也是他血液里的东西,太精彩了)good
原文地址:决定你是富人还是穷人的11条标准作者:谢仲华 1.自我认知 穷人:很少想到如何去赚钱和如何才能赚到钱,认为自己一辈子就该这样,不相信会有什么改变. 富人:骨子里就深信自己生下来不是要做穷人, ...
- SQL中ON和WHERE的区别(转)
原文:https://www.cnblogs.com/guanshan/articles/guan062.html 数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时 ...
- iOS 反调试
反调试主要分为两种,第一种阻止调试器附加,第二种是检测是否有调试器存在 1.ptrace是系统用来对运行中的进程进行调试和跟踪的工具,通过ptrace,可以对另一个进程实现调试跟踪.但是里面提供了一个 ...
- 多线程深入:让你彻底理解Synchronized(转)
原文:https://www.jianshu.com/p/d53bf830fa09 1. synchronized简介 在学习知识前,我们先来看一个现象: public class Synchroni ...